Skip to content

基准

概述

在多个平台上对图像分类模型进行测试,为 TensorFlow 社区创建了一个参考点。在 方法 章节中会详细说明如何执行测试,并给出使用的脚本链接。

图像分类模型的结果

InceptionV3 (arXiv:1512.00567)、ResNet-50 (arXiv:1512.03385)、ResNet-152 (arXiv:1512.03385)、VGG16 (arXiv:1409.1556) 和 AlexNet 使用 ImageNet 数据集测试。这些测试运行在 Google 计算云引擎,亚马逊计算云(Amazon EC2)和 NVIDIA® DGX-1™。大部分测试都使用了合成和真实的数据。使用 tf.Variable 对合成数据进行测试,数据集设置为 ImageNet 中每个模型所需的数据的同一形状。我们认为,对平台进行基准测试时,包含真实数据是很重要的。在底层硬件和框架上对准备数据加载测试是为了进行实际训练。为了将磁盘 I/O 作为变量移除,我们从合成数据开始,并设置一个基线。然后使用真实的数据来验证 TensorFlow 的输入管道和底层磁盘 I/O 是否使计算单元饱和。

使用 NVIDIA® DGX-1™ (NVIDIA® Tesla® P100) 训练

细节和其他结果参见 Details for NVIDIA® DGX-1™ (NVIDIA® Tesla® P100)

使用 NVIDIA® Tesla® K80 训练

细节和其他结果参见 Details for Google Compute Engine (NVIDIA® Tesla® K80)Details for Amazon EC2 (NVIDIA® Tesla® K80)

使用 NVIDIA® Tesla® K80 分布式训练

细节和其他结果参见 Details for Amazon EC2 Distributed (NVIDIA® Tesla® K80)

合成和真实数据训练比较

NVIDIA® Tesla® P100

NVIDIA® Tesla® K80

NVIDIA® DGX-1™ (NVIDIA® Tesla® P100) 的详细资料

环境配置

  • Instance type: NVIDIA® DGX-1™
  • GPU: 8x NVIDIA® Tesla® P100
  • OS: Ubuntu 16.04 LTS with tests run via Docker
  • CUDA / cuDNN: 8.0 / 5.1
  • TensorFlow GitHub hash: b1e174e
  • Benchmark GitHub hash: 9165a70
  • Build Command: bazel build -c opt --copt=-march="haswell" --config=cuda //tensorflow/tools/pip_package:build_pip_package
  • Disk: Local SSD
  • DataSet: ImageNet
  • Test Date: May 2017

下表列出了每个模型的批处理大小和优化器。除了表中列出的批处理大小之外,InceptionV3、ResNet-50、ResNet-152 和 VGG16 测试的批次大小为 32。这些结果在 其他结果 章节。

OptionsInceptionV3ResNet-50ResNet-152AlexNetVGG16
Batch size per GPU64646451264
Optimizersgdsgdsgdsgdsgd

用于每个模型的配置。

Modelvariable_updatelocal_parameter_device
InceptionV3parameter_servercpu
ResNet50parameter_servercpu
ResNet152parameter_servercpu
AlexNetreplicated (with NCCL)n/a
VGG16replicated (with NCCL)n/a

结果

训练合成数据

GPUsInceptionV3ResNet-50ResNet-152AlexNetVGG16
114221991.82987154
22844221815658295
456985235610509584
811311734716178221081

训练真实数据

GPUsInceptionV3ResNet-50ResNet-152AlexNetVGG16
114221891.42890154
22784251794448284
45518533597105534
810791630708N/A898

从上图表可以看出,由于最大输入的限制,AlexNet 模型没有使用 8 个 GPU 来训练数据。

其他结果

以下是批处理大小为 32 的结果。

训练合成数据

GPUsInceptionV3ResNet-50ResNet-152VGG16
112819582.7144
2259368160281
4520768317549
89951485632820

训练真实数据

GPUsInceptionV3ResNet-50ResNet-152VGG16
113019382.4144
2257369159253
4507760317457
89661410609690

Google Compute Engine (NVIDIA® Tesla® K80) 的详细资料

环境配置

  • Instance type: n1-standard-32-k80x8
  • GPU: 8x NVIDIA® Tesla® K80
  • OS: Ubuntu 16.04 LTS
  • CUDA / cuDNN: 8.0 / 5.1
  • TensorFlow GitHub hash: b1e174e
  • Benchmark GitHub hash: 9165a70
  • Build Command: bazel build -c opt --copt=-march="haswell" --config=cuda //tensorflow/tools/pip_package:build_pip_package
  • Disk: 1.7 TB Shared SSD persistent disk (800 MB/s)
  • DataSet: ImageNet
  • Test Date: May 2017

下表列出了每个模型的批处理大小和优化器。除了表中列出的批处理大小之外,InceptionV3 和 ResNet-50 测试的批次大小为 32。这些结果在 其他结果 章节。

OptionsInceptionV3ResNet-50ResNet-152AlexNetVGG16
Batch size per GPU64643251232
Optimizersgdsgdsgdsgdsgd

每个模型所用的配置中, variable_update 和 parameter_server 配置相同,local_parameter_device 和 cpu 配置相同。

结果

训练合成数据

GPUsInceptionV3ResNet-50ResNet-152AlexNetVGG16
130.551.920.065635.4
257.899.038.2120964.8
411619575.82328120
82273871484640234

训练真实数据

GPUsInceptionV3ResNet-50ResNet-152AlexNetVGG16
130.651.220.063934.2
258.498.838.3113662.9
411519475.42067118
82253811484056230

其他结果

训练合成数据

GPUsInceptionV3 (batch size 32)ResNet-50 (batch size 32)
129.349.5
255.095.4
4109183
8216362

训练真实数据

GPUsInceptionV3 (batch size 32)ResNet-50 (batch size 32)
129.549.3
255.495.3
4110186
8216359

Amazon EC2 (NVIDIA® Tesla® K80) 的详细资料

环境配置

  • Instance type: p2.8xlarge
  • GPU: 8x NVIDIA® Tesla® K80
  • OS: Ubuntu 16.04 LTS
  • CUDA / cuDNN: 8.0 / 5.1
  • TensorFlow GitHub hash: b1e174e
  • Benchmark GitHub hash: 9165a70
  • Build Command: bazel build -c opt --copt=-march="haswell" --config=cuda //tensorflow/tools/pip_package:build_pip_package
  • Disk: 1TB Amazon EFS (burst 100 MiB/sec for 12 hours, continuous 50 MiB/sec)
  • DataSet: ImageNet
  • Test Date: May 2017

下表列出了每个模型的批处理大小和优化器。除了表中列出的批处理大小之外,InceptionV3 和 ResNet-50 测试的批次大小为 32。这些结果在 其他结果 章节。

OptionsInceptionV3ResNet-50ResNet-152AlexNetVGG16
Batch size per GPU64643251232
Optimizersgdsgdsgdsgdsgd

用于每个模型的配置。

Modelvariable_updatelocal_parameter_device
InceptionV3parameter_servercpu
ResNet-50replicated (without NCCL)gpu
ResNet-152replicated (without NCCL)gpu
AlexNetparameter_servergpu
VGG16parameter_servergpu

结果

训练合成数据

GPUsInceptionV3ResNet-50ResNet-152AlexNetVGG16
130.851.519.768436.3
258.798.037.6124469.4
411719574.92479141
82303841494853260

训练真实数据

GPUsInceptionV3ResNet-50ResNet-152AlexNetVGG16
130.551.319.767436.3
259.094.938.2122767.5
411818875.22201136
8228373149N/A242

由于我们的 EFS 没有提供足够的吞吐量,在上面的图表中我们排除了使用 8 个 GPU 来训练 AlexNet 模型的统计。

其他结果

训练合成数据

GPUsInceptionV3 (batch size 32)ResNet-50 (batch size 32)
129.949.0
257.594.1
4114184
8216355

训练真实数据

GPUsInceptionV3 (batch size 32)ResNet-50 (batch size 32)
130.049.1
257.595.1
4113185
8212353

Amazon EC2 Distributed (NVIDIA® Tesla® K80) 的详细资料

环境配置

  • Instance type: p2.8xlarge
  • GPU: 8x NVIDIA® Tesla® K80
  • OS: Ubuntu 16.04 LTS
  • CUDA / cuDNN: 8.0 / 5.1
  • TensorFlow GitHub hash: b1e174e
  • Benchmark GitHub hash: 9165a70
  • Build Command: bazel build -c opt --copt=-march="haswell" --config=cuda //tensorflow/tools/pip_package:build_pip_package
  • Disk: 1.0 TB EFS (burst 100 MB/sec for 12 hours, continuous 50 MB/sec)
  • DataSet: ImageNet
  • Test Date: May 2017

下表列出了每个模型的批处理大小和优化器。除了表中列出的批处理大小之外,InceptionV3 和 ResNet-50 测试的批次大小为 32。这些结果在 其他结果 章节。

OptionsInceptionV3ResNet-50ResNet-152
Batch size per GPU646432
Optimizersgdsgdsgd

用于每个模型的配置。

Modelvariable_updatelocal_parameter_devicecross_replica_sync
InceptionV3distributed_replicatedn/aTrue
ResNet-50distributed_replicatedn/aTrue
ResNet-152distributed_replicatedn/aTrue

为了简化服务器安装,EC2 实例(p2.8xlarge)运行了 worker 服务器和 parameter 服务器。使用的 worker 服务器和 parameter 服务器数量相等,但有如下例外:

  • InceptionV3: 8 instances / 6 parameter servers
  • ResNet-50: (batch size 32) 8 instances / 4 parameter servers
  • ResNet-152: 8 instances / 4 parameter servers

结果

训练合成数据

GPUsInceptionV3ResNet-50ResNet-152
129.752.419.4
8229378146
16459751291
329021388565
6417832744981

其他结果

训练合成数据

GPUsInceptionV3 (batch size 32)ResNet-50 (batch size 32)
129.248.4
8219333
16427667
328201180
6416082315

方法

脚本 在各种平台上运行,以生成上述结果。

为了创建尽可能重复的结果,每个测试运行 5 次,然后将时间取平均值。在给定的平台上,GPU 是在默认状态下运行的。对于 NVIDIA® Tesla® K80 来说这意味着不使用 GPU Boost。对于每个测试,需要完成 10 次预热,然后再平均完成 100 次测试。

基于 MIT 许可发布 共建 共享 共管