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。这是标配,没有它你没法远程管理。
3.2 NVIDIA驱动安装与验证
驱动安装,这是最容易出问题的一步。我建议用官方推荐的runfile方式安装,而不是用系统自带的apt源。为什么?因为apt源里的驱动版本往往比较老,而且容易和内核版本冲突。
具体步骤:
- 先禁用nouveau开源驱动:
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf update-initramfs -u reboot - 下载对应显卡的驱动:
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run - 安装驱动:
chmod +x NVIDIA-Linux-x86_64-550.54.14.run ./NVIDIA-Linux-x86_64-550.54.14.run
验证驱动是否安装成功:
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集群的基石,基础打好了,后面的事情才能顺利。记住:先装系统,再装驱动,最后装CUDA Toolkit。顺序不能乱,否则会出各种奇怪的问题。