前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >H800_3.2T RDMA测试指导文档

H800_3.2T RDMA测试指导文档

原创
作者头像
Yellowsun
修改2024-10-22 21:02:22
1050
修改2024-10-22 21:02:22

一、 购机选择正确的共享镜像

从"共享镜像"标签中选择“img-ixkhtmde H800_CVM_GPU镜像”。

(如果使用TKE,请选择:"img-2hnbdzbc H800-CVM-TKE-RELEASE")

该OS镜像预装了如下软件:

  1. 操作系统:Tencent Linux 2.4 (与CentOS 7.9同源, 使用yum安装所需的包)
  2. 内核:5.4.119-19.0009.28 (优化内核)
  3. RDMA网卡驱动: MLNX_OFED_LINUX-5.8-2.0.3.0
  4. GPU驱动: 535.54.03 (包括GDR需要的nvidia_peermem)
  5. docker 20.10.21 + nvidia-docker2 2.13.0-1
  6. cuda版本:12.0; cudnn版本:8.8.0

备注:如果不使用此OS镜像,镜像内需要增加一些补丁才能正常使用

  1. GPU驱动、RDMA驱动、nvidia_peermem
  2. Linux内核增加ARP双发特性,支持RDMA的双发(提供内核patch)
  3. RDMA bond网络的反向路由检查
  4. 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.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包含的软件版本如下:

代码语言: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.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包含的软件版本如下:

代码语言: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

模型实现:https://huggingface.co/bigscience/bloom-7b1

代码语言: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中:

链接如下:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/

安装成功后输出如下:

2. NCCL插件安装和环境变量

2.1 安装高性能NCCL插件

代码语言:txt
复制
// 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

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 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 购机选择正确的共享镜像
  • 二、 系统检查
    • 1、 检查网卡设备
      • 2、 检查GPU驱动和nvlink状态
        • 3、 检查GPU nvlink p2p 可读写状态
          • 4、 检查GDR驱动是否已经加载
            • 5、 RDMA的bond ip地址检查
            • 三、 性能测试
              • 1. RDMA 性能测试
                • 2. NCCL benchmark测试
                  • 2.1 启动docker测试镜像
                  • 2.2 机器列表排序
                  • 2.3 启动测试nccl测试(在master节点上执行)
                • 3. AI模型测试
                  • 3.1 启动docker测试镜像
                  • 3.2 LLaMA
                  • 3.3 BLOOM
                  • 3.4 Megatron-LM
                  • 3.5 gpt-neox
                  • 3.6 baichuan2
                  • 3.7 chatglm2-6B
              • 四、性能结果
                • 1. 测试环境信息
                  • 2. RDMA
                    • 3. NCCL benchmark
                      • 4. AI模型
                      • 五、自定义容器镜像安装指引
                        • 1. 用户态RDMA驱动
                          • 2. NCCL插件安装和环境变量
                            • 2.1 安装高性能NCCL插件
                              • 2.2 配置NCCL环境变量
                                • 2.3 确认插件被加载
                                  • 3. 集群环境一致性检查
                                  相关产品与服务
                                  高性能计算集群
                                  高性能计算集群(Tencent Hyper Computing Cluster)以高性能云服务器为节点,通过 RDMA 互联,大幅提升网络性能,提供高带宽和极低延迟的网络服务。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档