弹性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_IF_NAME | 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源。
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 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示例结果如下: