eRDMA:使用高性能網(wǎng)絡(luò)進(jìn)行分布式訓(xùn)練
彈性RDMA(Elastic Remote Direct Memory Access,簡稱eRDMA)是阿里云自研的云上彈性RDMA網(wǎng)絡(luò)。PAI通用計(jì)算資源中的部分GPU機(jī)型已支持eRDMA能力,您只需使用特定鏡像提交基于這些GPU機(jī)型的DLC任務(wù),系統(tǒng)將自動(dòng)在容器內(nèi)掛載eRDMA網(wǎng)卡,從而加速分布式訓(xùn)練過程。
使用限制
僅適用于基于通用計(jì)算資源(預(yù)付費(fèi))提交的訓(xùn)練作業(yè)。
僅適用于2.19及以上的NCCL版本。
目前PAI DLC平臺(tái)支持eRDMA的GPU機(jī)型及對(duì)應(yīng)的eRDMA網(wǎng)卡數(shù)量如下:
GPU機(jī)型
eRDMA網(wǎng)卡數(shù)量
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
平臺(tái)預(yù)置環(huán)境變量
PAI基于通用計(jì)算資源中已經(jīng)支持eRDMA的機(jī)型,自動(dòng)開啟了eRDMA特性,并默認(rèn)設(shè)置了NCCL環(huán)境變量。您可以根據(jù)訓(xùn)練框架、通信框架以及模型特點(diǎn)進(jìn)行必要的調(diào)整。強(qiáng)烈建議您使用平臺(tái)預(yù)置系統(tǒng)內(nèi)的默認(rèn)變量, 可以獲得較優(yōu)性能。
公共環(huán)境變量
環(huán)境變量 | 值 |
PYTHONUNBUFFERED | 1 |
TZ | 根據(jù)當(dāng)前作業(yè)所在的Region進(jìn)行設(shè)定,一般是"Asia/Shanghai"。 |
eRDMA高性能網(wǎng)絡(luò)變量
值“-”表示該環(huán)境變量在該環(huán)境中無效。
環(huán)境變量 | 值 |
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的通用計(jì)算資源提交訓(xùn)練任務(wù)時(shí),您可以自行構(gòu)建并使用自定義鏡像。注意事項(xiàng)如下:
環(huán)境要求
CUDA >= 12.1
NCCL >= 2.19
Python3
安裝eRDMA庫
根據(jù)鏡像中的Linux發(fā)行版本不同,eRDMA庫安裝也有所不同。以下內(nèi)容以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用戶態(tài)驅(qū)動(dòng)程序包。
sudo apt update
sudo apt install libibverbs1 ibverbs-providers ibverbs-utils librdmacm1
其他發(fā)行版本的安裝流程,請(qǐng)參考在Docker容器中使用eRDMA。
示例Dockerfile
# ${user_docker_image_url} 請(qǐng)?zhí)鎿Q成您自己的已經(jīng)存在的Docker鏡像。
FROM ${user_docker_image_url}
# 如果鏡像中已經(jīng)預(yù)裝了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執(zhí)行NCCL Test測試
提交使用MPIJob框架的訓(xùn)練任務(wù),并配置以下關(guān)鍵參數(shù),其他參數(shù)配置說明,請(qǐng)參見快速提交MPIJob訓(xùn)練任務(wù)。
參數(shù) | 描述 | |
環(huán)境信息 | 節(jié)點(diǎn)鏡像 | 在鏡像地址頁簽,輸入已準(zhǔn)備的自定義鏡像。 您可以使用PAI-DLC提供的NCCL測試鏡像,該鏡像已預(yù)裝了eRDMA的依賴: 其中
|
啟動(dòng)命令 |
| |
資源信息 | 資源來源 | 選擇資源配額。 |
資源配額 | 選擇已創(chuàng)建的通用計(jì)算資源配額,例如資源規(guī)格為ecs.ebmgn8v.48xlarge。如何創(chuàng)建資源配額,請(qǐng)參見通用計(jì)算資源配額。 | |
框架 | 選擇MPIJob。 | |
任務(wù)資源 | 配置以下參數(shù):
|
eRDMA網(wǎng)絡(luò)帶寬的NCCL Test示例結(jié)果如下: