原始步骤(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 → 视需要
三个已过时:
  1. kernel-devel 必须和运行内核版本严格一致;错版会导致 make 编译失败。
  2. 开源 nouveau 黑名单 + dracut 重建 initramfs 是 systemd-boot 时代方案。EFI + GRUB2 + BLS 引导的现代发行版不再需要。
  3. 闭源 .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 会话。

使用准则

  1. 优先用发行版仓库;.run 文件仅在必须用最新驱动时使用。
  2. Secure Boot 必须配合 MOK 流程;禁用 Secure Boot 是最简但放弃安全性。
  3. 不要在生产机器用 init 3 + 手动 .run 的老流程——它会让你错过内核升级时的驱动自动重建。
  4. CUDA 需求走容器方案;宿主机只装驱动 + nvidia-container-toolkit。
  5. GTX 970 是 Maxwell 架构(2014),最大支持 CUDA 11.x;新 PyTorch 默认 CUDA 12 已经不兼容,需强制 cuda<12。
参考资料