在部署深度学习框架、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 版本 > 驱动可支持版本,会导致:
-
PTX JIT 编译失败(LAMMPS/GROMACS 最常见):
UCL Error: Error compiling PTX Program... Segmentation fault (core dumped) -
CUDA runtime 加载失败:
CUDA driver version is insufficient for CUDA runtime version -
动态库版本冲突(
libcudart.so等) -
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 Version | NVIDIA 驱动 | 驱动支持的最高 CUDA Runtime 版本 |
nvcc --version | CUDA 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 兼容性敏感)