HPC-X ClusterKit IB 网络测试经验
摘要: 本文档分享了使用 NVIDIA HPC-X 工具包中的 ClusterKit 工具进行 InfiniBand (IB) 网络性能测试的经验。ClusterKit 能够自动化地在集群节点间运行成对的带宽和延迟测试,是交付验收的重要工具。
1. 环境与前置条件
1.1 验证参考环境
虽然 HPC-X 支持多种架构,但以下是本次验证的基础环境:
- CPU: Intel Xeon Platinum 8358 (Ice Lake)
- OS: CentOS 7.9 / RHEL 8 / Ubuntu 22.04
- Driver: MLNX_OFED_LINUX (版本需与 OS 匹配)
1.2 前置要求
在开始测试前,请确保满足以下条件:
- DNS/Hosts: 集群内所有节点已配置
/etc/hosts解析,可通过主机名互访。 - SSH 互信: 控制节点到所有计算节点已配置 SSH 免密登录。
- IB 状态: 所有节点的 IB 网卡状态为
Active(使用ibstat检查)。
2. 软件获取与部署
2.1 下载 HPC-X
访问 NVIDIA 官方网站下载对应 OS 和 CUDA 版本的 HPC-X 工具包:
2.2 部署安装
假设安装目录为 /opt/software/。
bash
# 1. 解压安装包
cd /opt/software/
tar xvf hpcx-v2.13.1-gcc-MLNX_OFED_LINUX-5-redhat7-cuda11-gdrcopy2-nccl2.12-x86_64.tbz
# 2. 加载环境变量
# 进入解压后的目录
cd hpcx-v2.13.1-gcc-MLNX_OFED_LINUX-5-redhat7-cuda11-gdrcopy2-nccl2.12-x86_64
# 设置 HPCX_HOME
export HPCX_HOME=$PWD
# 初始化环境
source $HPCX_HOME/hpcx-init.sh
hpcx_load验证
执行 hpcx_load 后,输入 which clusterkit.sh 应能看到工具路径。
3. ClusterKit 测试执行
3.1 确认设备名称
如果服务器有多张 IB 网卡(如计算面和存储面分离),需先确认目标网卡的设备名。
bash
ibdev2netdev输出示例:
text
mlx5_0 port 1 ==> ib0 (Up)
mlx5_1 port 1 ==> ib1 (Up)记下设备名,例如 mlx5_0:1 (设备名:端口号)。
3.2 准备 Hostfile
创建一个包含参与测试节点主机名的文件 hostfile:
text
node01
node02
node03
node043.3 执行测试命令
进入工具目录并运行脚本:
bash
cd $HPCX_HOME/clusterkit/bin
# 场景:测试 ib0 (mlx5_0:1),单向带宽
./clusterkit.sh --hca_list "mlx5_0:1" --hostfile hostfile --unidirectional3.4 关键参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
--hca_list | 指定 HCA 卡和端口 | "mlx5_0:1" 或 "mlx5_0:1,mlx5_1:1" |
--unidirectional | 运行单向带宽测试 (默认为双向) | - |
--hostfile | 指定节点列表文件 | --hostfile ./hosts |
4. 结果分析
测试完成后,ClusterKit 会在当前目录下生成一个以时间戳命名的文件夹(如 20240112_161542)。
4.1 核心文件
bandwidth.txt: 记录节点间的带宽矩阵。- 关注对角线或平均值,确保接近网卡理论线速(如 HDR 为 200Gbps,NDR 为 400Gbps)。
latency.txt: 记录节点间的延迟矩阵。- 正常 IB 网络延迟通常在 1us ~ 3us 之间(取决于跳数)。
5. 常见问题与注意事项
5.1 节点数量必须为偶数
报错:must be run with an even number of nodes
ClusterKit 的默认模式是进行 Pairwise (成对) 测试。如果 hostfile 中的节点数量是奇数(例如 3 台),测试将报错。
解决方案: 移除一台节点或增加一台节点,确保参与测试的总数为偶数。
5.2 性能未达标
- 检查 PCIe 槽位是否为 x16 Gen4/Gen5。
- 检查 BIOS 中是否开启了 Performance 模式。
- 使用
iblinkinfo检查链路层是否存在误码 (Symbol Errors)。
