亚马逊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 应用程序提升时钟都设置为其最大值:
多实例 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 配置文件列表。
接下来,您可以创建七个切片,并为每个切片创建计算实例。
您最多可以将一个 GPU 拆分为七个切片。要将 GPU 传递到 docker 容器中,您可以在运行时指定索引对:
借助 MIG,您可以在同一个 GPU 上运行多个较小的工作负载,而不会影响性能。在将此功能与其他 AWS 服务集成时,我们将继续发布有关此功能的其他博客。
通过 EFA 推出的 NVIDIA GPUDirect RDMA
对于针对多 GPU 功能进行优化的工作负载,我们通过 EFA fabric 推出了 GPUDirect。这允许在多个 p4d 节点之间进行直接 GPU-GPU 通信,从而减少延迟并提高性能。按照此用户指南开始安装 EFA 驱动程序并设置环境。下面的代码示例可用作通过 EFA 使用 GPUDirect RDMA 的模板。
机器学习优化
通过使用我们最新的深度学习 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 EKS、AWS Batch 和 Amazon Sagemaker 的支持下,开始使用新的 P4d 实例。我们很高兴听到您使用新的 P4d 实例开发和运行了新功能。如果您有任何疑问,请联系您的客户团队。现在,使用 NVIDIA Tesla A100 和 P4d 实例来增强您的 ML 和 HPC 工作负载。