本文由 HPC AI 创新实验室的 Rakshith Vasudev 和 John Lockman 于 2019 年 10 月撰写
NGC 容器 nvcr.io/nvidia/tensorflow:19.06- py3 |
Conda 环境版本 |
|
框架 |
TensorFlow 1.13.1 |
TensorFlow 1.12.0 |
Horovod |
0.15.1 |
0.16.1 |
MPI |
OpenMPI 3.1.3 |
OpenMPI 4.0.0 |
CUDA |
10.2 |
10.1 |
CUDA 驱动程序 |
430.26 |
418.40.04 |
NCCL |
2.4.7 |
2.4.7 |
CUDNN |
7.6.0 |
7.6.0 |
Python |
3.5.2 |
3.6.8 |
操作系统 |
Ubuntu 16.04.6 |
RHEL 7.4 |
GCC |
5.4.0 |
7.2.0 |
表 1:
如前文所介绍,CheXNet 是一种 AI 放射科助理模型,它可以使用 DenseNet 从一个给定的 X 光胸片中识别多达 14 种病症。探索了几种方法来横向扩展模型的训练,使其性能等于或好于原始的 CheXNet-121 和 ResNet-50,展示了可扩展性和更高的训练准确性(正例 AUROC)的希望。作者展示了在 CPU 系统上的可扩展性,但我们希望利用 GPU 的并行性来加快训练过程。Dell EMC PowerEdge C4140 通过 SXM2 配置中的四个 Nvidia V100 GPU 提供密度和性能。
裸机系统 |
Kubernetes 系统 |
|
平台 |
PowerEdge C4140 |
PowerEdge C4140 |
CPU |
2 个英特尔®至强® Gold 6148 @2.4 GHz |
2 个英特尔®至强® Gold 6148 @2.4 GHz |
内存 |
384 GB DDR4 @ 2666 MHz |
384 GB DDR4 @ 2666 MHz |
存储器 |
Lustre |
NFS |
GPU |
V100-SXM2 32 GB |
V100-SXM2 32 GB |
操作系统 |
RHEL 7.4 x86_64 |
CentOS 7.6 |
Linux 内核 |
3.10.0-693.x86_64 |
3.10.0-957.21.3.el7.x86_64 |
网络 |
Mellanox EDR InfiniBand |
Mellanox EDR InfiniBand (IP over IB) |
在表 2 中所述的两个系统上,在 2 个 C4140 节点上使用 1、2、3、4 和 8 个 GPU 测量训练 CheXNet 时的图像吞吐量(以每秒图像数为单位测量)。这篇文章详细介绍了运行的规格,包括模型体系结构、输入数据等。图 1 显示了 Kubernetes 系统和裸机系统上的测量性能比较。
图 1:在 K8s 与裸机上运行 CheXNet 训练
随着我们横向扩展至 8 个 GPU,裸机系统的性能提高了 8%。但是,系统体系结构设计上的差异可能导致了这种细微的性能差异,而不仅仅是容器与裸机参数。裸机系统可以利用原始 InfiniBand 连接的完整带宽和延迟,而不必处理软件定义网络(例如 flannel)产生的开销。此外,K8s 系统使用 IP over InfiniBand,这可以减少可用带宽。
这些数字可能因运行的应用程序类型所定义的工作负载和通信模式而异。对于图像分类问题,GPU 之间的通信发生速率较高,因此交换率也较高。但是,是否使用一种方法而不是另一种方法取决于工作负载的需求。尽管我们基于 Kubernetes 的系统性能损失很小(在本例中约为 8%),但它使用户和管理员无需设置库、配置、环境和其他依赖关系。这种方法使数据科学家能够提高工作效率,并专注于解决核心业务问题,如数据整理和模型构建。