原始步骤(390.67 / CentOS 7)
1. 准备编译环境
yum -y install gcc kernel-devel kernel-headers
2. 屏蔽开源 nouveau 驱动
编辑 /usr/lib/modprobe.d/dist-blacklist.conf:
# 注释掉 blacklist nvidiafb
# blacklist nvidiafb
blacklist nouveau
options nouveau modeset=0
3. 重建 initramfs
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)
4. 进入 init 3 安装
chmod +x NVIDIA-Linux-x86_64-390.67.run
./NVIDIA-Linux-x86_64-390.67.run
安装过程中会提示:
- 是否接受 License → yes
- 是否安装 32 位兼容库 → 视需要
- 是否自动配置 X → 视需要
三个已过时:
kernel-devel必须和运行内核版本严格一致;错版会导致make编译失败。- 开源
nouveau黑名单 +dracut重建 initramfs 是 systemd-boot 时代方案。EFI + GRUB2 + BLS 引导的现代发行版不再需要。 - 闭源
.run安装器在 Secure Boot 启用时无法直接安装内核模块,需走 MOK 签名流程。
现代替代方案
方案 1:发行版仓库(推荐)
Ubuntu:
# 添加官方 PPA(含最新驱动)
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo ubuntu-drivers autoinstall # 自动选最新 stable 驱动
sudo reboot
Fedora:
sudo dnf install akmod-nvidia # RPM Fusion
sudo reboot
优势:与内核升级自动同步;Secure Boot 由发行版签名处理;不用自己编译。
方案 2:Secure Boot 下的 .run 安装器
如果必须用官方 .run 文件:
# 1. 生成 MOK 密钥
sudo openssl req -new -x509 -newkey rsa:2048 -days 36500 \
-nodes -out /mok/MOK.priv -outform DER \
-keyout /mok/MOK.priv \
-subj "/CN=My MOK/"
sudo openssl x509 -in /mok/MOK.pem -outform DER -out /mok/MOK.der
# 2. 导入 MOK
sudo mokutil --import /mok/MOK.der
# 重启进入 MOK 管理界面 → Enroll MOK → 选择 /mok/MOK.der → 输入密码
# 3. 安装驱动(启用模块签名)
sudo ./NVIDIA-Linux-x86_64-535.183.06.run --module-signing-key=/mok/MOK.priv \
--module-signing-hash=sha256
sudo reboot
方案 3:容器化(CUDA 场景)
如果只为跑 CUDA / PyTorch,宿主机驱动只用 nvidia-driver,CUDA 跑在容器里:
# 安装 nvidia-container-toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update && sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 跑容器
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
这是 2025 年最稳的方案:宿主机驱动 + 容器内 CUDA / 框架环境,升级互不影响。
验证安装
nvidia-smi
期望输出:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.06 Driver Version: 535.183.06 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. |
|=========================================+======================+==================|
| 0 NVIDIA GeForce GTX 970 Off | 00000000:01:00.0 Off | N/A |
| 30% 38C P0 N/A / 200W | 123MiB / 4096MiB | 0% Default |
+----------------------------------------+----------------------+------------------+
关键看:
- Driver Version:≥ 535(2024 年新硬件推荐)
- CUDA Version:与目标框架匹配(如 PyTorch 2.x 需要 CUDA 11.8 / 12.x)
- Memory-Usage:日常应 < 30%,超过 80% 表示显存不足
常见问题
Q1: 安装后启动黑屏
- 检查
/var/log/Xorg.0.log - 检查
journalctl -b -p err - 如果 Secure Boot 未签名,驱动模块未加载 → 进 MOK 管理界面 enroll
Q2: 黑屏但 Ctrl+Alt+F2 可进 TTY
sudo systemctl set-default multi-user.target
sudo reboot
重启后进纯字符界面排查。
Q3: Wayland 下 NVIDIA 性能差
Wayland 下 NVIDIA 需要 enable_nvidia_uvm + GBM 后端。现代发行版(Fedora 38+ / Ubuntu 24.04+)默认配置已支持,老版本需要在登录管理器选择 Xorg 会话。
使用准则
- 优先用发行版仓库;.run 文件仅在必须用最新驱动时使用。
- Secure Boot 必须配合 MOK 流程;禁用 Secure Boot 是最简但放弃安全性。
- 不要在生产机器用
init 3+ 手动.run的老流程——它会让你错过内核升级时的驱动自动重建。 - CUDA 需求走容器方案;宿主机只装驱动 +
nvidia-container-toolkit。 - GTX 970 是 Maxwell 架构(2014),最大支持 CUDA 11.x;新 PyTorch 默认 CUDA 12 已经不兼容,需强制
cuda<12。