GPU 软件

在 Ubuntu 上查看 CUDA 版本和 NVIDIA 驱动

正确解读 nvidia-smi 的输出,找到您实际用于编译的工具包,并在不改动驱动的前提下加装另一个 CUDA 版本。

本页内容
  1. 在 nvidia-smi 中读取驱动和 CUDA 版本
  2. 用 nvcc 检查 CUDA 工具包
  3. 驱动与工具包版本如何对应
  4. 在 Ubuntu 24.04 上安装另一个 CUDA 工具包
  5. 启用持久模式
  6. 常见错误排查

要在 GPU 服务器上查看 NVIDIA 驱动和 CUDA 版本,需要用到两条命令,因为它们回答的是不同的问题:nvidia-smi 报告的是驱动,nvcc 报告的是您用于编译的 CUDA 工具包。本页将逐一说明这两条命令、两者的版本必须如何对应、如何在 Ubuntu 24.04 或 22.04 上并行安装另一个 CUDA 工具包,以及如何解决您最可能遇到的错误。

在 nvidia-smi 中读取驱动和 CUDA 版本

nvidia-smi
nvidia-smi --query-gpu=index,name,driver_version,memory.total --format=csv
cat /proc/driver/nvidia/version

nvidia-smi 的表头显示三个版本号:

  • NVIDIA-SMI 是该工具本身的版本,通常与驱动版本相同。
  • Driver Version 是已安装的驱动版本。
  • CUDA Version 是该驱动支持的最新 CUDA 版本。它并不表示已安装该版本的工具包。

/proc/driver/nvidia/version 显示的是实际加载的内核模块。如果它与已安装的驱动软件包不一致(例如在升级之后),说明还需要重启一次。

用 nvcc 检查 CUDA 工具包

nvcc --version
ls -d /usr/local/cuda*

“Cuda compilation tools, release X.Y”这一行给出的就是工具包版本。/usr/local/cuda 指向默认工具包,其他版本位于 /usr/local/cuda-X.Y。如果找不到 nvcc,请把工具包添加到您的环境中(将以下几行追加到 ~/.bashrc 即可长期保留):

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

各类框架往往不会使用这个工具包。PyTorch 的 wheel 包和大多数容器都自带 CUDA 库,只需要足够新的驱动,PyTorch 与 vLLM 指南对此有具体说明。用以下命令查看 PyTorch 识别到的信息:

python3 -c "import torch; print(torch.__version__, torch.version.cuda,
  torch.cuda.is_available())"

驱动与工具包版本如何对应

  • 驱动至少要和代码一样新。nvidia-smi 显示的 CUDA Version 应等于或高于您的工具包、wheel 包或容器所针对的 CUDA 版本。旧版工具包可以在新版驱动上运行。
  • 次版本兼容性有其局限。在同一个主版本(例如 12.x)内,NVIDIA 允许许多用较新次版本构建的应用程序在同一主版本的较旧驱动上运行,但 PTX 即时编译等功能可能会失败。依赖这一特性之前,请先测试。
  • GPU 架构决定了最低版本。Hopper GPU(H100、H200)支持 CUDA 12 及更高版本。Blackwell GPU(B200、RTX PRO 6000、RTX 5090)需要 CUDA 12.8 或更高版本,以及包含 Blackwell 支持的框架构建版本;B300 的最低版本请查阅 NVIDIA 的发行说明。

经验法则:保留已安装的驱动,选择 CUDA 版本不高于 nvidia-smi 中 CUDA Version 的工具包、wheel 包和容器标签。

在 Ubuntu 24.04 上安装另一个 CUDA 工具包

您可以从 NVIDIA 的 apt 软件源并行安装一个工具包,而无需替换驱动。如果 /etc/apt/sources.list.d/ 中已有 CUDA 软件源条目,请跳过第 1 步。

  1. 添加 NVIDIA 软件源的密钥。在 22.04 上,请把 ubuntu2404 替换为 ubuntu2204:
    repo=https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64
    wget $repo/cuda-keyring_1.1-1_all.deb
    sudo dpkg -i cuda-keyring_1.1-1_all.deb
    sudo apt update
  2. 列出可用的工具包版本:
    apt-cache search --names-only '^cuda-toolkit-[0-9]+-[0-9]+$'
  3. 为所需版本安装只含工具包的软件包,例如 12.8:
    sudo apt install -y cuda-toolkit-12-8
    请始终使用 cuda-toolkit-X-Y。cuda、cuda-X-Y 和 cuda-drivers 软件包还会安装驱动。
  4. 在 shell 中启用它并检查:
    export PATH=/usr/local/cuda-12.8/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
    nvcc --version
    您应该会看到 release 12.8。如果工具包来自 NVIDIA 的软件包,可以用 sudo update-alternatives --config cuda 更改 /usr/local/cuda 所指向的默认版本。

启用 NVIDIA 软件源后,之后运行 apt upgrade 时可能会出现更新的驱动软件包。确认之前请先看清列表,或者按照操作系统镜像一文的说明锁定驱动。如果只有一个项目需要另一个 CUDA 版本,使用容器往往更简单:请参阅 Docker GPU 容器。

启用持久模式

持久模式(persistence mode)会在没有进程使用 GPU 时让驱动保持初始化状态,这样任务启动时无需等待驱动加载。先检查它的状态,再将其开启:

nvidia-smi --query-gpu=index,persistence_mode --format=csv
sudo nvidia-smi -pm 1

您应该会看到每张 GPU 都显示“Enabled”。该设置在重启后不会保留。如果重启后它变为禁用状态,可以通过 root 用户的 crontab 在开机时应用:运行 sudo crontab -e,然后添加一行 @reboot /usr/bin/nvidia-smi -pm 1。

常见错误排查

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver

内核模块没有加载,这通常发生在内核更新之后:模块没有针对新内核构建。请收集以下信息:

uname -r
lsmod | grep nvidia
dkms status
sudo dmesg | grep -i -E 'nvidia|nvrm'

如果 dkms status 列出了其他内核的 NVIDIA 模块,却没有 uname -r 所显示内核的模块,请安装对应的内核头文件,重新构建并重启:

sudo apt install -y linux-headers-$(uname -r)
sudo dkms autoinstall
sudo reboot

如果没有安装 dkms,说明驱动使用的是预编译模块:请在控制台提交工单,把上面的输出发给我们。

Failed to initialize NVML: Driver/library version mismatch

驱动软件包在旧模块仍处于加载状态时被升级了。请运行 sudo reboot。重启后,nvidia-smi 和 /proc/driver/nvidia/version 应显示相同的版本。锁定驱动软件包可以避免这种情况。

CUDA error 802, system not yet initialized

在 8 卡 HGX 服务器上,NVIDIA Fabric Manager 必须处于运行状态,且版本与驱动完全一致,CUDA 才能使用 NVSwitch 互联。请用 systemctl status nvidia-fabricmanager 检查,用 sudo systemctl restart nvidia-fabricmanager 重启它;如果仍无法启动,请在控制台提交工单。

CUDA driver version is insufficient for CUDA runtime version

该程序、wheel 包或容器所针对的 CUDA 版本,高于驱动所支持的版本。请改用针对较旧 CUDA 版本的构建,或在控制台提交工单,咨询驱动升级事宜。硬件错误(dmesg 中的 Xid 消息)请参阅 GPU 监控。

常见问题

为什么 nvidia-smi 显示的 CUDA 版本与 nvcc 不同?

nvidia-smi 显示的是驱动支持的最新 CUDA 版本,而 nvcc 显示的是您用于编译的工具包。工具包版本低于驱动的 CUDA Version 很正常,也可以照常使用。

运行 PyTorch 需要安装 CUDA 工具包吗?

不需要。PyTorch 的 wheel 包和大多数容器都自带 CUDA 库,只需要足够新的驱动。只有在您自己编译 CUDA 代码时,才需要安装工具包。

我可以自己升级 NVIDIA 驱动吗?

可以,您拥有完整的 root 权限。请安排好重启;在 8 卡 HGX 服务器上,要让 Fabric Manager 与驱动保持相同版本;如果需要建议,请先在控制台提交工单。

问题仍未解决?

请在控制台提交工单,写明服务器、您运行了什么以及错误输出(如有)。工程师 7×24 小时答复。

提交工单

登录 FullGPU

管理您的 GPU 服务器、余额和账单。

首次使用 FullGPU? 创建账户