admin管理员组文章数量:1487745
H800
一、 购机选择正确的共享镜像
从"共享镜像"标签中选择“img-ixkhtmde H800_CVM_GPU镜像”。
(如果使用TKE,请选择:"img-2hnbdzbc H800-CVM-TKE-RELEASE")
该OS镜像预装了如下软件:
- 操作系统:Tencent Linux 2.4 (与CentOS 7.9同源, 使用yum安装所需的包)
- 内核:5.4.119-19.0009.28 (优化内核)
- RDMA网卡驱动: MLNX_OFED_LINUX-5.8-2.0.3.0
- GPU驱动: 535.54.03 (包括GDR需要的nvidia_peermem)
- docker 20.10.21 + nvidia-docker2 2.13.0-1
- cuda版本:12.0; cudnn版本:8.8.0
备注:如果不使用此OS镜像,镜像内需要增加一些补丁才能正常使用
- GPU驱动、RDMA驱动、nvidia_peermem
- Linux内核增加ARP双发特性,支持RDMA的双发(提供内核patch)
- RDMA bond网络的反向路由检查
- bond配置脚本,rdma网卡名不建议ethX格式,会和弹性网卡顺序乱。
二、 系统检查
1、 检查网卡设备
命令:
代码语言:txt复制ibdev2netdev
2、 检查GPU驱动和nvlink状态
命令:
代码语言:txt复制nvidia-smi nvlink -s
如果出现inactive,执行如下命令,重启fabric manager:
代码语言:txt复制systemctl enable nvidia-fabricmanager.service && systemctl restart nvidia-fabricmanager.service
3、 检查GPU nvlink p2p 可读写状态
命令:
代码语言:txt复制nvidia-smi topo -p2p r
备注:若存在GPU间的状态是NS,如 图GPU5与GPU6之间:(该场景是nvidia bug,nv正在定位修复中;该问题目前只在驱动第一次加载时可能发生)
执行如下命令,reset GPU:
代码语言:txt复制for i in {0..7}; do fuser -k /dev/nvidia$i; nvidia-smi -r -i $i ; done
然后再次执行检查命令,确认所有状态都是OK
4、 检查GDR驱动是否已经加载
命令:
代码语言:txt复制lsmod | grep nvidia_peermem
如果没有加载,执行如下命令:
代码语言:txt复制modprobe nvidia-peermem && echo "nvidia-peermem" >> /etc/modules-load.d/nvpeermem.conf
5、 RDMA的bond ip地址检查
命令:
代码语言:txt复制ifconfig
三、 性能测试
1. RDMA 性能测试
测试两机之间极限带宽和延时:带宽测试两机bond之间互打perftest write流量,延时测试同LA及跨LA情况下bond之间send延时。
带宽测试server:
代码语言:txt复制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:
代码语言:txt复制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:
代码语言:txt复制ib_send_lat -d mlx5_bond_0 -a -F
延时测试client:
代码语言:txt复制ib_send_lat -d mlx5_bond_0 -a -F 30.7.64.146
● 其中client侧需要指定server端IP
2. NCCL benchmark测试
2.1 启动docker测试镜像
代码语言:txt复制// 下载并启动测试镜像
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/tencent/qcloud/taco-train/cuda12.1-ofed5.8-nccl2.18.3-1.6:latest
// 进入容器当中
docker exec -it nccl bash
● 注意:docker的启动参数里面必须包含:"--privileged", "--net=host"
该测试docker包含的软件版本如下:
代码语言:txt复制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.2 机器列表排序
● 进入任意一台机器上容器的如下目录(保证所有机器都启动了2.1节中的容器镜像)
代码语言:txt复制cd workspace/tools/
● 将要参与nccl测试机器的ENI ip(通过ifconfig eth0获取)存放到ip_eth0.txt 中,例如:
代码语言:txt复制cat > ip_eth0.txt << EOF
10.0.0.1
10.0.0.10
10.0.0.8
10.0.0.9
EOF
● 排序(基于网络拓扑),
代码语言:txt复制bash get_rdma_order_by_ip.sh ip_eth0.txt
排序后的列表保存在当前目录的hostfile.txt中
代码语言: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>,例如:
代码语言:txt复制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 训练加速引擎-文档中心-腾讯云
2.3 启动测试nccl测试(在master节点上执行)
代码语言:txt复制// 运行4机32卡4G数据包的AllReduce
bash run_nccl_test.sh 0 4G 32
3. AI模型测试
3.1 启动docker测试镜像
代码语言:txt复制// 下载并启动测试镜像
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/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包含的软件版本如下:
代码语言:txt复制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
3.2 LLaMA
模型实现:decapoda-research/llama-7b-hf at main
代码语言:txtx复制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中的配置,也需要同步到其他节点
3.3 BLOOM
模型实现:
代码语言:txt复制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中的配置,也需要同步到其他节点
3.4 Megatron-LM
代码语言:txt复制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中的配置,也需要同步到其他节点
3.5 gpt-neox
代码语言:txt复制cd /workspace/deepspeed/gpt-neox && bash download_dataset.sh
# 修改./hostfile,添加训练节点IP
# run gpt-neox llama 7B
bash start.sh
3.6 baichuan2
代码语言:txt复制cd /workspace/deepspeed/Baichuan2/fine-tune && bash download_model.sh
# fine-tuning baichuan2-7B-base with lora
bash start.sh <master_ip>
3.7 chatglm2-6B
代码语言:txt复制cd /workspace/deepspeed/ChatGLM2-6B/ptuning && bash download_model.sh
# fine-tuning chatglm2-6b with p-tuningV2
bash start.sh <master_ip>
四、性能结果
1. 测试环境信息
机型 | HCCPNV5v |
---|---|
CPU | Intel SPR CPU*2 |
GPU | SXM5 H800*8 |
网卡 | 200G CX7 (2P) RDMA*8 |
存储 | NVMe-6.4T Gen4*8 |
2. RDMA
带宽write:
延时同LA:
延时跨LA:
3. NCCL benchmark
8卡到256卡的AllReduce测试数据如下图。测试环境基于上述docker,其包含的软件信息为:
● CUDA: 12.2
● NCCL: 2.18.3(Tencent Cloud修改后版本)
4. AI模型
五、自定义容器镜像安装指引
1. 用户态RDMA驱动
如果使用自定义的业务镜像,请在镜像当中安装用户态的RDMA驱动:
代码语言:txt复制//检查主机上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中:
链接如下:/
安装成功后输出如下:
2. NCCL插件安装和环境变量
2.1 安装高性能NCCL插件
代码语言:txt复制// Ubuntu 20.04
dpkg -r nccl-rdma-sharp-plugins
wget .2_amd64.deb && dpkg -i nccl-rdma-sharp-plugins_1.2_amd64.deb
// TencentOS Server 2.4
rpm -e nccl-rdma-sharp-plugins
wget .2-1.x86_64.rpm && rpm -ivh --nodeps --force nccl-rdma-sharp-plugins-1.2-1.x86_64.rpm
2.2 配置NCCL环境变量
代码语言:txt复制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
2.3 确认插件被加载
如果想卸载NCCL插件,请执行如下命令:
代码语言:txt复制// Ubuntu 20.04
dpkg -r nccl-rdma-sharp-plugins
// TencentOS Server 2.4
rpm -e nccl-rdma-sharp-plugins
3. 集群环境一致性检查
通过执行如下脚本检查集群的软件版本配置是否一致
代码语言:txt复制wget .py
# host.txt包含所有节点的IPs,一行一个
python cluster_check.py -f host.txt
本文标签: H800
版权声明:本文标题:H800 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754657290a3175366.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论