三个版本号,别混为一谈
装 CUDA 环境时的困惑大多来自三个版本号含义不同。nvidia-smi 顶部的 CUDA Version 是当前驱动支持的上限运行时版本,只是能力声明;nvcc --version 显示本机实际安装的工具箱版本;PyTorch 通过 torch.version.cuda 报告自己编译时链接的 CUDA 版本。三者关系决定了能不能跑:工具箱不能超过驱动上限,框架构建要与运行时兼容。
三处版本号
| 查看方式 | 显示内容 | 实际含义 |
|---|---|---|
| nvidia-smi | CUDA Version | 驱动支持的上限运行时版本,不代表已安装 |
| nvcc --version | release 版本号 | 本机已安装的工具箱版本 |
| torch.version.cuda | 形如 12.4 的字符串 | PyTorch 构建时使用的 CUDA 版本 |
| 驱动版本号 | Driver Version | 与内核模块、容器工具链强相关的基础版本 |
判断规则
| 工具箱高于驱动上限 | 不可用:运行时需要驱动提供对应能力,报驱动版本不足 |
|---|---|
| 工具箱低于驱动上限 | 正常:驱动向后兼容较旧的运行时 |
| 容器内看到的版本 | 来自镜像本身,与宿主机装了什么工具箱无关 |
| 升级顺序 | 先升驱动、重启验证,再升级工具箱与框架构建 |
三步核对
三步核对
nvidia-smi | head -5 # 驱动版本与 CUDA 上限
nvcc --version # 本机工具箱版本(未装会报找不到命令)
python -c "import torch; print(torch.version.cuda, torch.cuda.is_available())" # 框架侧
# 容器场景在容器内再跑一遍,比较与宿主机的差异
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi | head -5常见组合问题
- 宿主机装了新工具箱但驱动没升:编译能过、运行时报驱动能力不足
- 只升级了驱动忘记重启:旧内核模块仍在用,版本显示与预期不一致
- 容器里按宿主机 nvcc 判断:容器内的工具箱由镜像决定,两边版本经常不同
- 框架 wheel 与运行时不一致:导入阶段报找不到动态库,或在推理时崩
- 多套 conda 环境各装一个工具箱:命令行走的是当前环境,切换环境后版本看起来变了
驱动只有一套,工具箱可以多套并存:conda 环境里各装一个工具箱版本是常见做法,避免为了一个项目动全局环境。
驱动升级会中断所有在用 GPU 的任务并需要重启:务必排在维护窗口,升级前记录原版本与内核版本,准备回退路径。