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)。为什么?因为包管理器里的驱动版本往往比较旧,而且可能缺少一些关键补丁。

具体步骤大致如下:

  1. 卸载旧驱动:如果你之前装过NVIDIA驱动,先清理干净。可以用 nvidia-uninstall 或者手动删除。
  2. 关闭图形界面:运行 sudo systemctl isolate multi-user.target 或者 sudo init 3,把显示管理器停掉。
  3. 安装驱动:给.run文件加执行权限,然后运行 sudo ./NVIDIA-Linux-x86_64-xxx.xx.run。安装过程中,它会问你是否要安装32位兼容库、是否要更新Xorg配置等,按需选择即可。
  4. 验证安装:运行 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包,管理起来更省心。

安装步骤:

  1. 从NVIDIA官网下载对应版本的CUDA Toolkit runfile或deb包。
  2. 如果是runfile,运行 sudo sh cuda_xxx.xx.x_linux.run。注意,安装时不要勾选“Driver”选项(因为我们已经单独装了驱动),只选“CUDA Toolkit”和“CUDA Samples”。
  3. 配置环境变量。在 ~/.bashrc/etc/profile 中添加:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
  1. 验证安装:运行 nvcc --versionnvidia-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的安装其实不复杂,但配置细节容易出错。我给大家梳理一下:

  1. 安装FM:FM通常包含在NVIDIA驱动包中,但需要单独安装。运行 sudo apt-get install nvidia-fabricmanager(Ubuntu)或 sudo yum install nvidia-fabricmanager(RHEL)。
  2. 启动FM服务:sudo systemctl enable nvidia-fabricmanager 然后 sudo systemctl start nvidia-fabricmanager
  3. 验证FM状态:运行 sudo systemctl status nvidia-fabricmanager,确保服务是active (running)状态。
  4. 检查NVSwitch状态:使用 nvidia-smi nvlink -s 查看NVLink链路状态,确保所有链路都是Active。

重要提醒:FM必须所有节点都安装并启动。而且,FM的版本必须和NVIDIA驱动版本严格匹配。我曾经在一个集群里,驱动是535.129,FM是535.154,结果NVSwitch死活不认。查了半天文档才发现,FM和驱动必须来自同一个发布包。

下面这张图展示了整个软件环境的依赖关系,你可以对照着检查自己的环境:

NVSHMEM软件环境依赖关系 NVSHMEM CUDA Toolkit Fabric Manager NVIDIA Driver 操作系统 (Linux Kernel) 依赖关系:上层依赖下层,同层之间无直接依赖 版本要求:FM版本必须与Driver版本严格匹配

嗯,到这里,软件环境准备这块就差不多了。总结一下:操作系统选对版本,驱动用官方runfile装,CUDA Toolkit注意版本兼容,Fabric Manager必须所有节点一致。这几步走稳了,后面的NVSHMEM编译和运行就会顺畅很多。

个人经验:我建议你在装完所有软件后,写一个简单的脚本,把 nvidia-sminvcc --versionsystemctl status nvidia-fabricmanager 的结果输出到同一个日志文件里。这样万一出问题,排查起来一目了然。


专注资料整理