Tensorflow -- 基准
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
设置相同的 shape,除了每个 ImageNet 模型。我们认为,当评估一个平台的基准时包含真实数据是很重要的。底层硬件和框架的加载测试是为了训练实际数据。我们开始合成数据用来移除磁盘 I/O 作为一个变量,并设置一个基准。然后使用真实的数据来验证 TensorFlow 的输入和底层磁盘 I/O 的计算单元。
使用 NVIDIA® DGX-1™ (NVIDIA® Tesla® P100) 训练
细节和附加结果在 NVIDIA® DGX-1™ (NVIDIA®
Tesla® P100) 的细节 章节中。
使用 NVIDIA® Tesla® K80 训练
细节和附加结果在 Google 计算引擎
(NVIDIA® Tesla® K80) 的细节 和
Amazon EC2 (NVIDIA® Tesla®
K80) 的细节 章节中。
使用 NVIDIA® Tesla® K80 分布式训练
细节和附加结果在 分布式 Amazon EC2
(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 进行测试。这些结果在 其他结果 章节。
Options | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
Batch size per GPU | 64 | 64 | 64 | 512 | 64 |
Optimizer | sgd | sgd | sgd | sgd | sgd |
用于每个模型的配置。
Model | variable_update | local_parameter_device |
---|---|---|
InceptionV3 | parameter_server | cpu |
ResNet50 | parameter_server | cpu |
ResNet152 | parameter_server | cpu |
AlexNet | replicated (with NCCL) | n/a |
VGG16 | replicated (with NCCL) | n/a |
结果
训练合成数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
1 | 142 | 219 | 91.8 | 2987 | 154 |
2 | 284 | 422 | 181 | 5658 | 295 |
4 | 569 | 852 | 356 | 10509 | 584 |
8 | 1131 | 1734 | 716 | 17822 | 1081 |
训练真实数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
1 | 142 | 218 | 91.4 | 2890 | 154 |
2 | 278 | 425 | 179 | 4448 | 284 |
4 | 551 | 853 | 359 | 7105 | 534 |
8 | 1079 | 1630 | 708 | N/A | 898 |
从上图表可以看出,由于最大输入的限制,AlexNet 模型没有使用 8 个 GPU 来训练数据。
其他结果
以下是批处理大小为 32 的结果。
训练合成数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 | VGG16 |
---|---|---|---|---|
1 | 128 | 195 | 82.7 | 144 |
2 | 259 | 368 | 160 | 281 |
4 | 520 | 768 | 317 | 549 |
8 | 995 | 1485 | 632 | 820 |
训练真实数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 | VGG16 |
---|---|---|---|---|
1 | 130 | 193 | 82.4 | 144 |
2 | 257 | 369 | 159 | 253 |
4 | 507 | 760 | 317 | 457 |
8 | 966 | 1410 | 609 | 690 |
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 进行测试。这些结果在 其他结果 章节。
Options | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
Batch size per GPU | 64 | 64 | 32 | 512 | 32 |
Optimizer | sgd | sgd | sgd | sgd | sgd |
每个模型所用的配置中, variable_update 和 parameter_server 配置相同,local_parameter_device 和 cpu 配置相同。
结果
训练合成数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
1 | 30.5 | 51.9 | 20.0 | 656 | 35.4 |
2 | 57.8 | 99.0 | 38.2 | 1209 | 64.8 |
4 | 116 | 195 | 75.8 | 2328 | 120 |
8 | 227 | 387 | 148 | 4640 | 234 |
训练真实数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
1 | 30.6 | 51.2 | 20.0 | 639 | 34.2 |
2 | 58.4 | 98.8 | 38.3 | 1136 | 62.9 |
4 | 115 | 194 | 75.4 | 2067 | 118 |
8 | 225 | 381 | 148 | 4056 | 230 |
其他结果
训练合成数据
GPUs | InceptionV3 (batch size 32) | ResNet-50 (batch size 32) |
---|---|---|
1 | 29.3 | 49.5 |
2 | 55.0 | 95.4 |
4 | 109 | 183 |
8 | 216 | 362 |
训练真实数据
GPUs | InceptionV3 (batch size 32) | ResNet-50 (batch size 32) |
---|---|---|
1 | 29.5 | 49.3 |
2 | 55.4 | 95.3 |
4 | 110 | 186 |
8 | 216 | 359 |
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 进行测试。这些结果在 其他结果 章节。
Options | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
Batch size per GPU | 64 | 64 | 32 | 512 | 32 |
Optimizer | sgd | sgd | sgd | sgd | sgd |
用于每个模型的配置。
Model | variable_update | local_parameter_device |
---|---|---|
InceptionV3 | parameter_server | cpu |
ResNet-50 | replicated (without NCCL) | gpu |
ResNet-152 | replicated (without NCCL) | gpu |
AlexNet | parameter_server | gpu |
VGG16 | parameter_server | gpu |
结果
训练合成数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
1 | 30.8 | 51.5 | 19.7 | 684 | 36.3 |
2 | 58.7 | 98.0 | 37.6 | 1244 | 69.4 |
4 | 117 | 195 | 74.9 | 2479 | 141 |
8 | 230 | 384 | 149 | 4853 | 260 |
训练真实数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 | AlexNet | VGG16 |
---|---|---|---|---|---|
1 | 30.5 | 51.3 | 19.7 | 674 | 36.3 |
2 | 59.0 | 94.9 | 38.2 | 1227 | 67.5 |
4 | 118 | 188 | 75.2 | 2201 | 136 |
8 | 228 | 373 | 149 | N/A | 242 |
由于我们的 EFS 没有提供足够的吞吐量,上面的图表中我们排出了使用 8 个 GPU 来训练 AlexNet 模型的统计。
其他结果
训练合成数据
GPUs | InceptionV3 (batch size 32) | ResNet-50 (batch size 32) |
---|---|---|
1 | 29.9 | 49.0 |
2 | 57.5 | 94.1 |
4 | 114 | 184 |
8 | 216 | 355 |
训练真实数据
GPUs | InceptionV3 (batch size 32) | ResNet-50 (batch size 32) |
---|---|---|
1 | 30.0 | 49.1 |
2 | 57.5 | 95.1 |
4 | 113 | 185 |
8 | 212 | 353 |
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 进行测试。这些结果在 其他结果 章节。
Options | InceptionV3 | ResNet-50 | ResNet-152 |
---|---|---|---|
Batch size per GPU | 64 | 64 | 32 |
Optimizer | sgd | sgd | sgd |
用于每个模型的配置。
Model | variable_update | local_parameter_device | cross_replica_sync |
---|---|---|---|
InceptionV3 | distributed_replicated | n/a | True |
ResNet-50 | distributed_replicated | n/a | True |
ResNet-152 | distributed_replicated | n/a | True |
为了简化服务器设置,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
结果
训练合成数据
GPUs | InceptionV3 | ResNet-50 | ResNet-152 |
---|---|---|---|
1 | 29.7 | 52.4 | 19.4 |
8 | 229 | 378 | 146 |
16 | 459 | 751 | 291 |
32 | 902 | 1388 | 565 |
64 | 1783 | 2744 | 981 |
其他结果
训练合成数据
GPUs | InceptionV3 (batch size 32) | ResNet-50 (batch size 32) |
---|---|---|
1 | 29.2 | 48.4 |
8 | 219 | 333 |
16 | 427 | 667 |
32 | 820 | 1180 |
64 | 1608 | 2315 |
方法
上述结果是使用该 脚本 运行在各种平台上而生成。《High-Performance Models》 文章详细描述了脚本中的技术,以及如何执行脚本的示例。
为了创建尽可能重复的结果,每个测试运行 5 次,然后取平均值。在给定的平台上,GPU 是在默认状态下运行的。对于 NVIDIA® Tesla® K80 来说这意味着不使用 GPU
Boost。
对于每个测试,需要完成 10 次预热,然后再平均完成 100 次测试。
- 原文地址:https://www.tensorflow.org/performance/benchmarks
- 译文出自:掘金翻译计划
- 译者:charsdavy
- 校对者:joyking7
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。