亚马逊AWS官方博客

Amazon EC2 P4d 实例深入探讨

这篇博客文章由 Amazon EC2 高级解决方案架构师 Amr Ragab 撰写

简介

AWS 很高兴地宣布,新的 Amazon EC2 P4d 实例现已正式推出。该实例类型带来了额外的好处,将深度学习性能提高了 2.5 倍;增加了加速实例产品组合、新功能和技术突破,我们的客户可以通过这项最新技术从中受益。这篇博客文章详细介绍了其中的一些关键功能,以及如何将它们集成到当前的工作负载和架构中。

概览

从上面的通用框图中可以看出,p4d 配备了双插槽 Intel Cascade Lake 8275CL 处理器,总共有 96 个3.0 GHz 的 vCPU,RAM 为 1.1TB,NVMe 本地存储空间为8TB。P4d 还配备了带 NVSwitch 的 8 个 40GB NVIDIA Tesla A100 GPU 和支持 400 Gbps Elastic Fabric Adapter(EFA)的网络。此实例配置代表了面向我们客户的最新一代计算,涵盖机器学习(ML)、高性能计算(HPC)和分析。

p4d 的改进之一是网络堆栈。 这种新的实例类型具有 400 Gbps,支持 EFA 和 GPUDirect RDMA。现在,在 AWS 上,您可以利用点对点 GPU 到 GPU 的通信(跨节点),从而绕过 CPU。请留意其他博客和网络研讨会,详细介绍 GPUDirect 的使用案例,以及此功能如何帮助减少延迟并提高某些工作负载的性能。

让我们看一下 P4d 实例的一些新功能和性能指标。

功能

本地临时 NVMe 存储

p4d 实例类型附带 8TB 的本地 NVMe 存储。每台设备的最大读/写吞吐量为 2.7 GB/s。要创建用于输入 GPU 的本地命名空间和暂存区域,您可以为所有驱动器创建本地 RAID 0。这会导致聚合读取吞吐量约为 16 GB/s。下表总结了此配置中 NVMe 驱动器上的 I/O 测试。

FIO – 测试 数据块大小 线程 带宽
1 顺序读取 128k 96 16.4 GiB/s
2 顺序写入 128k 96 8.2 GiB/s
3 随机读取 128k 96 16.3 GiB/s
4 随机写入 128k 96 8.1 GiB/s

NVSwitch

随着 p4d 实例类型一起推出的是 NVSwitch。节点中的每个 GPU 在全网状拓扑中相互连接,双向带宽最高达 600 GB/s。使用 NVIDIA 通信集合库(NCCL)的 ML 框架和 HPC 应用程序可以充分利用这一多对多通信层。

与上一代 P3/P3dn 实例相比,P4d 使用全网状 NVLink 拓扑来优化多对多通信,后者在各种数据路径域(NUMA、PCIe 交换机、NVLink)之间进行多对多通信。 这种通过 NCCL 访问的新拓扑将提高 multiGPU 工作负载的性能。
为了充分利用 NVSwitch,请确保在您的实例中,所有 GPU 应用程序提升时钟都设置为其最大值:

sudo nvidia-smi -ac 1215,1410

多实例 GPU(MIG)

现在,在用户层面,可以控制将一个 GPU 分割成多个 GPU 切片的过程,其中每个 GPU 切片彼此隔离。这使多个用户可以在同一个 GPU 上运行不同的工作负载,而不会影响性能。我将通过以下步骤向您介绍 MIG 的示例实现:

对于每个新启动的实例,都会禁用 MIG。因此,您必须使用以下命令启用它:

ubuntu@ip-172-31-34-6:~# sudo nvidia-smi -mig 1

GPU 00000000:10:1C.0 的已启用 MIG 的模式

您可以获得受支持的 MIG 配置文件列表

接下来,您可以创建七个切片,并为每个切片创建计算实例。

ubuntu@ip-172-31-34-6:~# sudo nvidia-smi mig -cgi 19,19,19,19,19,19,19 
已使用配置文件 MIG 1g.5gb (ID 19)在 GPU 0 上成功创建 GPU 实例 ID 9 
已使用配置文件 MIG 1g.5gb(ID 19)在 GPU 0 上成功创建 GPU 实例 ID 7 
已使用配置文件 MIG 1g.5gb(ID 19)在 GPU 0 上成功创建 GPU 实例 ID 8 
已使用配置文件 MIG 1g.5gb(ID 19)在 GPU 0 上成功创建 GPU 实例 ID 11 
已使用配置文件 MIG 1g.5gb(ID 19)在 GPU 0 上成功创建 GPU 实例 ID 12 
已使用配置文件 MIG 1g.5gb(ID 19)在 GPU 0 上成功创建 GPU 实例 ID 13 
已使用配置文件 MIG 1g.5gb(ID 19)在 GPU 0 上成功创建 GPU 实例 ID 14


ubuntu@ip-172-31-34-6:~# nvidia-smi mig -cci -gi 7,8,9,11,12,13,14



已使用配置文件 MIG 1g.5gb(ID 0)在 GPU 0 GPU 实例 ID 7 上成功创建计算实例 ID 0 
已使用配置文件 MIG 1g.5gb(ID 0)在 GPU 0 GPU 实例 ID 8 上成功创建计算实例 ID 0 
已使用配置文件 MIG 1g.5gb(ID 0)在 GPU 0 GPU 实例 ID 9 上成功创建计算实例 ID 0 
已使用配置文件 MIG 1g.5gb(ID 0)在 GPU 0 GPU 实例 ID 11 上成功创建计算实例 ID 0 
已使用配置文件 MIG 1g.5gb(ID 0)在 GPU 0 GPU 实例 ID 12 上成功创建计算实例 ID 0 
已使用配置文件 MIG 1g.5gb(ID 0)在 GPU 0 GPU 实例 ID 13 上成功创建计算实例 ID 0 
已使用配置文件 MIG 1g.5gb(ID 0)在 GPU 0 GPU 实例 ID 14 上成功创建计算实例 ID 0

您最多可以将一个 GPU 拆分为七个切片。要将 GPU 传递到 docker 容器中,您可以在运行时指定索引对:

docker run -it --gpus '"device=1:0"' nvcr.io/nvidia/tensorflow:20.09-tf1-py3

借助 MIG,您可以在同一个 GPU 上运行多个较小的工作负载,而不会影响性能。在将此功能与其他 AWS 服务集成时,我们将继续发布有关此功能的其他博客。

通过 EFA 推出的 NVIDIA GPUDirect RDMA

对于针对多 GPU 功能进行优化的工作负载,我们通过 EFA fabric 推出了 GPUDirect。这允许在多个 p4d 节点之间进行直接 GPU-GPU 通信,从而减少延迟并提高性能。按照此用户指南开始安装 EFA 驱动程序并设置环境。下面的代码示例可用作通过 EFA 使用 GPUDirect RDMA 的模板。

/opt/amazon/openmpi/bin/mpirun \
     -n ${NUM_PROCS} -N ${NUM_PROCS_NODE} \
     -x RDMAV_FORK_SAFE=1 -x NCCL_DEBUG=info \
     -x FI_EFA_USE_DEVICE_RDMA=1 \
     --hostfile ${HOSTS_FILE} \
     --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
     $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 4G -f 2 -g 1 -c 1 -n 100

机器学习优化

通过使用我们最新的深度学习 AMI(DLAMI),您可以快速开始使用前面提到的 p4d 的所有益处。DLAMI 现在附带了 CUDA11 以及最新的 NVLink 和 cuDNN SDK 以及驱动程序,以利用 p4d。

TensorFloat32 – TF32

TF32 是 NVIDIA 推出的全新 19 位精度数据类型,首次在 p4d.24xlarge 实例中推出。对于大多数主流模型,这种数据类型提高了性能,几乎不会损失训练和验证的准确性。我们为单个算法提供了更详细的基准测试。但是,在 p4d.24xlarge 上,与主流深度学习模型的 p3dn.24xlarge 上的 FP32 相比,您可以实现大约 2.5 倍的增长。

我们在此处更新了我们的机器学习模型,以展示客户目前使用的流行算法示例(见下图),包括通用的 DNN 和 Bert。

DNN P3dn FP32(imgs/sec) P3dn FP16(imgs/sec) P4d 吞吐量 TF32(imgs/sec) P4d 吞吐量 FP16(imgs/sec) 通过 p3dn TF32/FP32 的 P4d 通过 P3dn FP16 的 P4d
Resnet50 3057 7413 6841 15621 2.2 2.1
Resnet152 1145 2644 2823 5700 2.5 2.2
Inception3 2010 4969 4808 10433 2.4 2.1
Inception4 847 1778 2025 3811 2.4 2.1
VGG16 1202 2092 4532 7240 3.8 3.5
Alexnet 32198 50708 82192 133068 2.6 2.6
SSD300 1554 2918 3467 6016 2.2 2.1

BERT Large – Wikipedia/Books Corpus

GPU 序列长度 批量大小/GPU:混合精度,TF32 梯度累积:混合精度,TF32 吞吐量 – 混合精度 P4d/p3dn 混合精度加速 P4d/p3 混合精度加速
1 128 64,64 1024,1024 372 2.2 2.8
4 128 64,64 256,256 1493 2 3.3
8 128 64,64 128,128 2936 2.1 2.9
1 512 16,8 2048,4096 77 2.6 2.6
4 512 16,8 512,1024 303 2.6 2.7
8 512 16,8 256,512 596 2.4 3.1

关于其他代码示例,可以参见 github.com/NVIDIA/DeepLearningExamples

如果您想构建自己的 AMI 或扩展组织维护的 AMI,您可以使用 github 存储库,它提供了 Packer 脚本来构建 Amazon Linux 2 或 Ubuntu 18.04 版本的 AMI。

https://github.com/aws-samples/aws-efa-nccl-baseami-pipeline

该堆栈包括以下组件:

  • NVIDIA 驱动程序 450.80.02
  • CUDA 11
  • NVIDIA Fabric Manager
  • cuDNN 8
  • NCCL 2.7.8
  • EFA 最新驱动程序
  • AWS-OFI-NCCL
  • FSx 内核和客户端驱动程序和实用程序
  • Intel OneDNN
  • NVIDIA-runtime Docker

结论

在 Amazon EKSAWS Batch 和 Amazon Sagemaker 的支持下,开始使用新的 P4d 实例。我们很高兴听到您使用新的 P4d 实例开发和运行了新功能。如果您有任何疑问,请联系您的客户团队。现在,使用 NVIDIA Tesla A100 和 P4d 实例来增强您的 ML 和 HPC 工作负载。