在 CentOS 或 Ubuntu 上部署深度学习环境,核心痛点通常不在框架本身(PyTorch/TensorFlow 安装很简单),而在 NVIDIA 驱动、CUDA Toolkit 和 cuDNN 的版本匹配与依赖管理。
很多新手容易踩的坑是:盲目下载最新版的 NVIDIA 驱动,结果发现内核版本不兼容;或者 CUDA 版本过高,导致 PyTorch 预编译包不支持。
下面我以生产环境最稳妥的方式,分别梳理 Ubuntu 和 CentOS 的标准操作流程。
一、 通用前置检查(必做)
在安装任何东西之前,先确认你的硬件和内核状态。
-
确认显卡型号
lspci | grep -i nvidia -
确认当前内核版本
uname -r -
禁用 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,若无输出则成功。
- 创建文件
-
安装编译工具(如果缺失)
# 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 版本)
- 从 NVIDIA 官网下载对应显卡的
.run驱动文件。 - 停止图形界面服务(如果是桌面版):
sudo systemctl isolate multi-user.target - 运行安装:
sudo sh NVIDIA-Linux-x86_64-xxx.xx.run- 询问是否安装 32-bit 库?Yes。
- 询问是否使用 DKMS?Yes(这样内核升级时驱动会自动重新编译,非常有用)。
- 询问是否修改 xorg.conf?No(服务器通常不需要)。
- 恢复图形界面:
sudo systemctl start graphical.target
2. 安装 CUDA Toolkit
CentOS 下建议使用 NVIDIA 提供的 .run 文件安装,因为它自带了独立于系统的 CUDA 库,不会污染系统库。
- 下载对应版本的 CUDA
.run文件。 - 安装:
sudo sh cuda_<version>_linux.run- 关键步骤: 在安装选项菜单中,取消勾选 Driver Installation(因为驱动已装好),只保留 CUDA Toolkit、Samples 等。
- 配置环境变量(同上,添加到
~/.bashrc)。
3. 安装 cuDNN
同 Ubuntu,从官网下载对应 CUDA 版本的 cuDNN,解压后复制文件到 /usr/local/cuda 目录下。
四、 深度学习框架安装(PyTorch 为例)
切记:不要直接用 pip install torch! 这会安装 CPU 版本或默认 CUDA 版本,极易出错。
正确做法:
- 前往 PyTorch 官网。
- 选择你的配置:
- Compute Platform: CUDA (选择你安装的版本,如 11.8 或 12.1)
- Package: Pip
- Language: Python
- OS: Linux
- 复制生成的命令并执行。
例如,如果你安装了 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,确保输出正常。
五、 常见避坑指南
-
内核更新导致驱动失效
- 现象:重启后
nvidia-smi报错,或黑屏。 - 原因:CentOS/Ubuntu 更新了内核,但 NVIDIA 驱动没有随之编译。
- 解决:如果使用 Runfile 安装,务必开启 DKMS。如果使用
apt/yum安装,通常会自动处理。若仍失败,尝试重装驱动:sudo apt reinstall nvidia-driver-xxx或重新运行.run文件。
- 现象:重启后
-
CUDA 版本与驱动版本不匹配
- 原则:驱动版本必须 >= CUDA 版本所需的最低驱动版本。
- 查询方法:在 NVIDIA 官网 CUDA 页面查看 "Driver Version Requirements"。例如,CUDA 11.8 要求驱动至少 470.82.01。如果你的驱动是 450,即使安装了 CUDA 11.8,也无法调用 GPU。
-
多版本 CUDA 共存
- 不同项目需要不同 CUDA 版本时,可以安装多个 CUDA(如
/usr/local/cuda-11.7,/usr/local/cuda-12.1)。 - 通过切换
~/.bashrc中的PATH和LD_LIBRARY_PATH来指定当前使用的版本。 - 或者在 Python 中使用虚拟环境,并通过
conda安装特定版本的 PyTorch,Conda 会自带匹配的 CUDA 运行时(无需系统级 CUDA 也能跑,但性能略逊于原生)。
- 不同项目需要不同 CUDA 版本时,可以安装多个 CUDA(如
-
云服务器注意事项
- AWS/GCP/Azure 等云厂商通常提供带有预装驱动和 CUDA 的 AMI/镜像。优先使用官方镜像,自己从零安装容易遇到权限、网络或内核模块加载问题。
- 如果是自建机房服务器,确保 BIOS 中开启了 IOMMU(虚拟化相关),某些高级功能可能需要。
总结:驱动先行,CUDA 紧随,框架最后,版本对齐。 只要保证 nvidia-smi 输出的 Driver Version 和 CUDA Version 与你安装的深度学习框架所需版本兼容,一切就能顺利运行。
云技术博客