3. 操作系统与驱动

好,咱们进入第三章。这一章,说白了就是给GPU集群打好地基。你想想看,再好的显卡,没有合适的操作系统和驱动,它就是一块废铁。我见过不少新手,上来就急着装CUDA,结果系统崩了,驱动冲突了,折腾一整天。嗯,咱们一步步来,稳扎稳打。

3.1 Ubuntu Server 22.04 LTS 安装要点

我个人习惯,生产环境首选Ubuntu Server 22.04 LTS。为什么?因为它对NVIDIA生态的支持最成熟,驱动兼容性最好。我曾经在CentOS上踩过坑,驱动死活装不上,后来切到Ubuntu,十分钟搞定。

安装时,有几个关键点要注意:

  • 磁盘分区:建议用LVM逻辑卷管理。我习惯给根分区留100GB,剩下的全给数据盘。为什么?因为CUDA Toolkit和模型数据都很大,根分区满了会很麻烦。
  • 网络配置:服务器一定要配静态IP。我见过有人用DHCP,结果重启后IP变了,整个集群连不上,那叫一个尴尬。
  • SSH服务:安装时勾选OpenSSH server。这是标配,没有它你没法远程管理。
我的小技巧:安装时选择最小化安装,不要装桌面环境。GPU服务器不需要图形界面,装了反而占资源。

3.2 NVIDIA驱动安装与验证

驱动安装,这是最容易出问题的一步。我建议用官方推荐的runfile方式安装,而不是用系统自带的apt源。为什么?因为apt源里的驱动版本往往比较老,而且容易和内核版本冲突。

具体步骤:

  1. 先禁用nouveau开源驱动:
    echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
    update-initramfs -u
    reboot
  2. 下载对应显卡的驱动:
    wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run
  3. 安装驱动:
    chmod +x NVIDIA-Linux-x86_64-550.54.14.run
    ./NVIDIA-Linux-x86_64-550.54.14.run
注意:安装过程中会提示是否安装32位兼容库,建议选是。有些老的应用会用到。另外,安装时一定要关闭X服务,否则会报错。

验证驱动是否安装成功:

nvidia-smi

如果能看到显卡信息,那就说明驱动装好了。我曾经遇到过装完驱动后,nvidia-smi报错说找不到设备。后来发现是UEFI安全启动没关,导致驱动模块被阻止加载。嗯,这个坑大家要注意。

3.3 CUDA Toolkit 安装

驱动装好了,接下来就是CUDA Toolkit。这里有个误区:很多人以为装了驱动就等于装了CUDA。其实不是。驱动是底层,CUDA是上层开发库。两者缺一不可。

安装CUDA Toolkit,我推荐用runfile方式:

wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
sudo sh cuda_12.4.0_550.54.14_linux.run

安装时注意:

  • 不要勾选Driver选项(因为我们已经装过驱动了)
  • 只勾选CUDA Toolkit和CUDA Samples
  • 安装路径建议用默认的/usr/local/cuda-12.4

安装完成后,配置环境变量:

echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

验证CUDA是否安装成功:

nvcc --version

如果能显示版本号,那就OK了。我习惯再跑一下deviceQuery示例程序:

cd /usr/local/cuda-12.4/samples/1_Utilities/deviceQuery
make
./deviceQuery

看到Result = PASS,说明CUDA环境完全正常。

3.4 nvidia-smi 详解

nvidia-smi是咱们运维GPU集群最常用的工具,没有之一。我每天上班第一件事就是跑一下nvidia-smi,看看集群状态。

先看一个典型的输出:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.14    Driver Version: 550.54.14    CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA A100 80GB    On   | 00000000:00:04.0 Off |                    0 |
| 30%   42C    P0    78W / 300W |   3200MiB / 81920MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+

我来拆解一下关键字段:

字段 含义 我的经验
GPU GPU编号和型号 多卡集群里,编号从0开始
Fan 风扇转速百分比 如果长期100%,说明散热有问题
Temp 当前温度(摄氏度) A100的安全温度是85°C以下,超过就要注意了
Perf 性能状态(P0-P12) P0是最高性能,P12是省电模式
Pwr:Usage/Cap 当前功耗/最大功耗 如果长期接近Cap,说明负载很重
Memory-Usage 显存使用量/总量 显存爆了会OOM,进程会被kill
GPU-Util GPU计算单元利用率 0%说明没跑任务,100%说明满载
实用命令:
nvidia-smi -l 1 # 每秒刷新一次,实时监控
nvidia-smi --query-gpu=index,temperature.gpu,utilization.gpu --format=csv # 输出CSV格式,方便脚本处理

我曾经遇到过一个情况:某台服务器的GPU利用率一直上不去,只有30%左右。用nvidia-smi一看,发现Perf状态是P8,说明显卡进入了省电模式。后来查出来是电源管理策略的问题,调整一下就好了。

知识体系总览

下面这张图,是我自己总结的本章知识体系。你可以把它当作一个检查清单:

GPU集群部署基础:操作系统与驱动 Ubuntu Server 22.04 NVIDIA驱动 CUDA Toolkit LVM分区 静态IP SSH服务 禁用nouveau runfile安装 nvidia-smi验证 runfile安装 环境变量 nvcc验证 核心运维工具:nvidia-smi 实时监控 · 故障排查 · 性能分析 温度 (Temp) 显存 (Memory) 功耗 (Power) 利用率 (Util) 安装顺序:Ubuntu → 驱动 → CUDA Toolkit → nvidia-smi验证

嗯,这一章的内容就这些。操作系统和驱动是GPU集群的基石,基础打好了,后面的事情才能顺利。记住:先装系统,再装驱动,最后装CUDA Toolkit。顺序不能乱,否则会出各种奇怪的问题。