2、测试环境搭建:硬件选型与软件栈安装验证

做带宽测试,第一步就是把环境搭起来。这一步要是没弄好,后面测出来的数据全是废的。我见过不少团队,硬件买回来就急着跑测试,结果发现网卡驱动不对,或者NCCL版本跟CUDA不匹配,折腾好几天。

说白了,环境搭建就是打好地基。地基不稳,楼盖得再高也得塌。

2.1 硬件选型:GPU与网卡怎么配

先聊GPU。目前做高性能AI训练,NVIDIA的A100和H100是主流。我个人习惯,如果预算充足,直接上H100。为什么?H100的NVLink带宽是900GB/s,比A100的600GB/s高了50%。你想想看,多卡通信时,这个差距就是实打实的训练速度差异。

但如果你手头是A100,也别灰心。A100在FP16和TF32下的表现依然能打。我在项目中遇到过用A100 80GB跑千亿参数模型的情况,只要网络拓扑设计合理,照样能跑出不错的吞吐量。

网卡这块,Mellanox是绕不开的选择。CX6、CX7系列我都用过。CX7单口400Gb/s,双口就是800Gb/s。嗯,这里要注意:网卡选型不光看速率,还要看PCIe通道数。CX7需要PCIe 5.0 x16才能跑满带宽。如果你服务器只支持PCIe 4.0,那CX6其实就够了,别花冤枉钱。

硬件选型速查表

组件 推荐型号 关键参数 适用场景
GPU NVIDIA H100 NVLink 900GB/s, HBM3 千亿参数大模型训练
GPU NVIDIA A100 NVLink 600GB/s, HBM2e 百亿参数模型,性价比之选
网卡 Mellanox CX7 400Gb/s, PCIe 5.0 x16 H100集群,追求极致带宽
网卡 Mellanox CX6 200Gb/s, PCIe 4.0 x16 A100集群,成熟稳定

2.2 软件栈安装:NCCL、OFED、CUDA Toolkit

硬件到位了,接下来就是装软件。这三样东西缺一不可:CUDA Toolkit、OFED、NCCL。顺序也有讲究,我建议先装CUDA,再装OFED,最后装NCCL。

2.2.1 CUDA Toolkit安装

CUDA Toolkit是GPU计算的基石。去NVIDIA官网下载对应版本就行。我个人习惯用runfile安装,因为可以指定安装路径,方便多版本共存。

# 下载CUDA 12.1
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run

# 执行安装,建议选择自定义安装,只安装Toolkit
sudo sh cuda_12.1.0_530.30.02_linux.run

# 设置环境变量
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH

小技巧:安装完成后,用 nvcc --version 验证。如果显示版本号,说明CUDA装好了。我曾经遇到过装完没加环境变量,结果nvcc找不到,折腾了半小时才发现是PATH没配。

2.2.2 OFED驱动安装

OFED是Mellanox网卡的驱动栈。说白了,没有它,网卡就是块废铁。OFED包含了驱动、固件工具、性能测试工具(比如ib_write_bw)。

# 下载OFED 5.9
wget https://content.mellanox.com/ofed/MLNX_OFED-5.9-0.5.6.0/MLNX_OFED_LINUX-5.9-0.5.6.0-ubuntu22.04-x86_64.tgz

# 解压并安装
tar xzf MLNX_OFED_LINUX-5.9-0.5.6.0-ubuntu22.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.9-0.5.6.0-ubuntu22.04-x86_64
sudo ./mlnxofedinstall --all

# 重启驱动
sudo /etc/init.d/openibd restart

注意:OFED版本必须与内核版本匹配。我遇到过最坑的一次,是内核升级后OFED驱动加载失败,网卡直接down了。建议安装前先查一下内核版本:uname -r,然后去Mellanox官网确认兼容性。

2.2.3 NCCL安装

NCCL是NVIDIA的集合通信库。多卡通信全靠它。NCCL有几种安装方式:源码编译、pip安装、或者用NVIDIA的容器镜像。我个人推荐用源码编译,因为可以针对你的硬件做优化。

# 下载NCCL源码
git clone https://github.com/NVIDIA/nccl.git
cd nccl

# 编译安装
make -j src.build
sudo make install

# 验证安装
ldconfig -p | grep nccl

验证NCCL是否正常工作:

# 运行NCCL的allreduce测试
/usr/local/bin/allreduce_perf -b 8 -e 128M -f 2 -g 8

# 输出示例
#  8 bytes: 0.12 GB/s
#  16 bytes: 0.23 GB/s
#  ...
#  128M bytes: 85.6 GB/s

如果能看到带宽数据,说明NCCL安装成功。注意看最后的大消息带宽,应该接近硬件理论值。

2.3 环境验证:确保一切就绪

装完软件,别急着跑测试。先做一轮验证,确保每个组件都正常工作。

  1. GPU验证:运行 nvidia-smi,确认所有GPU都能识别,驱动版本正确。
  2. 网卡验证:运行 ibstat,查看网卡状态。如果显示"Active",说明网卡正常。
  3. 网络连通性:用 ib_write_bw 测试两台机器间的点对点带宽。
# 在服务器A上启动服务端
ib_write_bw -d mlx5_0 --report_gbits

# 在服务器B上启动客户端
ib_write_bw -d mlx5_0 --report_gbits 192.168.1.1

如果看到带宽接近网卡标称值,比如CX6的200Gb/s,那说明网络环境没问题。我曾经遇到过交换机配置错误,导致带宽只有标称值的30%,排查了两天才发现是流控没开。

避坑指南:我曾经在验证环境时,发现NCCL测试带宽只有理论值的一半。排查后发现是PCIe链路宽度不对,GPU插在了x8的插槽上。所以,装完环境后,一定要用 nvidia-smi topo -m 检查GPU的拓扑结构,确保每个GPU都跑在x16上。

2.4 知识体系总览

下面这张图,把整个环境搭建的流程串起来了。你可以把它当作一张检查清单,每做完一步就打个勾。

环境搭建知识体系 硬件选型 GPU + 网卡 软件栈安装 CUDA + OFED + NCCL 环境验证 GPU/网卡/网络 GPU: A100 / H100 网卡: CX6 / CX7 CUDA Toolkit 12.x OFED 5.9+ NCCL 2.18+ nvidia-smi 检查GPU ibstat 检查网卡 ib_write_bw 测带宽 核心原则 先硬件后软件,逐层验证,确保每个环节无误

环境搭建这块,说白了就是细心。每个组件都验证通过,后面跑测试才能顺风顺水。我见过太多人跳过验证环节,结果测试数据异常,回头再排查环境问题,白白浪费几天时间。

好了,环境搭好了,下一步就可以开始跑带宽测试了。记住,好的开始是成功的一半。

可可精品资料库