弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA)是阿里云自研的云上弹性RDMA网络。PAI通用计算资源中的部分GPU机型已支持eRDMA能力,您只需使用特定镜像提交基于这些GPU机型的DLC任务,系统将自动在容器内挂载eRDMA网卡,从而加速分布式训练过程。
使用限制
-
仅适用于基于通用计算资源(预付费)提交的训练作业。
-
仅适用于2.19及以上的NCCL版本。
-
目前PAI DLC平台支持eRDMA的GPU机型及对应的eRDMA网卡数量如下:
GPU机型
eRDMA网卡数量
ecs.ebmgn7v.32xlarge
2
ecs.ebmgn8v.48xlarge
2
ecs.ebmgn8is.32xlarge
2
ecs.ebmgn8i.32xlarge
4
ecs.gn8is.2xlarge
1
ecs.gn8is.4xlarge
1
ecs.gn8is-2x.8xlarge
1
ecs.gn8is-4x.16xlarge
1
ecs.gn8is-4x.16xlarge
1
平台预置环境变量
PAI基于通用计算资源中已经支持eRDMA的机型,自动开启了eRDMA特性,并默认设置了NCCL环境变量。您可以根据训练框架、通信框架以及模型特点进行必要的调整。强烈建议您使用平台预置系统内的默认变量, 可以获得较优性能。
公共环境变量
|
环境变量 |
值 |
|
PYTHONUNBUFFERED |
1 |
|
TZ |
根据当前作业所在的Region进行设定,一般是"Asia/Shanghai"。 |
eRDMA高性能网络变量
值“-”表示该环境变量在该环境中无效。
|
环境变量 |
值 |
|
NCCL_DEBUG |
INFO |
|
NCCL_SOCKET_IFNAME |
eth0 |
|
NCCL_IB_TC |
- |
|
NCCL_IB_SL |
- |
|
NCCL_IB_GID_INDEX |
1 |
|
NCCL_IB_HCA |
erdma |
|
NCCL_IB_TIMEOUT |
- |
|
NCCL_IB_QPS_PER_CONNECTION |
8 |
|
NCCL_MIN_NCHANNELS |
16 |
|
NCCL_NET_PLUGIN |
none |
配置自定义镜像
基于支持eRDMA的通用计算资源提交训练任务时,您可以自行构建并使用自定义镜像。注意事项如下:
环境要求
-
CUDA >= 12.1
-
NCCL >= 2.19
-
Python3
安装eRDMA库
根据镜像中的Linux发行版本不同,eRDMA库安装也有所不同。以下内容以Ubuntu 22.04版本为例,介绍如何安装eRDMA库,代码示例如下:
# 添加PGP签名。
wget -qO - http://mirrors.cloud.aliyuncs.com/erdma/GPGKEY | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/erdma.gpg
# 添加apt源。
mkdir -p /etc/apt/sources.list.d
echo "deb [ ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu jammy/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
# 更新&安装eRDMA用户态驱动程序包。
sudo apt update
sudo apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1
其他发行版本的安装流程,请参考在Docker容器中使用eRDMA。
示例Dockerfile
# ${user_docker_image_url} 请替换成您自己的已经存在的Docker镜像。
FROM ${user_docker_image_url}
# 如果镜像中已经预装了RDMA库,需要先卸载掉。
RUN rm /etc/apt/sources.list.d/mellanox_mlnx_ofed.list && \
apt remove -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1
RUN wget -qO - http://mirrors.aliyun.com/erdma/GPGKEY | gpg --dearmour -o /etc/apt/trusted.gpg.d/erdma.gpg && \
echo "deb [ ] http://mirrors.aliyun.com/erdma/apt/ubuntu jammy/erdma main" | tee /etc/apt/sources.list.d/erdma.list && \
apt update && apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1
使用MPIJob执行NCCL Test测试
提交使用MPIJob框架的训练任务,并配置以下关键参数,其他参数配置说明,请参见快速提交MPIJob训练任务。
|
参数 |
描述 |
|
|
环境信息 |
节点镜像 |
在镜像地址页签,输入已准备的自定义镜像。 您可以使用PAI-DLC提供的NCCL测试镜像,该镜像已预装了eRDMA的依赖: 其中 |
|
启动命令 |
|
|
|
资源信息 |
资源来源 |
选择资源配额。 |
|
资源配额 |
选择已创建的通用计算资源配额,例如资源规格为ecs.ebmgn8v.48xlarge。如何创建资源配额,请参见通用计算资源配额。 |
|
|
框架 |
选择MPIJob。 |
|
|
任务资源 |
配置以下参数:
|
|
eRDMA网络带宽的NCCL Test示例结果如下:
dlci -worker-0:27:100 [2] NCCL INFO comm 0x5604ef4799e0 rank 2 nranks 16 cudaDev 2 nvmlDev 2 busId a2000 commId 0xbbe9b8703193e2e4 - Init COMPLETE
#
# out-of-place in-place
# size count type redop root time algbw busbw #wrong time algbw busbw #wrong
# (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s)
32768 8192 float sum -1 169.2 0.19 0.36 0 165.1 0.20 0.37 0
65536 16384 float sum -1 181.7 0.36 0.68 0 170.0 0.39 0.72 0
131072 32768 float sum -1 196.6 0.67 1.25 0 199.5 0.66 1.23 0
262144 65536 float sum -1 227.8 1.15 2.16 0 226.0 1.16 2.17 0
524288 131072 float sum -1 345.6 1.52 2.84 0 346.8 1.51 2.83 0
1048576 262144 float sum -1 1258.2 0.83 1.56 0 1317.5 0.80 1.49 0
2097152 524288 float sum -1 1367.7 1.53 2.88 0 1313.0 1.60 2.99 0
4194304 1048576 float sum -1 1502.1 2.79 5.24 0 1504.8 2.79 5.23 0
8388608 2097152 float sum -1 1763.1 4.76 8.92 0 1793.4 4.68 8.77 0
16777216 4194304 float sum -1 2838.3 5.91 11.08 0 2867.2 5.85 10.97 0
33554432 8388608 float sum -1 4952.3 6.78 12.70 0 4962.5 6.76 12.68 0
67108864 16777216 float sum -1 9027.4 7.43 13.94 0 8976.9 7.48 14.02 0
134217728 33554432 float sum -1 17641 7.61 14.27 0 17664 7.60 14.25 0
268435456 67108864 float sum -1 34935 7.68 14.41 0 34922 7.69 14.41 0
536870912 134217728 float sum -1 69392 7.74 14.51 0 69274 7.75 14.53 0
1073741824 268435456 float sum -1 138739 7.74 14.51 0 138833 7.73 14.50 0
2147483648 536870912 float sum -1 277591 7.74 14.51 0 277373 7.74 14.52 0
4294967296 1073741824 float sum -1 554176 7.75 14.53 0 554452 7.75 14.52 0
dlcinqih2e19f6nn-worker-0:28:28 [3] NCCL INFO comm 0x55bc7e54fe90 rank 3 nranks 16 cudaDev 3 busId c6000 - Destroy COMPLETE