在部署深度学习框架、LAMMPS、GROMACS、VASP 或 HPC 环境时,经常会遇到这种情况:

$ nvidia-smi
CUDA Version: 12.8          # 驱动显示 12.8

$ nvcc --version
Cuda compilation tools, release 13.0, V13.0.xx   # Toolkit 实际是 13.0

更麻烦的是,安装 CUDA Toolkit 新版本后,软件可能出现 GPU 代码无法编译、运行时报 Error compiling PTX Program…、甚至直接段错误 / 核心转储。本文解析 nvidia-smi 为什么不显示你安装的 Toolkit、驱动与 CUDA 版本如何匹配、不匹配为什么会导致 LAMMPS GPU 崩溃,以及如何正确选择组合。


一、nvidia-smi 的 CUDA Version 到底是什么?

执行 nvidia-smi 看到 CUDA Version: 12.8,很多人误以为“系统已经安装了 CUDA 12.8”。事实上它表示:

当前 NVIDIA 驱动能够支持的最高 CUDA Runtime / Driver API 版本。

不代表:你安装的 Toolkit 版本、/usr/local/cuda 指向的版本、可用于编译 CUDA 程序的版本。

所以即使你根本没装 Toolkit,只要装了 NVIDIA 驱动,nvidia-smi 都会显示一个 CUDA Version——它来源于驱动内部自带的 CUDA Driver API。


二、真正决定 Toolkit 版本的是 nvcc --version

你安装的 Toolkit 版本必须看:

nvcc --version
# Cuda compilation tools, release 13.0, V13.0.xx

它代表用于编译 CUDA 程序的版本、Toolkit 是否支持你 GPU 的 Compute Capability、程序运行时需要链接哪些 runtime 库。

换句话说:

驱动报告“能支持什么”,Toolkit 决定“你实际在用什么”。


三、驱动版本与 Toolkit 版本不匹配会发生什么?

CUDA Toolkit 必须满足“最低驱动版本(Minimum Required Driver Version)”。来自官方 CUDA Compatibility Guide:

CUDA Toolkit 主版本最低驱动版本(Linux)
CUDA 13.x≥ 580.xx
CUDA 12.x≥ 525.xx
CUDA 11.x≥ 450.xx

如果 Toolkit 版本 > 驱动可支持版本,会导致:

  1. PTX JIT 编译失败(LAMMPS/GROMACS 最常见):

    UCL Error: Error compiling PTX Program...
    Segmentation fault (core dumped)
  2. CUDA runtime 加载失败CUDA driver version is insufficient for CUDA runtime version

  3. 动态库版本冲突libcudart.so 等)

  4. GPU 模块静默崩溃(更难排查)


四、为什么升级到 CUDA 13.0 后 LAMMPS GPU 会崩?

典型环境是:

  • 驱动:570.xx(最高支持 CUDA 12.8)
  • Toolkit:13.0(需要 ≥ 580 驱动)

这属于「Toolkit 13.x + 驱动 570.x」的不兼容组合。当 LAMMPS GPU 包加载 13.x PTX / runtime 特性时,驱动无法识别,导致 Error compiling PTX Program... 与段错误。改回 CUDA 12.8 后,驱动(570.xx)可以完全支持 12.8 Toolkit,JIT 编译正常完成,运行恢复正常。


五、如何避免 CUDA 版本不兼容?

方法 1:永远使用“驱动支持的最高 Toolkit”。 如果 nvidia-smi 显示 CUDA Version: 12.8,那么 Toolkit 就用 12.8(最推荐)或任意 12.x 小版本,不要用 13.x(需要 ≥580 驱动)。

方法 2:升级驱动,让驱动主版本 ≥ Toolkit 主版本。 若希望安装 CUDA 13.0 Toolkit,驱动必须升级到 >= 580.xx,否则运行 GPU 程序时会崩溃。


六、实战环境检查脚本(建议收藏)

echo "=== Driver supports CUDA version ==="
nvidia-smi | grep "CUDA Version"

echo "=== Installed Toolkit ==="
nvcc --version

echo "=== CUDA directories ==="
ls /usr/local | grep cuda

echo "=== Driver version ==="
nvidia-smi --query-gpu=driver_version --format=csv,noheader

七、总结

nvidia-smi 的 CUDA Version ≠ 实际安装的 CUDA Toolkit Version。

项目谁提供?代表什么?
nvidia-smi 的 CUDA VersionNVIDIA 驱动驱动支持的最高 CUDA Runtime 版本
nvcc --versionCUDA Toolkit实际用于编译 CUDA 程序的版本

LAMMPS 崩溃的原因是:驱动只支持到 CUDA 12.8,而装了 CUDA 13.0 Toolkit → 不兼容 → GPU JIT 崩溃;改回 CUDA 12.8 后立刻正常。


官方参考资料

  • NVIDIA CUDA Compatibility Guide:https://docs.nvidia.com/deploy/cuda-compatibility/(驱动与 Toolkit 最低兼容关系,最权威来源)
  • CUDA Toolkit – Minimum Required Driver Versions(在 Compatibility Guide 内部表格)
  • CUDA Toolkit Release Notes(每个版本的最低驱动要求,例如 CUDA 13.0 要求 ≥ 580.xx 驱动)
  • LAMMPS GPU Package 官方说明(GPU 包使用 CUDA runtime / NVRTC JIT,对驱动和 Toolkit 兼容性敏感)