本文介绍如何在虚拟环境或容器环境中,使用NCCL测试ebmhpcpni2l实例的RDMA网络性能。
ebmhpcpni2l实例搭载NVIDIA A800显卡,同时支持800Gbps RDMA高速网络,大幅提升集群通信性能,提高大规模训练加速比。更多信息,请参见高性能计算GPU型ebmhpcpni2l(邀测)。
NCCL是NVIDIA的集合通信库,支持安装在单个节点或多个节点的大量GPU卡上,实现多个GPU的快速通信。
本文所述操作需要安装的软件包介绍如下。
关键组件 | 说明 |
---|---|
NVIDIA驱动 |
|
OpenMPI | OpenMPI是一个开源的 Message Passing Interface 实现,是一种高性能消息传递库,能够结合整个高性能计算社区的专业知识、技术和资源,建立现有的最佳MPI库。OpenMPI在系统和软件供应商、应用开发者和计算机科学研究人员中有广泛应用。 |
NCCL | NCCL(Nvidia Collective Communication Library)是NVIDIA的集合通信库,支持安装在单个节点或多个节点的大量GPU卡上,实现多个GPU的快速通信。 |
NCCL Tests | NCCL Tests是一个测试工具集,可以用来评估NCCL的运行性能和正确性。 |
OFED | MLNX OFED(OpenFabrics Enterprise Distribution)是一组开源软件驱动、核心内核代码、中间件和支持InfiniBand Fabric的用户级接口程序,用于监视InfiniBand网络的运行情况,包括监视传输带宽和监视Fabric内部的拥塞情况。 |
您已购买两台ebmhpcpni2l实例,并勾选“后台自动安装GPU驱动”,即可使实例在启动时自动安装NVIDIA驱动。具体配置如下表所示,购买实例请参见购买高性能计算GPU型实例。
实例规格 | 实例数量 | 镜像类型 | 驱动安装/版本 | 是否绑定公网IP |
---|---|---|---|---|
ecs.ebmhpcpni2l.32xlarge | 2 | Ubuntu 20.04 | 创建实例时勾选“后台自动安装GPU驱动”:系统将自动安装GPU驱动、CUDA和cuDNN库(驱动版本见下图)以及Faric manager安装包。 说明 实例创建完成后您只需启动NVIDIA-Fabric Manager即可。 | 是,如未绑定,请参见绑定公网IP。 |
搭建Pytorch虚拟环境,具体操作请参见GPU-部署Pytorch应用。
执行以下命令,查看CUDA驱动版本。/usr/local/cuda/bin/nvcc -V
回显如下,表示已安装CUDA,版本为11.4。
依次执行以下命令,安装适用于CUDA 11的NCCL。
如需安装适用于其它CUDA的NCCL,请参考NIDIA-NCCL官网。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt update sudo apt install libnccl2=2.8.4-1+cuda11.2 libnccl-dev=2.8.4-1+cuda11.2
执行以下命令,检查NCCL是否安装成功。
updatedb ldconfig -v | grep "libnccl.so" | tail -n1 | sed -r 's/^.*\.so\.//'
回显如2.8.4
,表示安装成功。
配置NCCL环境变量。
执行vim /etc/profile
命令,打开配置文件。
按i
,进入编辑模式。
在文件末尾添加如下参数。各参数相关介绍请参见关键环境变量说明。
NCCL_IB_HCA=mlx5_1:1,mlx5_2:1,mlx5_3:1,mlx5_4:1 NCCL_IB_DISABLE=0 NCCL_SOCKET_IFNAME=eth0 NCCL_IB_GID_INDEX=3 NCCL_NET_GDR_LEVEL=2 NCCL_DEBUG=INFO
按Esc
退出编辑模式,输入:wq
并按下Enter
键,保存并退出文件。
执行source /etc/profile
命令,使配置更新生效。
执行以下命令,加载nv_peer_mem服务使能GPU Direct RDMA。
apt-get install nvidia-modprobe modprobe nvidia_peermem
依次执行以下命令,安装OpenMPI。
cd ~ wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.bz2 tar xf openmpi-4.1.4.tar.bz2 cd openmpi-4.1.4 ./configure --prefix=/usr/local/openmpi 2>&1 | tee config.out make -j 80 all 2>&1 | tee make.out make install 2>&1 | tee install.out sed -i '1i\export PATH=/usr/local/openmpi/bin:$PATH' ~/.bashrc source ~/.bashrc
检查是否正常安装。mpiexec --version
回显如下,表示已正常安装。
依次执行以下命令,安装NCCL Tests。
cd ~ wget https://github.com/NVIDIA/nccl-tests/archive/refs/tags/v2.10.1.tar.gz tar -zxvf v2.10.1.tar.gz cd nccl-tests-2.10.1 make -j40 MPI=1 MPI_HOME=/usr/local/openmpi CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/lib/x86_64-linux-gnu sed -i '1i\export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/lib/x86_64-linux-gnu:/usr/local/openmpi/lib:$LD_LIBRARY_PATH' ~/.bashrc source ~/.bashrc
执行以下命令,测试单机性能。./build/all_reduce_perf -b 256M -e 8G -f 2 -g 8 -n 100 -w 20
回显如下所示,本例中A800单机平均带宽为155GB/s。
说明
执行该命令后若报错,说明NCCL Tests未正常安装,请执行步骤四重试。
进行多机测试时,请确认两台ebmhpcpni2l实例已加入同一高性能计算集群。
您可以在高性能计算集群控制台,单击目标集群进入“实例列表”页签查看集群绑定的实例。
配置多机间免密登录。
在A实例(Sever端)中依次执行以下命令,创建密钥对并开启读写权限。
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa
在B实例(Client端)中执行以下命令,用于将A实例的密钥对拷贝至B实例。
scp ~/.ssh/id_rsa.pub root@192.XX.XX.205:~/.ssh/authorized_keys #root@后需替换为B实例的host IP地址
在A实例中执行以下命令,检查RDMA网卡是否可以正常使用。
ib_write_bw
回显如下,表示可以正常使用。
在B实例中使用NCCL Tests评估集群性能。
mpirun --oversubscribe --allow-run-as-root -mca plm_rsh_args "-p 22 -q -o StrictHostKeyChecking=no" -n 16 -N 8 -H 192.168.0.128:1,192.168.0.127:1 -bind-to socket -map-by slot -mca pml ob1 -mca btl ^openib -mca orte_base_help_aggregate 0 -mca btl_tcp_if_include eth0 -mca coll_hcoll_enable 0 -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0 -x NCCL_IB_DISABLE=0 -x NCCL_NET_GDR_LEVEL=2 -x NCCL_IB_HCA=mlx5_1:1,mlx5_2:1,mlx5_3:1,mlx5_4:1 -x NCCL_IB_GID_INDEX=3 ~/nccl-tests-2.10.1/build/all_reduce_perf -b 256M -e 8G -f 2 -g 1 -c 1 -n 100
安装Docker,具体操作请参见安装Docker。
在HPC实例上,依次执行以下命令,下载CUDA镜像,启动并进入容器。
docker pull nvcr.io/nvidia/cuda:12.0.0-devel-ubuntu20.04 nvidia-docker run --gpus all -it -v /run/nvidia-nvidia-docker run --gpus all --network host --ipc host --privileged -it <IMAGE ID> bash #首次登录,请先运行容器,需要以host网络模式运行
说明
如果是非首次进入容器,请依次执行以下命令:
其中,<container_id>需替换为执行docker ps
后返回的容器ID。
docker ps #查询对应容器 docker exec -it <container_id> bash
在容器中,安装OFED驱动。
执行以下命令,安装对应容器的镜像版本的OFED驱动。
如需下载其它系统环境对应的OFED,请访问NVIDIA官网。
wget https://image-bucket-beijing.tos-cn-beijing.volces.com/MLNX_OFED_LINUX-5.4-1.0.3.0-ubuntu20.04-x86_64.tgz tar zxvf MLNX_OFED_LINUX-5.4-1.0.3.0-ubuntu20.04-x86_64.tgz cd MLNX_OFED_LINUX-5.4-1.0.3.0-ubuntu20.04-x86_64 ./mlnxofedinstall --without-fw-update --vma --skip-distro-check --user-space-only --force
执行以下命令,检查OFED是否安装。ofed_info -s
回显如下,表示已安装。
在容器中安装所需软件包,包括RDMA相关库、NCCL、OpenMPI、NCCL Tests等,具体操作请参见配置容器环境。
执行以下命令,测试单机性能。./build/all_reduce_perf -b 256M -e 8G -f 2 -g 8 -n 100 -w 20
回显如下所示,本例中A800单机平均带宽为155GB/s。
说明
执行该命令后若报错,说明NCCL Tests未正常安装,请参考步骤一的第4步在容器中重新安装NCCL Tests后重试。
多机性能测试操作请参见多实例集合通信能力测试。