GPU執行個體綁定彈性RDMA網卡(ERI)後,各GPU執行個體間在VPC網路下可以實現RDMA直通加速互連,相比傳統的RDMA,eRDMA可以提供更高效的Data Transmission Service,有效提升GPU執行個體之間的通訊效率並縮短任務處理時間。本文介紹如何在GPU執行個體上啟用eRDMA。
使用限制
限制項 | 說明 |
執行個體規格 | 支援ERI的執行個體規格如下:
|
鏡像 | 支援以下鏡像(任選一款):
|
eRDMA裝置數量 |
|
網路限制 |
|
操作步驟
支援eRDMA能力的執行個體使用eRDMA能力需滿足2個條件:安裝了eRDMA軟體棧、綁定了開啟彈性RDMA介面的網卡。
購買執行個體時配置eRDMA
建立支援ERI的GPU執行個體。
建立過程中需注意以下配置項(其他參數,請參見自訂購買執行個體):
執行個體規格:請參見使用限制,本樣本以ebmgn8is為例。
鏡像:選擇公用鏡像時,預設同時選中安裝GPU驅動和安裝eRDMA軟體棧選項,則該執行個體建立完成後,系統會自動在執行個體內部安裝GPU驅動、CUDA、cuDNN以及eRDMA軟體棧。
彈性網卡:建立GPU執行個體過程中,在頻寬和安全性群組設定精靈頁面配置彈性網卡時,會預設建立一塊eRDMA主網卡和一塊eRDMA輔助網卡,並且主網卡和輔助網卡右側的彈性RDMA介面選項會預設被自動選中。
說明GPU執行個體運行後不支援單獨啟用或關閉某一彈性網卡的彈性RDMA能力。
開啟了彈性RDMA能力後的2張網卡會自動綁定到不同的通道上,無需您單獨指定。
主網卡不支援從GPU執行個體中解除綁定,只能隨GPU執行個體一起建立和釋放。
進入已建立的執行個體詳情頁,單擊彈性網卡頁簽,查看執行個體網卡類型。
主網卡或輔助網卡的網卡類型如下所示,表示該執行個體已開啟了彈性RDMA介面的網卡。
為已有GPU執行個體配置eRDMA
登入ECS管理主控台。
找到目標執行個體並進入執行個體詳情頁,選擇彈性網卡頁簽,查看執行個體是否已開啟了彈性RDMA介面的網卡。
如果已開啟(如上圖),請跳過以下步驟。
如果未開啟,請按照以下步驟,為主網卡或者輔助彈性網卡配置eRDMA。
為主網卡或輔助彈性網卡配置eRDMA。
說明建立GPU執行個體時,如果主網卡和輔助網卡均未選中彈性RDMA介面,則建立執行個體後,您可以再單獨建立並啟用2個eRDMA輔助彈性網卡。
建立GPU執行個體時,如果主網卡或輔助網卡其中一個網卡未選中彈性RDMA介面,則建立執行個體後,您只能再單獨建立並啟用1個eRDMA輔助彈性網卡。
(可選)在執行個體內安裝彈性RDMA網卡(ERI)軟體棧。
如果選擇公用鏡像時未選中安裝eRDMA軟體棧選項,根據實際情況選擇指令碼方式或者手動方式安裝eRDMA軟體棧,以便啟動並使用彈性RDMA網卡(ERI)能力。
指令碼安裝方式
GPU執行個體建立完成後,您可以通過指令碼安裝方式單獨安裝eRDMA軟體棧、GPU驅動、CUDA以及cuDNN等軟體,指令碼樣本如下所示。
#!/bin/sh #Please input version to install DRIVER_VERSION="550.127.08" CUDA_VERSION="12.4.1" CUDNN_VERSION="9.2.0.82" IS_INSTALL_eRDMA="TRUE" IS_INSTALL_RDMA="FALSE" INSTALL_DIR="/root/auto_install" #using .run to install driver and cuda auto_install_script="auto_install_v4.0.sh" script_download_url=$(curl http://100.100.100.200/latest/meta-data/source-address | head -1)"/opsx/ecs/linux/binary/script/${auto_install_script}" echo $script_download_url rm -rf $INSTALL_DIR mkdir -p $INSTALL_DIR cd $INSTALL_DIR && wget -t 10 --timeout=10 $script_download_url && bash ${INSTALL_DIR}/${auto_install_script} $DRIVER_VERSION $CUDA_VERSION $CUDNN_VERSION $IS_INSTALL_RDMA $IS_INSTALL_eRDMA
手動安裝方式
GPU執行個體建立完成後,您可以通過手動安裝方式單獨安裝OFED驅動、eRDMA驅動、GPU驅動以及載入
nv_peer_mem
服務元件,具體操作如下所示。遠端連線GPU執行個體。
具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)。
安裝OFED驅動。
執行以下命令,安裝依賴軟體包。
Alibaba Cloud Linux 3
sudo yum install perl-generators python3-Cython kernel-rpm-macros libmnl-devel valgrind-devel rpm-build systemd-devel libdb-devel iptables-devel lsof elfutils-devel bison libnl3-devel libselinux-devel flex cmake numactl-devel -y
CentOS 8.5/8.4/7.9
CentOS 8.5/8.4
wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/centos8/python3-Cython-0.29.32-3.16.x86_64.rpm yum install python3-Cython-0.29.32-3.16.x86_64.rpm -y yum install kernel-rpm-macros perl-generators libmnl-devel valgrind-devel rpm-build systemd-devel libdb-devel iptables-devel lsof elfutils-devel bison libnl3-devel libselinux-devel flex cmake numactl-devel -y
CentOS 7.9
sudo yum install python-devel python3-Cython kernel-rpm-macros perl-generators libmnl-devel valgrind-devel rpm-build systemd-devel libdb-devel iptables-devel lsof elfutils-devel bison libnl3-devel libselinux-devel flex cmake numactl-devel -y
Ubuntu 24.04/22.04/20.04/18.04
Ubuntu 24.04
apt-get update apt-get install -y pkg-config apt install -y flex make libelf-dev sudo libmnl-dev autoconf autotools-dev dh-dkms bison dh-python libdb-dev quilt automake debhelper chrpath gcc libselinux1-dev python3
Ubuntu 22.04
sudo apt-get update sudo apt-get install -y pkg-config sudo apt install -y python3-distutils libmnl-dev bison sudo flex dh-python quilt python3 dpatch swig libelf-dev libdb-dev libselinux1-dev gcc chrpath graphviz make
Ubuntu 20.04
sudo apt-get update sudo apt-get install -y pkg-config sudo apt-get install quilt swig gcc dh-python python3 chrpath bison sudo flex graphviz libmnl-dev python3-distutils make libdb-dev libselinux1-dev dpatch libelf-dev -y
Ubuntu 18.04
sudo apt-get update sudo apt-get install -y pkg-config sudo apt install -y make dh-python libdb-dev libselinux1-dev flex dpatch swig graphviz chrpath quilt python3-distutils bison libmnl-dev libelf-dev gcc sudo python3
執行以下命令,下載OFED軟體包設定檔。
Alibaba Cloud Linux 3
sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz sudo tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/ sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf sudo rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm
CentOS 8.5/8.4/7.9
CentOS 8.5/8.4
cd /root wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/ wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm
CentOS 7.9
sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz sudo tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/ sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf sudo rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm
Ubuntu 24.04/22.04/20.04/18.04
Ubuntu 24.04
sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/MLNX_OFED_SRC-debian-24.10-2.1.8.0.tgz sudo tar -xvf MLNX_OFED_SRC-debian-24.10-2.1.8.0.tgz && cd MLNX_OFED_SRC-24.10-2.1.8.0 && curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf sudo rm -rf SOURCES/mlnx-ofed-kernel_24.10.OFED.24.10.2.1.8.1.orig.tar.gz wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/mlnx-ofed-kernel_24.10.egs.OFED.24.10.2.1.8.1.orig.tar.gz -O SOURCES/mlnx-ofed-kernel_24.10.egs.OFED.24.10.2.1.8.1.orig.tar.gz
Ubuntu 22.04/20.04/18.04
sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-debian-5.4-3.6.8.1.tgz sudo tar -xvf MLNX_OFED_SRC-debian-5.4-3.6.8.1.tgz && cd MLNX_OFED_SRC-5.4-3.6.8.1 && curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf sudo rm -rf SOURCES/mlnx-ofed-kernel_5.4.orig.tar.gz sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/mlnx-ofed-kernel_5.4.egs.orig.tar.gz -O SOURCES/mlnx-ofed-kernel_5.4.egs.orig.tar.gz
根據不同系統,執行相應命令安裝OFED驅動。
Alibaba Cloud Linux 3
sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8 sudo dracut -f
CentOS 8.5/8.4/7.9
CentOS 8.5/8.4
./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8
CentOS 7.9
sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL7
Ubuntu 24.04/22.04/20.04/18.04
你需要將
${VERSION_ID}
替換為您的Ubuntu系統版本(例如24.04)。sudo curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf sudo ./install.pl --config ./ofed_debian.conf --without-dkms --build-only --kernel-only sudo /usr/bin/dpkg -i --force-confmiss DEBS/ubuntu${VERSION_ID}/x86_64/*.deb
執行以下命令,確認
/usr/src/ofa_kernel/`uname -r`
目錄是否存在。目錄存在,則直接執行下一步。
ls /usr/src/ofa_kernel/`uname -r`
目錄不存在,則先執行以下命令建立軟連結,再執行下一步。
sudo ln -s /usr/src/ofa_kernel/default /usr/src/ofa_kernel/`uname -r`
重啟執行個體。
OFED驅動安裝完成後,您需要重啟執行個體,確保新的核心模組生效。具體操作,請參見重啟執行個體。
安裝eRDMA驅動。
下載並安裝eRDMA驅動。
Ubuntu 24.04執行以下命令。
rm -rf /lib/modules/`uname -r`/updates/dkms/erdma.ko curl -O http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh && bash env_setup.sh --url "http://mirrors.cloud.aliyuncs.com/erdma/erdma_installer-1.4.3.tar.gz"
其他系統執行以下命令。
sudo wget http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh sudo bash env_setup.sh --egs
執行以下命令,通過eadm工具確認eRDMA驅動是否正常安裝。
eadm ver
返回結果如下所示,表示驅動已正常安裝。
說明本樣本以驅動版本為0.2.35為例。如果返回結果提示沒有本命令或者執行失敗,請您重新安裝eRDMA驅動。
安裝GPU驅動。
具體操作,請參見在GPU計算型執行個體中手動安裝Tesla驅動(Linux)。
載入nv_peer_mem服務元件。
(推薦)GPU驅動為470.xx.xx及以上版本
使能GPU Direct RDMA需要載入nv_peer_mem服務元件,建議使用470.xx.xx及以上版本的GPU驅動,因為NVIDIA在驅動版本為470.xx.xx及以上版本中已預裝了該服務元件。您可以直接按照以下步驟載入nvidia_peermem模組。
sudo modprobe nvidia_peermem # 可通過lsmod|grep nvidia檢查是否已成功載入nvidia_peermem
說明如果機器重啟後,您需要重新載入nvidia_peermem模組。
GPU驅動為470.xx.xx以下版本
您需要手動下載並安裝相應服務元件,下載及編譯安裝方法如下所示。
sudo git clone https://github.com/Mellanox/nv_peer_memory.git # 編譯並安裝nv_peer_mem.ko cd nv_peer_memory && make cp nv_peer_mem.ko /lib/modules/$(uname -r)/kernel/drivers/video depmod -a modprobe nv_peer_mem # 可通過lsmod|grep nv_peer_mem檢查 service nv_peer_mem start
頻寬驗證。
遠端連線GPU執行個體。
具體操作,請參見使用Workbench終端串連登入Linux執行個體(SSH)。
執行以下命令,檢查2塊eRDMA網卡是否正常。
sudo ibv_devinfo
eRDMA驅動安裝指令碼預設安裝最新版本的驅動,如果您需要安裝舊版本eRDMA驅動,請提交工單擷取協助。
本文以eRDMA驅動為0.2.37或以上版本為例,顯示結果如下所示,表示2塊eRDMA網卡正常存在。其中,2個eRDMA裝置的連接埠
state
均為PORT_ACTIVE
時,表示eRDMA網卡狀態正常。說明如果eRDMA裝置的連接埠
state
為invalid state
,則表示該eRDMA網卡狀態異常,建議先檢查輔助網卡是否配置正確。例如,通過執行ifconfig
命令查看所有網卡配置是否存在,以及所有網卡IP地址是否存在。執行以下命令,安裝perftest測試載入器。
sudo yum install perftest -y
執行以下命令,測試RDMA網路頻寬是否符合對應硬體的預期表現。
在Server端執行以下命令,等待Client端的串連請求。
sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515
在Client端執行以下命令,發送串連請求和資料包。
sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515 server_ip
其中,
server_ip
是Server端ECS執行個體上綁定eRDMA的彈性網卡所對應的私人IP地址。擷取IP地址的方法,請參見查看IP地址。
說明上述perftest測試使用了1張網卡通訊,如果您業務需要啟用2張網卡進行通訊,則需要同時啟動2個perftest進程,並通過
-d
參數為2個進程各指定1張eRDMA網卡、-p
參數指定不同的通訊連接埠。更多資訊,請參見perftest詳情。測試結果包括平均頻寬,系統返回資訊如下,表示eRDMA通訊正常。
測實驗證
為測試和驗證配備eRDMA網路的GPU執行個體在應用中的實際表現,本文以nccl-tests為例,展示如何在實際業務中使用eRDMA的具體操作。關於nccl-tests的更多資訊,請參見nccl-tests。
執行以下命令,安裝NCCL。
通過下載並編譯源碼安裝NCCL,源碼編譯的方式如下:
說明您也可以在NVIDIA官網NVIDIA NCCL下載安裝包,然後進行安裝。
本測試以將NCCL安裝在
/usr/local/nccl
路徑下為例,您也可以根據實際需要設定NCCL安裝的目標路徑。# build nccl cd /root git clone https://github.com/NVIDIA/nccl.git cd nccl/ make -j src.lib PREFIX=/usr/local/nccl make install PREFIX=/usr/local/nccl
執行以下命令,查看nccl和libnccl.so庫是否已安裝。
# 查看nccl ls /usr/local/nccl # 查看libnccl.so庫 ls /usr/local/nccl/lib
執行以下命令,安裝OpenMPI及編譯器。
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.3.tar.gz tar -xzf openmpi-4.1.3.tar.gz cd openmpi-4.1.3 ./configure --prefix=/usr/local/openmpi make -j && make install
執行以下命令,設定環境變數。
NCCL_HOME=/usr/local/nccl CUDA_HOME=/usr/local/cuda MPI_HOME=/usr/local/openmpi export LD_LIBRARY_PATH=${NCCL_HOME}/lib:${CUDA_HOME}/lib64:${MPI_HOME}/lib:$LD_LIBRARY_PATH export PATH=${CUDA_HOME}/bin:${MPI_HOME}/bin:$PATH
其中,上述命令中以
NCCL_HOME
指向NCCL安裝路徑(/usr/local/nccl
)、CUDA_HOME
指向CUDA安裝路徑(/usr/local/cuda
)、MPI_HOME
指向OpenMPI的安裝路徑(/usr/local/openmpi
)為例,請根據您實際的安裝路徑進行替換。命令編輯完成後,在執行個體內部進入
~/.bashrc
檔案、設定PATH
和LD_LIBRARY_PATH
,執行以下命令使環境變數設定生效。source ~/.bashrc
執行以下命令,下載並編譯測試代碼。
git clone https://github.com/NVIDIA/nccl-tests cd nccl-tests/ make MPI=1 CUDA_HOME=/usr/local/cuda MPI_HOME=/usr/local/openmpi
執行以下命令,建立執行個體之間的SSH互信。
在host1產生公開金鑰後並拷貝到host2上以建立執行個體之間的SSH互信。
#在host1執行 ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2} ssh root@{host2} # 在host1執行,測試一下是否可以無密碼串連host2。如果是,表示已建立執行個體之間的SSH互信。
執行如下命令,測試NCCL all_reduce效果。
# 將host1, host2替換為您對應的IP地址 mpirun --allow-run-as-root -np 16 -npernode 8 -H host1:8,host2:8 \ --bind-to none \ -mca btl_tcp_if_include eth0 \ -x NCCL_SOCKET_IFNAME=eth0 \ -x NCCL_DEBUG=INFO \ -x LD_LIBRARY_PATH \ -x PATH \ ./build/all_reduce_perf -b 4M -e 4M -f 2 -g 1 -t 1 -n 20
相關文檔
在企業級ECS執行個體上配置eRDMA,可實現無需更改業務組網,即可在原有網路下體驗超低延遲、大吞吐、高彈性的高效能RDMA網路服務。具體操作,請參見在企業級執行個體上啟用eRDMA。
容器中需要大規模資料轉送和高效能網路通訊的應用情境中,將eRDMA功能引入容器(Docker)環境可實現容器應用程式繞過作業系統核心直接存取主機的物理eRDMA裝置,從而提供更快的資料轉送和通訊效率。具體操作,請參見在容器(Docker)中啟用eRDMA。
如需監測或診斷eRDMA,方便您對eRDMA的運行狀態進行即時監控。具體操作,請參見監測和診斷eRDMA。