从"共享镜像"标签中选择“img-ixkhtmde H800_CVM_GPU镜像”。
(如果使用TKE,请选择:"img-2hnbdzbc H800-CVM-TKE-RELEASE")
该OS镜像预装了如下软件:
备注:如果不使用此OS镜像,镜像内需要增加一些补丁才能正常使用
命令:
ibdev2netdev
命令:
nvidia-smi nvlink -s
如果出现inactive,执行如下命令,重启fabric manager:
systemctl enable nvidia-fabricmanager.service && systemctl restart nvidia-fabricmanager.service
命令:
nvidia-smi topo -p2p r
备注:若存在GPU间的状态是NS,如 图GPU5与GPU6之间:(该场景是nvidia bug,nv正在定位修复中;该问题目前只在驱动第一次加载时可能发生)
执行如下命令,reset GPU:
for i in {0..7}; do fuser -k /dev/nvidia$i; nvidia-smi -r -i $i ; done
然后再次执行检查命令,确认所有状态都是OK
命令:
lsmod | grep nvidia_peermem
如果没有加载,执行如下命令:
modprobe nvidia-peermem && echo "nvidia-peermem" >> /etc/modules-load.d/nvpeermem.conf
命令:
ifconfig
测试两机之间极限带宽和延时:带宽测试两机bond之间互打perftest write流量,延时测试同LA及跨LA情况下bond之间send延时。
带宽测试server:
taskset -c 10,11 ib_write_bw -d mlx5_bond_0 -x 3 -F --report_gbits -p 18500 -D 2 -q 16 --run_infinitely
taskset -c 12,13 ib_write_bw -d mlx5_bond_1 -x 3 -F --report_gbits -p 18501 -D 2 -q 16 --run_infinitely
taskset -c 14,15 ib_write_bw -d mlx5_bond_2 -x 3 -F --report_gbits -p 18502 -D 2 -q 16 --run_infinitely
taskset -c 16,17 ib_write_bw -d mlx5_bond_3 -x 3 -F --report_gbits -p 18503 -D 2 -q 16 --run_infinitely
taskset -c 100,101 ib_write_bw -d mlx5_bond_4 -x 3 -F --report_gbits -p 18504 -D 2 -q 16 --run_infinitely
taskset -c 102,103 ib_write_bw -d mlx5_bond_5 -x 3 -F --report_gbits -p 18505 -D 2 -q 16 --run_infinitely
taskset -c 104,105 ib_write_bw -d mlx5_bond_6 -x 3 -F --report_gbits -p 18506 -D 2 -q 16 --run_infinitely
taskset -c 106,107 ib_write_bw -d mlx5_bond_7 -x 3 -F --report_gbits -p 18507 -D 2 -q 16 --run_infinitely
带宽测试client:
taskset -c 10,11 ib_write_bw -d mlx5_bond_0 -x 3 -F --report_gbits -p 18500 -D 2 -q 16 --run_infinitely 30.139.10.138
taskset -c 12,13 ib_write_bw -d mlx5_bond_1 -x 3 -F --report_gbits -p 18501 -D 2 -q 16 --run_infinitely 30.139.10.246
taskset -c 14,15 ib_write_bw -d mlx5_bond_2 -x 3 -F --report_gbits -p 18502 -D 2 -q 16 --run_infinitely 30.139.11.118
taskset -c 16,17 ib_write_bw -d mlx5_bond_3 -x 3 -F --report_gbits -p 18503 -D 2 -q 16 --run_infinitely 30.139.11.138
taskset -c 100,101 ib_write_bw -d mlx5_bond_4 -x 3 -F --report_gbits -p 18504 -D 2 -q 16 --run_infinitely 30.139.11.170
taskset -c 102,103 ib_write_bw -d mlx5_bond_5 -x 3 -F --report_gbits -p 18505 -D 2 -q 16 --run_infinitely 30.139.11.238
taskset -c 104,105 ib_write_bw -d mlx5_bond_6 -x 3 -F --report_gbits -p 18506 -D 2 -q 16 --run_infinitely 30.139.11.50
taskset -c 106,107 ib_write_bw -d mlx5_bond_7 -x 3 -F --report_gbits -p 18507 -D 2 -q 16 --run_infinitely 30.139.11.98
● 其中client侧需要指定server端IP, taskset绑核需要与网卡numa node一致, 并且由于pcie switch限制,若同一pcie switch上插了多张卡(比如bond0和bond1的网卡插在同一pcie switch上,则bond0和bond1需要错开测试),网卡需要错开pcie switch验证, 例如bond0/2/4/6同时测,bond1/3/5/7同时测;若每个bond的网卡有独立的pcie switch,可以同时并发测8个bond,达到3.2T带宽(pcie switch分布可以通过lspci -tv命令查询)
● 由于单个QP只能使用一个端口,所以需要配置多个QP端口将bond带宽打满
延时测试server:
ib_send_lat -d mlx5_bond_0 -a -F
延时测试client:
ib_send_lat -d mlx5_bond_0 -a -F 30.7.64.146
● 其中client侧需要指定server端IP
// 下载并启动测试镜像
docker run \
-itd \
--gpus all \
--privileged --cap-add=IPC_LOCK \
--ulimit memlock=-1 --ulimit stack=67108864 \
-v /root:/mnt \
--net=host \
--ipc=host \
--name=nccl haihub.cn/tencent/qcloud/taco-train/cuda12.1-ofed5.8-nccl2.18.3-1.6:latest
// 进入容器当中
docker exec -it nccl bash
● 注意:docker的启动参数里面必须包含:"--privileged", "--net=host"
该测试docker包含的软件版本如下:
OS:Ubuntu 20.04.5 LTS
python:3.8.10
CUDA toolkit: V12.1.66
ofed: MLNX_OFED_LINUX-5.8-2.0.3.0
nccl: 2.18.3 (包含tencent sharp fix)
nccl-rdma-sharp-plugins: 1.2(包含tencent网络配置优化)
● 进入任意一台机器上容器的如下目录(保证所有机器都启动了2.1节中的容器镜像)
cd workspace/tools/
● 将要参与nccl测试机器的ENI ip(通过ifconfig eth0获取)存放到ip_eth0.txt 中,例如:
cat > ip_eth0.txt << EOF
10.0.0.1
10.0.0.10
10.0.0.8
10.0.0.9
EOF
● 排序(基于网络拓扑),
bash get_rdma_order_by_ip.sh ip_eth0.txt
排序后的列表保存在当前目录的hostfile.txt中
10.0.0.10
10.0.0.8
10.0.0.9
10.0.0.1
● 上述清单中的第一个ip(10.0.0.10)将作为master节点,进入master机器的容器
● 将排序后的ip list写入到/workspace/run_nccl_tests.sh变量<ip_list>,例如:
declare -a ip_list=(
10.0.0.10
10.0.0.8
10.0.0.9
10.0.0.1
)
注意:为什么需要排序列表?
参考:计算加速套件 TACO Kit TCCL 使用说明-TACO Train AI 训练加速引擎-文档中心-腾讯云
// 运行4机32卡4G数据包的AllReduce
bash run_nccl_test.sh 0 4G 32
// 下载并启动测试镜像
docker run \
-itd \
--gpus all \
--privileged --cap-add=IPC_LOCK \
--ulimit memlock=-1 --ulimit stack=67108864 \
-v /root:/mnt \
--net=host \
--ipc=host \
--name=ai haihub.cn/tencent/taco-train/cuda12.3-ofed5.8-nccl2.19.3-torch2.2-2.3:latest
// 进入容器当中
docker exec -it ai bash
● 注意:docker的启动参数里面必须包含:"--privileged", "--net=host"
该测试docker包含的软件版本如下:
OS:Ubuntu 20.04.5 LTS
python:3.8.10
CUDA toolkit: V12.1.66
cuDNN: 8.9.0
ofed: MLNX_OFED_LINUX-5.8-2.0.3.0
nccl: 2.18.3 (包含tencent sharp fix)
nccl-rdma-sharp-plugins: 1.2(包含tencent网络配置优化)
torch:2.1.0a0+fe05266
deepseed: 0.9.2
transformers: 4.28.1
flash-attn: 2.0.4
xformers: 0.0.21+320b5ad.d20230910
megatron-lm: 30a2791@9/1/2023
gpt-neox: 43ea51c@8/28/2023
模型实现:decapoda-research/llama-7b-hf at main
cd /workspace/deepspeed/hf-llama
# bash start.sh <master_addr> <node_num> <rank> <model_size>
#
# run LLAMA 7B on two nodes
#node0
bash start.sh 10.0.0.6 2 0 7
#node1
bash start.sh 10.0.0.6 2 1 7
# !!如果修改start.sh中的配置,也需要同步到其他节点
模型实现:https://huggingface.co/bigscience/bloom-7b1
cd /workspace/deepspeed/hf-bloom-7b1
# bash start.sh <master_addr> <node_num> <rank>
# run BLOOM 7B1 on two nodes
#node0
bash start.sh 10.0.0.6 2 0
#node1
bash start.sh 10.0.0.6 2 1
# !!如果修改start.sh中的配置,也需要同步到其他节点
cd /workspace/Megatron-LM && bash download_dataset.sh
# bash start.sh <master_addr> <node_num> <rank> <model_size>
# run GPT 7B on two nodes
#node0
bash start.sh 10.0.0.6 2 0 7
#node1
bash start.sh 10.0.0.6 2 1 7
# !!如果修改start.sh中的配置,也需要同步到其他节点
cd /workspace/deepspeed/gpt-neox && bash download_dataset.sh
# 修改./hostfile,添加训练节点IP
# run gpt-neox llama 7B
bash start.sh
cd /workspace/deepspeed/Baichuan2/fine-tune && bash download_model.sh
# fine-tuning baichuan2-7B-base with lora
bash start.sh <master_ip>
cd /workspace/deepspeed/ChatGLM2-6B/ptuning && bash download_model.sh
# fine-tuning chatglm2-6b with p-tuningV2
bash start.sh <master_ip>
机型 | HCCPNV5v |
---|---|
CPU | Intel SPR CPU*2 |
GPU | SXM5 H800*8 |
网卡 | 200G CX7 (2P) RDMA*8 |
存储 | NVMe-6.4T Gen4*8 |
带宽write:
延时同LA:
延时跨LA:
8卡到256卡的AllReduce测试数据如下图。测试环境基于上述docker,其包含的软件信息为:
● CUDA: 12.2
● NCCL: 2.18.3(Tencent Cloud修改后版本)
如果使用自定义的业务镜像,请在镜像当中安装用户态的RDMA驱动:
//检查主机上OFED版本
ofed_info -s // MLNX_OFED_LINUX-5.8-2.0.3.0
// 进入docker
docker exec -it poc bash
// 检查docker的os版本
cat /etc/os-release
// 下载对应OS版本和ofed版本的安装包(这里是centos7.9和5.8-2.0.3.0,参考手动下载)
tar xvf MLNX_OFED_LINUX-5.8-2.0.3.0-rhel7.9-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-2.0.3.0-rhel7.9-x86_64.tgz
// docker中安装RDMA用户台驱动
./mlnxofedinstall --user-space-only --without-fw-update --force
手动下载对应版本的OFED包并上传到docker中:
链接如下:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/
安装成功后输出如下:
// Ubuntu 20.04
dpkg -r nccl-rdma-sharp-plugins
wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/nccl/nccl-rdma-sharp-plugins_1.2_amd64.deb && dpkg -i nccl-rdma-sharp-plugins_1.2_amd64.deb
// TencentOS Server 2.4
rpm -e nccl-rdma-sharp-plugins
wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/nccl/nccl-rdma-sharp-plugins-1.2-1.x86_64.rpm && rpm -ivh --nodeps --force nccl-rdma-sharp-plugins-1.2-1.x86_64.rpm
export NCCL_DEBUG=INFO
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_GID_INDEX=3
export NCCL_IB_DISABLE=0
export NCCL_IB_HCA=mlx5_bond_0,mlx5_bond_1,mlx5_bond_2,mlx5_bond_3,mlx5_bond_4,mlx5_bond_5,mlx5_bond_6,mlx5_bond_7
export NCCL_NET_GDR_LEVEL=2
export NCCL_IB_QPS_PER_CONNECTION=4
export NCCL_IB_TC=160
export NCCL_IB_TIMEOUT=22
如果想卸载NCCL插件,请执行如下命令:
// Ubuntu 20.04
dpkg -r nccl-rdma-sharp-plugins
// TencentOS Server 2.4
rpm -e nccl-rdma-sharp-plugins
通过执行如下脚本检查集群的软件版本配置是否一致
wget https://taco-1251783334.cos.ap-shanghai.myqcloud.com/perftest/cluster_check.py
# host.txt包含所有节点的IPs,一行一个
python cluster_check.py -f host.txt
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。