努力
加油

CentOS或Ubuntu系统下如何安装NVIDIA驱动和深度学习框架?

在 CentOS 或 Ubuntu 上部署深度学习环境,核心痛点通常不在框架本身(PyTorch/TensorFlow 安装很简单),而在 NVIDIA 驱动、CUDA Toolkit 和 cuDNN 的版本匹配与依赖管理。

很多新手容易踩的坑是:盲目下载最新版的 NVIDIA 驱动,结果发现内核版本不兼容;或者 CUDA 版本过高,导致 PyTorch 预编译包不支持。

下面我以生产环境最稳妥的方式,分别梳理 Ubuntu 和 CentOS 的标准操作流程。


一、 通用前置检查(必做)

在安装任何东西之前,先确认你的硬件和内核状态。

  1. 确认显卡型号

    lspci | grep -i nvidia
  2. 确认当前内核版本

    uname -r
  3. 禁用 Nouveau 开源驱动(仅 CentOS/RHEL 系列重点注意)
    Ubuntu 默认可能已经处理得较好,但 CentOS 必须手动禁用,否则安装官方驱动时会冲突。

    • 创建文件 /etc/modprobe.d/blacklist-nouveau.conf,内容如下:
      blacklist nouveau
      options nouveau modeset=0
    • 重建 initramfs:
      sudo dracut --force
    • 重启系统:sudo reboot
    • 验证是否禁用成功:lsmod | grep nouveau,若无输出则成功。
  4. 安装编译工具(如果缺失)

    # Ubuntu
    sudo apt update && sudo apt install build-essential linux-headers-$(uname -r)
    
    # CentOS
    sudo yum groupinstall "Development Tools"
    sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

二、 Ubuntu 系统操作指南(推荐)

Ubuntu 对 NVIDIA 支持最好,推荐使用 apt 仓库方式,避免手动 .run 文件带来的路径混乱问题。

1. 安装 NVIDIA 驱动

不要直接去官网下 .run 包,除非你有特殊需求。使用 PPA 源更稳定。

# 添加 graphics-drivers PPA
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

# 查看推荐的驱动版本(例如显示 nvidia-driver-535)
ubuntu-drivers devices

# 安装推荐版本(以 535 为例)
sudo apt install nvidia-driver-535

# 重启
sudo reboot

验证: nvidia-smi 能正常输出即可。

2. 安装 CUDA Toolkit

关键点: PyTorch/TF 通常只支持特定版本的 CUDA。请根据你计划安装的深度学习框架版本,选择对应的 CUDA 版本。

  • PyTorch 2.0+ 通常推荐 CUDA 11.8 或 12.1。
  • 旧版项目可能需要 CUDA 10.2 或 11.3。

这里以 CUDA 11.8 为例(目前兼容性最广):

# 访问 NVIDIA CUDA 官网获取具体链接,或使用以下 wget 方式(需替换为最新稳定版链接)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

# 执行安装(注意:安装过程中会问你是否安装驱动,选 NO,因为我们已经装了)
sudo sh cuda_11.8.0_520.61.05_linux.run

配置环境变量:
编辑 ~/.bashrc,添加:

export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

生效:source ~/.bashrc

验证:nvcc -V 应显示 CUDA 11.8。

3. 安装 cuDNN

NVIDIA 开发者账号登录后,下载对应 CUDA 版本的 cuDNN Library for Linux (x86_64)。

解压后,将头文件和库文件复制到 CUDA 目录:

tar -xzvf cudnn-linux-x86_64-8.x.x_x-cuda11.x-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*

三、 CentOS 7/8 系统操作指南

CentOS 相对麻烦,因为 yum 里的驱动版本往往较老,且内核更新可能导致驱动失效。建议采用 NVIDIA 官方 RPM/Runfile 方式,但需注意内核头文件匹配。

1. 安装 NVIDIA 驱动

方法 A:使用 ELRepo 源(推荐,简单)

# 导入 ELRepo GPG key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# 安装 ELRepo repo
rpm -Uvh http://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

# 安装最新专有驱动
sudo yum --enablerepo=elrepo-kernel install kmod-nvidia

方法 B:手动安装 Runfile(更灵活,适合定制 CUDA 版本)

  1. 从 NVIDIA 官网下载对应显卡的 .run 驱动文件。
  2. 停止图形界面服务(如果是桌面版):
    sudo systemctl isolate multi-user.target
  3. 运行安装:
    sudo sh NVIDIA-Linux-x86_64-xxx.xx.run
    • 询问是否安装 32-bit 库?Yes。
    • 询问是否使用 DKMS?Yes(这样内核升级时驱动会自动重新编译,非常有用)。
    • 询问是否修改 xorg.conf?No(服务器通常不需要)。
  4. 恢复图形界面:
    sudo systemctl start graphical.target

2. 安装 CUDA Toolkit

CentOS 下建议使用 NVIDIA 提供的 .run 文件安装,因为它自带了独立于系统的 CUDA 库,不会污染系统库。

  1. 下载对应版本的 CUDA .run 文件。
  2. 安装:
    sudo sh cuda_<version>_linux.run
    • 关键步骤: 在安装选项菜单中,取消勾选 Driver Installation(因为驱动已装好),只保留 CUDA Toolkit、Samples 等。
  3. 配置环境变量(同上,添加到 ~/.bashrc)。

3. 安装 cuDNN

同 Ubuntu,从官网下载对应 CUDA 版本的 cuDNN,解压后复制文件到 /usr/local/cuda 目录下。


四、 深度学习框架安装(PyTorch 为例)

切记:不要直接用 pip install torch! 这会安装 CPU 版本或默认 CUDA 版本,极易出错。

正确做法:

  1. 前往 PyTorch 官网。
  2. 选择你的配置:
    • Compute Platform: CUDA (选择你安装的版本,如 11.8 或 12.1)
    • Package: Pip
    • Language: Python
    • OS: Linux
  3. 复制生成的命令并执行。

例如,如果你安装了 CUDA 11.8:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

验证环境:

创建一个测试脚本 test_cuda.py:

import torch
print("PyTorch version:", torch.__version__)
print("CUDA available:", torch.cuda.is_available())
if torch.cuda.is_available():
    print("Device count:", torch.cuda.device_count())
    print("Current device:", torch.cuda.current_device())
    print("Device name:", torch.cuda.get_device_name(0))
    print("CUDA capability:", torch.cuda.get_device_capability(0))
else:
    print("CUDA is NOT available.")

运行 python test_cuda.py,确保输出正常。


五、 常见避坑指南

  1. 内核更新导致驱动失效

    • 现象:重启后 nvidia-smi 报错,或黑屏。
    • 原因:CentOS/Ubuntu 更新了内核,但 NVIDIA 驱动没有随之编译。
    • 解决:如果使用 Runfile 安装,务必开启 DKMS。如果使用 apt/yum 安装,通常会自动处理。若仍失败,尝试重装驱动:sudo apt reinstall nvidia-driver-xxx 或重新运行 .run 文件。
  2. CUDA 版本与驱动版本不匹配

    • 原则:驱动版本必须 >= CUDA 版本所需的最低驱动版本。
    • 查询方法:在 NVIDIA 官网 CUDA 页面查看 "Driver Version Requirements"。例如,CUDA 11.8 要求驱动至少 470.82.01。如果你的驱动是 450,即使安装了 CUDA 11.8,也无法调用 GPU。
  3. 多版本 CUDA 共存

    • 不同项目需要不同 CUDA 版本时,可以安装多个 CUDA(如 /usr/local/cuda-11.7, /usr/local/cuda-12.1)。
    • 通过切换 ~/.bashrc 中的 PATH 和 LD_LIBRARY_PATH 来指定当前使用的版本。
    • 或者在 Python 中使用虚拟环境,并通过 conda 安装特定版本的 PyTorch,Conda 会自带匹配的 CUDA 运行时(无需系统级 CUDA 也能跑,但性能略逊于原生)。
  4. 云服务器注意事项

    • AWS/GCP/Azure 等云厂商通常提供带有预装驱动和 CUDA 的 AMI/镜像。优先使用官方镜像,自己从零安装容易遇到权限、网络或内核模块加载问题。
    • 如果是自建机房服务器,确保 BIOS 中开启了 IOMMU(虚拟化相关),某些高级功能可能需要。

总结:驱动先行,CUDA 紧随,框架最后,版本对齐。 只要保证 nvidia-smi 输出的 Driver Version 和 CUDA Version 与你安装的深度学习框架所需版本兼容,一切就能顺利运行。