在深度学习与高性能计算领域,多 GPU 之间高效的数据通信至关重要。NVIDIA Collective Communications Library(NCCL)正是为此而生,它提供了优化的多 GPU 集合通信原语,极大提升分布式训练效率。而 nccl-tests 作为官方提供的测试套件,能帮助开发者精准评估 NCCL 的性能表现。本文将基于 Linux 环境,为你详细拆解 nccl-tests 测试的全流程。
一、测试前的准备工作
1. 安装 CUDA
CUDA 是 NVIDIA 推出的并行计算平台和编程模型,NCCL 依赖 CUDA 运行。开发者可前往 NVIDIA 官方网站(https://developer.nvidia.com/cuda-downloads?target_os=Linux),根据自己的 Linux 发行版、版本号、架构、驱动版本等信息,选择对应的 CUDA 安装包。安装完成后,CUDA 相关工具和库将为后续的 GPU 计算与 NCCL 测试提供底层支持。
2. 查看 GPU 拓扑
通过 nvidia - smi topo -m 命令,能够获取 GPU 之间的连接拓扑信息。该拓扑信息展示了 GPU 与 GPU 之间、GPU 与 CPU 内存、GPU 与高速缓存等组件之间的连接关系和带宽情况。了解 GPU 拓扑有助于在后续测试和实际应用中,合理分配任务,优化通信路径,充分发挥 GPU 集群的性能。
3. 安装 NCCL
- 获取源:使用 wget 命令下载 NCCL 的源文件 cuda - keyring_1.0 - 1_all.deb,该文件包含了软件源的密钥,用于验证软件包的完整性和来源合法性。下载完成后,通过 dpkg -i 命令安装密钥。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb dpkg -i cuda-keyring_1.0-1_all.deb |
- 更新软件源:执行 apt update 命令,使系统获取最新的软件包列表信息。
- 删除已有 NCCL(如需):若系统中已安装旧版本的 NCCL,可使用 apt - get remove --purge 命令彻底删除相关软件包及其配置文件,避免新旧版本冲突。
apt-get remove --purge libnccl2 libnccl-dev |
- 安装依赖:apt install build - essential devscripts debhelper fakeroot - y 命令用于安装编译和构建软件包所需的基础工具和辅助工具。
- 安装 NCCL:通过 apt install 命令安装 NCCL 的运行库 libnccl2 和开发库 libnccl - dev。安装完成后,可使用 dpkg - l | grep nccl 查看 NCCL 版本信息,使用 dpkg - L libnccl2 | grep.so 查看 NCCL 库文件所在位置。
apt install libnccl2 libnccl-dev -y dpkg -l | grep nccl dpkg -L libnccl2 | grep .so |
二、编译 nccl-tests 库
1. 克隆库文件
使用 git clone 命令将 nccl-tests 库从 GitHub 仓库克隆到本地,并进入该目录。
git clone https://github.com/NVIDIA/nccl-tests.git cd nccl-tests |
2. 执行编译
通过 make clean && make -j 命令进行编译,同时指定 CUDA_HOME 和 NCCL_HOME 路径。make clean 用于清除之前的编译文件,make -j 中的 -j 参数可利用多核并行编译,加快编译速度。编译成功后,会生成 build 文件夹,其中包含 all_reduce_perf 等多种可执行文件,这些文件将用于后续的性能测试。
make clean && make -j \ CUDA_HOME=/usr/local/cuda \ NCCL_HOME=/usr/lib |
编译完成后,可通过 ./build/all_reduce_perf --help 命令查看测试工具的使用帮助信息,了解各参数的含义和用法。
三、单节点测试
单节点测试主要用于评估单个服务器上多 GPU 之间的 NCCL 性能。以 8 张 GPU 为例,执行以下命令:
./build/all_reduce_perf \ --minbytes 8 \ --maxbytes 256M \ --stepfactor 2 \ --ngpus 8 |
在这个指令中,--ngpus 8 表示使用 8 张 GPU 执行 all_reduce 操作;--minbytes 8 和 --maxbytes 256M 限定了测试数据量的范围,从 8 字节到 256 兆字节;--stepfactor 2 表示数据量每次以翻倍的方式递增。测试完成后,重点关注算法带宽(algbw)和总线带宽(busbw)指标,通常算法带宽大于 6.7GB/s、总线带宽大于 11.7GB/s 左右视为性能良好。
四、多节点测试
多节点测试模拟了在分布式环境下,多个服务器之间 GPU 的通信性能。在进行多节点测试前,需要先安装 open - mpi。
1. 安装 open-mpi
使用 apt install 命令安装 openmpi - bin 和 libopenmpi - dev 软件包,分别提供了 open - mpi 的可执行程序和开发库。安装完成后,需要在 .bashrc 文件中配置环境变量,将 open - mpi 的可执行文件路径和库文件路径添加到系统路径中,并使用 source 命令使配置生效。最后通过 mpirun --version 验证安装是否成功。
apt install openmpi-bin libopenmpi-dev -y vim ~/.bashrc # 添加以下内容 export PATH=/usr/local/mpich/bin:$PATH export LD_LIBRARY_PATH=/usr/local/mpich/lib:$LD_LIBRARY_PATH source ~/.bashrc mpirun --version |
2. 执行测试
假设存在两台机器,每台机器配备 8 张 GPU 卡,在两台机器上分别执行以下命令:
# 第一台 mpirun \ -np 16 \ -H 10.157.104.125:8,10.157.104.126:8 \ --allow-run-as-root \ ./build/all_reduce_perf \ -b 8 \ -e 512M \ -f 2 \ -g 1 # 第二台 mpirun \ -np 16 \ -H 10.157.104.126:8,10.157.104.125:8 \ --allow-run-as-root \ ./build/all_reduce_perf \ -b 8 \ -e 512M \ -f 2 \ -g 1 |
mpirun 是启动和管理 MPI 程序的工具。-np 16 指定总共运行 16 个进程(对应两台机器共 16 张 GPU);-H 后跟随主机列表及每台主机使用的 GPU 数量;--allow-run-as-root 允许以 root 用户身份运行(需谨慎使用);-b、-e、-f、-g 等参数与单节点测试中的类似参数作用相同,用于设置数据量范围、递增因子等。
通过完整的 nccl-tests 测试流程,开发者能够全面掌握 NCCL 在不同环境下的性能表现,从而为深度学习分布式训练等场景优化配置、提升系统整体效率。无论是单节点的 GPU 协同性能,还是多节点的分布式通信效率,这些测试结果都能为实际应用提供有力的数据支撑。在实际应用中,建议根据测试结果不断调整参数和配置,充分释放 NCCL 的潜力,推动高性能计算任务高效运行。
最后小小打个广告,胜算云Router已经上线运行,一键调用国内外多种大模型,轻松方便稳定高效。欢迎大家关注“公众号-胜算云”或者直接登录“胜算云Router”官网体验使用!