文章目录[隐藏]
好的,非常乐意为你效劳。这是一份根据我们整个排错过程整理出的完整操作文档。
这份文档记录了从配置基础环境到解决一系列复杂依赖问题,最终成功运行 NCCL 测试的全过程。你可以直接将它保存下来。
Ubuntu 24.04 双 GPU 环境配置:从零到 NCCL 成功运行的完整指南
文档目标: 在一台装有两块 NVIDIA GPU (例如 Tesla T10) 的 Ubuntu 24.04 服务器上,正确配置 NVIDIA 驱动、CUDA Toolkit 12.5 以及 NCCL 库,并最终通过 nccl-tests
验证多 GPU 间通信正常。
核心问题背景: 此过程中的主要挑战来自于软件包版本的不匹配,特别是 CUDA Toolkit 版本与 NCCL 库版本之间的不兼容,以及 apt
包管理器在处理多个软件源时的优先级混乱问题。
第一阶段:安装 NVIDIA 驱动和 CUDA Toolkit
此阶段的目标是让系统能正确识别 GPU,并安装 nvcc
编译器。
安装 CUDA Toolkit 12.5:
我们通过apt
安装由 NVIDIA 官方打包的cuda-toolkit-12-5
。# (此步骤已在你之前的操作中完成) # 例如:sudo apt install cuda-toolkit-12-5
配置环境变量:
新安装的 CUDA 工具链需要被添加到系统的PATH
中,否则终端将找不到nvcc
等命令。打开 shell 配置文件
.bashrc
:nano ~/.bashrc
在文件末尾添加以下两行,指定 CUDA 的可执行文件和库文件路径:
# NVIDIA CUDA Toolkit export PATH=/usr/local/cuda-12.5/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-12.5/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
使配置立即生效:
source ~/.bashrc
验证:
nvcc -V
此时应能看到 CUDA 12.5 的版本信息,证明此阶段成功。
第二阶段:解决 NCCL 版本不匹配的终极方案
在尝试了多种方法(包括使用 apt
安装、手动复制文件等)后,我们发现最可靠、最能保证版本匹配的方案是:从 NCCL 源码编译并打包成适用于当前系统的 .deb
文件,然后进行安装。
这个方法可以彻底绕过 apt
仓库优先级混乱的问题。
环境清理(非常重要):
确保系统中没有任何旧的、由apt
安装的 NCCL 库残留,避免冲突。# 彻底卸载,--purge 会删除所有相关配置文件 sudo apt-get remove --purge libnccl-dev libnccl2 # 更新 apt 缓存,确保状态干净 sudo apt-get update
准备 NCCL 源码:
- 从 GitHub 克隆 NCCL 的官方源代码仓库。
git clone https://github.com/NVIDIA/nccl.git cd nccl
- 从 GitHub 克隆 NCCL 的官方源代码仓库。
安装编译依赖:
为了能将源码打包成 Debian (.deb
) 包,需要安装一些开发工具。sudo apt-get install build-essential devscripts
编译并打包 NCCL:
进入nccl
源码根目录,执行make
命令来构建.deb
包。这个命令会自动处理编译、打包等所有事务。# 在 nccl/ 源码目录下执行 make pkg.debian.build
这个过程会持续几分钟。完成后,你会在
build/pkg/deb/
目录下找到生成的两个.deb
文件。安装你亲手制作的
.deb
包:
使用dpkg
命令直接安装本地的.deb
文件。这是确保版本正确的关键一步。# 同时安装 runtime 库和 development 开发包 # 路径和版本号请根据你实际生成的文件名调整 sudo dpkg -i build/pkg/deb/libnccl2_*.deb build/pkg/deb/libnccl-dev_*.deb
验证安装结果:
使用apt-cache policy
命令检查当前系统中libnccl-dev
的状态。apt-cache policy libnccl-dev
此时,输出结果中已安装的版本应明确显示为你刚刚构建的、版本号中带有
+cuda12.5
的那一个。成功标志:
libnccl-dev: 已安装:2.27.6-1+cuda12.5 ... *** 2.27.6-1+cuda12.5 100 100 /var/lib/dpkg/status
第三阶段:最终验证 NCCL 功能
现在,你的系统拥有了版本完美匹配的驱动、CUDA Toolkit 和 NCCL。我们最后来运行 nccl-tests
进行最终验证。
准备
nccl-tests
:
如果还没有,从 GitHub 克隆它。# 回到主目录 cd ~ git clone https://github.com/NVIDIA/nccl-tests.git cd nccl-tests
编译
nccl-tests
:
使用make
命令进行编译。由于上一步已正确安装libnccl-dev
,编译过程会顺利找到nccl.h
头文件并成功链接libnccl.so
库。# 清理一下可能存在的旧编译产物 make clean # 编译 make -j $(nproc)
运行测试!
执行all_reduce_perf
测试,指定使用 2 个 GPU。./build/all_reduce_perf -b 8M -e 128M -f 2 -g 2
查看最终结果:
终端上会输出一个性能数据表格,显示了不同数据块大小下的通信带宽,并且没有任何错误信息。成功标志:
# size count type redop time algbw busbw error time algbw busbw error # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 8388608 2097152 float sum 2973.5 2.82 2.82 0e+00 2975.6 2.82 2.82 0e+00 16777216 4194304 float sum 5920.5 2.83 2.83 0e+00 5917.2 2.84 2.84 0e+00 ...
结论: 至此,你的双 GPU 环境已完美配置,可以胜任任何需要多 GPU 通信的计算任务。