第2章:单机多卡环境搭建:NVIDIA驱动、CUDA Toolkit、cuDNN的安装与版本匹配

好,咱们直接进入正题。

单机多卡环境搭建,说白了就是给你的机器装上「显卡驱动 + CUDA + cuDNN」这三件套。这三样东西,就像电脑的电源、主板和CPU——缺一不可,而且版本必须匹配。我见过太多同学在这上面栽跟头,装了半天跑不起来,最后发现是驱动版本不对。

2.1 先搞清楚你的硬件

动手之前,先看看你手头有什么卡。

  • NVIDIA GPU 型号:用 nvidia-smi 查看(如果已经装了驱动)。没装驱动?那就看显卡上的标签,或者查系统设备管理器。
  • 操作系统:Ubuntu 20.04/22.04 最省心。Windows 也能用,但坑更多。
  • CUDA 计算能力:每个 GPU 都有个「计算能力」编号,比如 8.0、7.5。这个数字决定了你能装哪个版本的 CUDA Toolkit。

核心原则:驱动版本 ≥ CUDA Toolkit 版本 ≥ cuDNN 版本。向下兼容,但不向上兼容。

2.2 NVIDIA 驱动安装

我个人习惯用 runfile 方式安装驱动,干净利落。但新手我建议用包管理器,省心。

2.2.1 查看当前驱动

nvidia-smi

如果提示命令找不到,说明没装驱动。如果显示了 GPU 信息,恭喜你,省了一步。

2.2.2 安装驱动(Ubuntu 为例)

# 先卸载旧驱动(如果有)
sudo apt-get purge nvidia-*

# 添加 NVIDIA 官方驱动源
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

# 查看推荐版本
ubuntu-drivers devices

# 安装推荐版本
sudo apt-get install nvidia-driver-535

# 重启
sudo reboot

我的经验:别装最新版驱动。我踩过坑,535 版本在 RTX 4090 上跑 PyTorch 有内存泄漏。建议用 525 或 530 这种「次新」版本,稳定。

2.2.3 验证驱动

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 GeForce RTX 4090  Off  | 00000000:01:00.0  On |                  Off |
|  0%   35C    P8     8W / 450W |      0MiB / 24564MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

2.3 CUDA Toolkit 安装

驱动装好了,接下来装 CUDA Toolkit。注意:nvidia-smi 显示的 CUDA Version 是驱动支持的最高版本,不是实际安装的版本。

2.3.1 选择版本

我建议用 CUDA 11.8 或 12.1。为什么?PyTorch 官方对这两个版本支持最好。你想想看,如果装了个 CUDA 12.5,结果 PyTorch 还没适配,那不是白忙活?

2.3.2 安装步骤

# 下载 runfile(以 CUDA 12.1 为例)
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run

# 运行安装
sudo sh cuda_12.1.0_530.30.02_linux.run

# 安装时注意:
# - 不要勾选 Driver(驱动已经装好了)
# - 勾选 Toolkit、Samples、Documentation

警告:安装时千万别选「Install NVIDIA Driver」!否则会覆盖你之前装的驱动,版本可能不匹配。我曾经手滑选了一次,结果系统直接黑屏,折腾了一下午才恢复。

2.3.3 配置环境变量

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

2.3.4 验证

nvcc --version

输出应该类似:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Feb__7_19:32:13_PST_2023
Cuda compilation tools, release 12.1, V12.1.66

2.4 cuDNN 安装

cuDNN 是 NVIDIA 的深度学习加速库。说白了,就是让卷积、池化这些操作跑得更快。

2.4.1 下载 cuDNN

需要注册 NVIDIA 开发者账号才能下载。我一般用 tar 包安装,不用 deb 包——deb 包容易和系统库冲突。

# 下载 cuDNN 8.9.5 for CUDA 12.x
# 假设下载到了 ~/Downloads 目录

# 解压
tar -xzvf cudnn-linux-x86_64-8.9.5.30_cuda12-archive.tar.xz

# 复制到 CUDA 目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.1/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.1/lib64/

# 设置权限
sudo chmod a+r /usr/local/cuda-12.1/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-12.1/lib64/libcudnn*

2.4.2 验证 cuDNN

# 查看 cuDNN 版本
cat /usr/local/cuda-12.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

2.5 版本匹配速查表

这是我整理的一份常用版本匹配表,直接照着来就行:

GPU 型号 推荐驱动版本 推荐 CUDA 版本 推荐 cuDNN 版本
RTX 3090 / 4090 525.147.05 12.1 8.9.5
RTX 3080 / 4080 525.147.05 12.1 8.9.5
RTX 2080 Ti / 3070 470.223.02 11.8 8.6.0
V100 / A100 525.147.05 12.1 8.9.5
T4 / P100 470.223.02 11.8 8.6.0

2.6 验证多卡环境

装完三件套,跑个简单的测试看看多卡是否正常:

# 查看 GPU 数量和状态
nvidia-smi

# 用 Python 验证 CUDA 可用性
python3 -c "import torch; print(torch.cuda.device_count()); print(torch.cuda.is_available())"

如果输出 True 和 GPU 数量(比如 4),说明环境搭建成功。

避坑指南:我曾经遇到一个问题——torch.cuda.device_count() 返回 0,但 nvidia-smi 能看到 4 张卡。后来发现是 PyTorch 版本太老,不支持新驱动。升级 PyTorch 到 2.0+ 就解决了。

2.7 知识体系图

下面这张图帮你理清整个安装流程和依赖关系:

单机多卡环境搭建知识体系 NVIDIA GPU 硬件 NVIDIA 驱动 CUDA Toolkit cuDNN PyTorch / TensorFlow 等框架 版本匹配原则 驱动 ≥ CUDA ≥ cuDNN 向下兼容,不向上兼容 PyTorch 版本需匹配 CUDA nvidia-smi 显示最高支持版本 nvcc 显示实际安装版本 验证方法 nvidia-smi → 驱动 + GPU 状态 nvcc --version → CUDA 版本 cat cudnn_version.h → cuDNN 版本 torch.cuda.device_count() → 多卡

2.8 常见问题排查

  • nvidia-smi 报错:驱动没装好,或者内核模块没加载。试试 sudo modprobe nvidia。
  • nvcc 找不到:环境变量没配好。检查 ~/.bashrc 里的 PATH 设置。
  • cuDNN 版本不匹配:运行深度学习模型时报 libcudnn.so.8: cannot open shared object file。重新复制 cuDNN 库文件到正确的 CUDA 目录。
  • 多卡训练时某张卡不工作:检查 PCIe 连接,或者用 nvidia-smi topo -m 查看拓扑结构。

我的习惯:每次装完环境,我都会写一个简单的测试脚本,跑一遍 torch.cuda.is_available() 和一个小模型训练。确保所有卡都能正常工作,再开始正式干活。这一步能省下后面排查问题的无数时间。

好了,环境搭好了,接下来就可以开始真正的多卡训练了。记住:版本匹配是基础,验证测试是关键。别急着跑大模型,先把基础打牢。

可可精品资料库