3. 操作系统与驱动:Ubuntu Server 22.04 LTS安装、NVIDIA驱动安装与验证、CUDA Toolkit与cuDNN配置
这一章,我们聊聊AI基础设施最底层的“地基”。说白了,就是怎么把一台裸金属服务器,变成一台能跑大模型训练的机器。我见过太多团队,算法模型写得漂亮,结果底层环境配了一周,最后发现驱动版本不对,CUDA不兼容,白白浪费了宝贵的GPU资源。
嗯,咱们一步步来。从装系统开始,到驱动验证,再到CUDA和cuDNN的完整配置。每一步我都会把我在生产环境里踩过的坑,直接告诉你。
3.1 Ubuntu Server 22.04 LTS 安装要点
为什么选22.04 LTS?因为它是目前NVIDIA官方文档里支持最全、生态最成熟的长期支持版本。我个人习惯,生产环境绝不追新,稳定压倒一切。
安装过程中,有几个关键点你一定要注意:
- 磁盘分区: 建议用LVM逻辑卷管理。我遇到过磁盘空间不够,LVM可以动态扩展,救过我的命。
- 网络配置: 务必设置静态IP。DHCP分配的IP一旦变化,你的SSH连接就断了,远程机房可没人帮你插显示器。
- SSH服务: 安装时勾选OpenSSH server。这是你后续所有操作的入口。
- 系统更新: 装完后先跑一遍
sudo apt update && sudo apt upgrade -y。别急着装驱动,先把系统补丁打全。
3.2 NVIDIA驱动安装与验证
驱动安装,是很多人翻车的重灾区。我曾经在一台新到的A100服务器上,因为驱动版本不对,折腾了整整一个下午。后来我总结出一套标准流程,再也没出过问题。
3.2.1 确认GPU型号
先看看你手里是什么卡:
lspci | grep -i nvidia
如果输出为空,先检查硬件是否插好,或者BIOS里是否禁用了独立显卡。嗯,这种情况我遇到过两次,都是新机器BIOS默认关闭了PCIe插槽。
3.2.2 卸载旧驱动(如果有)
如果你之前装过NVIDIA驱动,一定要先清理干净:
sudo apt purge nvidia-* -y
sudo apt autoremove -y
这一步不能省。残留的驱动文件会导致新驱动安装失败,或者装上了但模块加载冲突。
3.2.3 安装驱动
我推荐两种方式,你根据场景选:
| 方式 | 命令 | 适用场景 |
|---|---|---|
| Ubuntu官方源 | sudo apt install nvidia-driver-535 |
快速部署,兼容性好 |
| NVIDIA官方runfile | 从官网下载.run文件手动安装 | 需要特定版本或自定义参数 |
我个人习惯用Ubuntu官方源。简单、稳定,而且apt会帮你处理内核模块的依赖关系。你想想看,如果手动装.run文件,每次内核更新后都得重新编译模块,多麻烦。
Ctrl+Alt+F2 切换到纯文本终端,然后 sudo systemctl stop gdm3 或 sudo systemctl stop lightdm。
3.2.4 验证驱动
装完重启,然后跑这个命令:
nvidia-smi
如果看到类似下面的输出,说明驱动装好了:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.05 Driver Version: 535.86.05 CUDA Version: 12.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVIDIA A100 80GB On | 00000000:00:04.0 Off | 0 |
| 0% 35C P0 56W / 300W | 0MiB / 81920MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
这里有个细节:CUDA Version: 12.2 表示当前驱动支持的最高CUDA版本,不是你实际安装的CUDA版本。很多人在这里搞混,以为驱动装完CUDA就自动好了——不是的,驱动和CUDA Toolkit是两回事。
3.3 CUDA Toolkit 与 cuDNN 配置
驱动装好了,GPU能认了,但你的深度学习框架(PyTorch、TensorFlow)还需要CUDA Toolkit和cuDNN才能调用GPU做计算。说白了,驱动是让系统认识GPU,CUDA是让程序能用GPU。
3.3.1 安装CUDA Toolkit
我建议用NVIDIA官方的runfile安装,这样你可以精确控制安装路径。用apt装也行,但版本选择没那么灵活。
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
sudo sh cuda_12.2.0_535.54.03_linux.run
安装时注意:
- 不要勾选“Driver”,因为我们已经装过了。
- 选择安装路径,默认是
/usr/local/cuda-12.2。
装完后,配置环境变量:
echo 'export PATH=/usr/local/cuda-12.2/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
验证一下:
nvcc --version
如果看到CUDA版本号,说明安装成功。
3.3.2 安装cuDNN
cuDNN是NVIDIA针对深度神经网络的加速库。没有它,你的卷积、池化、LSTM等操作就跑不到GPU的极致性能。
安装步骤:
- 去NVIDIA官网下载cuDNN(需要注册账号)。选择与你的CUDA版本匹配的cuDNN版本。
- 解压并复制文件到CUDA目录:
tar -xzvf cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.2/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.2/lib64/
sudo chmod a+r /usr/local/cuda-12.2/include/cudnn*.h /usr/local/cuda-12.2/lib64/libcudnn*
验证cuDNN版本:
cat /usr/local/cuda-12.2/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
3.4 知识体系总览
下面这张图,把整个环境搭建的流程和依赖关系梳理清楚了。你照着这个逻辑走,不会乱。
3.5 验证全链路
所有东西都装完后,我习惯跑一个完整的验证脚本,确保整个链路是通的:
# 1. 验证驱动
nvidia-smi
# 2. 验证CUDA
nvcc --version
# 3. 验证cuDNN
cat /usr/local/cuda-12.2/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 4. 用Python验证GPU可用性(需要先装PyTorch)
python3 -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
如果最后一步输出 True 和你的GPU型号,恭喜你,环境搭建成功了。
嗯,这一章的内容就到这里。环境搭好了,下一层就是存储和网络了。不过那是后面的事,先把眼前的基础打牢。