3、软件环境准备:操作系统要求、NVIDIA驱动安装、CUDA Toolkit安装、NVIDIA Fabric Manager配置
好,咱们接着往下走。上一章聊完了硬件选型和网络拓扑,这一章咱们得把地基打牢——软件环境。说白了,就是让你的机器能认得出GPU,能跑得起CUDA,还能让多卡之间通过NVSwitch/NVLink顺畅通信。
我个人习惯,在部署任何HPC/AI集群之前,先把操作系统、驱动、CUDA Toolkit和Fabric Manager这四样东西的版本关系理清楚。否则后面出了问题,排查起来会非常痛苦。我曾经在一个项目里,因为驱动版本和Fabric Manager不匹配,导致多节点通信时断时续,折腾了两天才发现是版本号差了一个小版本。嗯,这种坑,咱们尽量别踩。
核心原则:所有软件版本必须严格遵循NVIDIA官方兼容性矩阵。不要想当然地“用最新版”,稳定性和兼容性永远是第一位的。
3.1 操作系统要求
NVSHMEM对操作系统其实不算特别挑剔,但有几个硬性门槛。你想想看,它底层依赖CUDA和GDR(GPUDirect RDMA),所以内核和驱动必须给力。
- Linux发行版:我个人推荐Ubuntu 20.04 LTS或22.04 LTS,或者RHEL/CentOS 8.x/9.x。Ubuntu的社区支持好,遇到问题容易搜到答案;RHEL系则在企业级部署中更常见。
- 内核版本:建议使用发行版自带的内核,不要自己乱升级。NVSHMEM和NVIDIA驱动对内核版本有严格的依赖。我曾经见过有人把Ubuntu 20.04的内核从5.4升到5.15,结果NVIDIA驱动死活装不上。
- 文件系统:建议使用XFS或ext4。如果你要用Lustre或GPFS这类并行文件系统,记得确认它们对GDR的支持情况。
- 网络配置:所有节点的时间必须同步(NTP/Chrony),hostname和/etc/hosts要配好。这个看似简单,但很多新手会忽略。
小技巧:装系统时,记得把开发工具包(build-essential、kernel-devel、kernel-headers)一并装上。否则后面编译驱动时会缺头文件,很烦人。
3.2 NVIDIA驱动安装
驱动是GPU和操作系统之间的桥梁。这一步搞不定,后面全是白搭。
我建议用NVIDIA官方的.run文件来安装,而不是用系统自带的包管理器(比如apt或yum)。为什么?因为包管理器里的驱动版本往往比较旧,而且可能缺少一些关键补丁。
具体步骤大致如下:
- 卸载旧驱动:如果你之前装过NVIDIA驱动,先清理干净。可以用
nvidia-uninstall或者手动删除。 - 关闭图形界面:运行
sudo systemctl isolate multi-user.target或者sudo init 3,把显示管理器停掉。 - 安装驱动:给.run文件加执行权限,然后运行
sudo ./NVIDIA-Linux-x86_64-xxx.xx.run。安装过程中,它会问你是否要安装32位兼容库、是否要更新Xorg配置等,按需选择即可。 - 验证安装:运行
nvidia-smi,如果能正常显示GPU信息,说明驱动装好了。
注意:对于多节点多互连场景,驱动版本必须所有节点一致。我曾经因为一个节点用了535.129,另一个用了535.154,结果NVSHMEM初始化时报错“incompatible driver version”。
3.3 CUDA Toolkit安装
CUDA Toolkit是NVSHMEM的编译和运行基础。这里有个关键点:NVSHMEM对CUDA版本有明确要求,不是随便哪个版本都能用。建议查阅NVSHMEM官方文档,确认你用的CUDA版本在支持列表里。
我个人习惯用runfile方式安装CUDA Toolkit,因为它可以让你自由选择安装路径,方便多版本共存。不过对于生产环境,我建议用deb/rpm包,管理起来更省心。
安装步骤:
- 从NVIDIA官网下载对应版本的CUDA Toolkit runfile或deb包。
- 如果是runfile,运行
sudo sh cuda_xxx.xx.x_linux.run。注意,安装时不要勾选“Driver”选项(因为我们已经单独装了驱动),只选“CUDA Toolkit”和“CUDA Samples”。 - 配置环境变量。在
~/.bashrc或/etc/profile中添加:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
- 验证安装:运行
nvcc --version和nvidia-smi显示的CUDA版本应该一致。
避坑指南:我曾经遇到过 nvidia-smi 显示的CUDA版本和 nvcc 版本不一致的情况。这是因为 nvidia-smi 显示的是驱动支持的CUDA版本,而 nvcc 显示的是Toolkit版本。只要两者兼容,就没问题。但如果差距太大(比如驱动支持12.0,Toolkit是11.8),那就要小心了。
3.4 NVIDIA Fabric Manager配置
这一步是NVSHMEM多节点通信的关键。Fabric Manager(简称FM)负责管理NVSwitch和NVLink的拓扑和带宽分配。没有它,多节点间的GPU直连通信就无法正常工作。
FM的安装其实不复杂,但配置细节容易出错。我给大家梳理一下:
- 安装FM:FM通常包含在NVIDIA驱动包中,但需要单独安装。运行
sudo apt-get install nvidia-fabricmanager(Ubuntu)或sudo yum install nvidia-fabricmanager(RHEL)。 - 启动FM服务:
sudo systemctl enable nvidia-fabricmanager然后sudo systemctl start nvidia-fabricmanager。 - 验证FM状态:运行
sudo systemctl status nvidia-fabricmanager,确保服务是active (running)状态。 - 检查NVSwitch状态:使用
nvidia-smi nvlink -s查看NVLink链路状态,确保所有链路都是Active。
重要提醒:FM必须所有节点都安装并启动。而且,FM的版本必须和NVIDIA驱动版本严格匹配。我曾经在一个集群里,驱动是535.129,FM是535.154,结果NVSwitch死活不认。查了半天文档才发现,FM和驱动必须来自同一个发布包。
下面这张图展示了整个软件环境的依赖关系,你可以对照着检查自己的环境:
嗯,到这里,软件环境准备这块就差不多了。总结一下:操作系统选对版本,驱动用官方runfile装,CUDA Toolkit注意版本兼容,Fabric Manager必须所有节点一致。这几步走稳了,后面的NVSHMEM编译和运行就会顺畅很多。
个人经验:我建议你在装完所有软件后,写一个简单的脚本,把 nvidia-smi、nvcc --version、systemctl status nvidia-fabricmanager 的结果输出到同一个日志文件里。这样万一出问题,排查起来一目了然。