很多人第一次认真看 GPU 环境,都会被 CUDA 版本搞晕。
比如你执行:
bash
nvidia-smi
看到:
text
Driver Version: 580.xx
CUDA Version: 13.3
然后又执行:
bash
nvcc --version
看到:
text
release 12.6
再执行:
bash
python -c "import torch; print(torch.version.cuda)"
看到:
text
12.9
这时候人就傻了:
我机器上到底是 CUDA 12.6、12.9,还是 13.3?
为什么三个地方版本不一样?
是不是环境坏了?
要不要升级驱动?
租的云服务器能不能自己升?
这篇文章一次讲清楚。
先给结论:
这三个版本不是同一个东西。
nvidia-smi右上角的 CUDA Version:驱动能支持的最高 CUDA Runtime 版本,也就是"天花板"。nvcc --version:系统或容器里安装的 CUDA Toolkit 版本,主要影响编译。torch.version.cuda:PyTorch 实际使用的 CUDA Runtime 版本。只要:
texttorch.version.cuda <= nvidia-smi 右上角 CUDA Version通常就能跑。
所以:
textnvidia-smi 显示 13.3 nvcc 显示 12.6 torch.version.cuda 显示 12.9完全不矛盾。
因为 PyTorch 实际用的是 12.9,而驱动最高支持到 13.3,驱动托得住。
一、先分清:驱动、Runtime、Toolkit 不是一回事
在 NVIDIA/CUDA 环境里,至少有三个层次:
text
NVIDIA Driver 驱动
CUDA Runtime 运行时
CUDA Toolkit 开发工具包
再加上 PyTorch 这种框架,就会出现第四个概念:
text
torch.version.cuda PyTorch 实际使用的 CUDA Runtime 版本
我们可以用一个类比来理解。
二、一个类比:司机、方向盘、修车厂、车
把 GPU 环境想象成一辆车:
| 角色 | 对应 CUDA 环境 | 作用 |
|---|---|---|
| GPU 硬件 | 发动机、底盘 | 真正干活 |
| NVIDIA Driver | 司机/底层控制系统 | 控制 GPU 硬件 |
| CUDA Runtime | 方向盘、油门、刹车 | 程序调用 GPU 的接口 |
| CUDA Toolkit / nvcc | 修车厂设备 | 编译 CUDA 程序 |
| PyTorch | 你开的那辆车 | 实际使用 CUDA Runtime 跑任务 |
一句话:
程序能不能跑,看车高有没有超过道路限高。
修车厂是什么版本,不一定决定你开哪辆车。
这里的"道路限高"就是:
text
nvidia-smi 右上角 CUDA Version
也就是驱动支持的最高 CUDA Runtime 版本。
三、驱动是什么?
NVIDIA 驱动是安装在操作系统里的底层软件。
它负责:
- 识别 GPU;
- 初始化 GPU;
- 管理 GPU 设备;
- 管理显存;
- 管理任务调度;
- 让 Linux/Windows 可以和 GPU 通信;
- 提供底层 CUDA Driver API。
你执行:
bash
nvidia-smi
看到的内容主要来自驱动层。
例如:
text
Driver Version: 580.xx
CUDA Version: 13.3
这里的:
text
Driver Version: 580.xx
是 NVIDIA 驱动版本。
这里的:
text
CUDA Version: 13.3
不是"已经安装了 CUDA 13.3",而是:
当前驱动最高支持到 CUDA Runtime 13.3。
所以:
text
nvidia-smi 里的 CUDA Version = 驱动支持上限 = 天花板
四、Runtime 是什么?
Runtime 通常指 CUDA Runtime,也就是 CUDA 运行时。
它是给程序使用的一套 API。
比如写 CUDA C/C++ 时常见这些函数:
cpp
cudaMalloc()
cudaFree()
cudaMemcpy()
cudaSetDevice()
cudaDeviceSynchronize()
或者启动 kernel:
cpp
myKernel<<<grid, block>>>();
这些都属于 CUDA Runtime API。
在 Linux 上,CUDA Runtime 通常对应:
text
libcudart.so
底层驱动 API 通常对应:
text
libcuda.so
简单记:
text
libcuda.so -> Driver API,来自 NVIDIA 驱动
libcudart.so -> Runtime API,来自 CUDA Toolkit 或程序自带
它们的关系是:
text
你的程序
↓
CUDA Runtime API
↓
CUDA Driver API
↓
NVIDIA Kernel Driver
↓
GPU 硬件
也就是说:
Runtime 依赖 Driver。
没有 NVIDIA 驱动,CUDA Runtime 没法真正使用 GPU。
但是反过来:
有驱动,不一定系统里安装了完整 CUDA Toolkit。
比如一台机器可以只有 NVIDIA 驱动:
bash
nvidia-smi
正常显示 GPU。
但是:
bash
nvcc --version
可能提示找不到命令。
这很正常。
五、CUDA Toolkit 和 nvcc 是什么?
执行:
bash
nvcc --version
可能看到:
text
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on ...
Cuda compilation tools, release 12.6, V12.6.xx
这里的:
text
release 12.6
表示:
当前系统或容器里安装了 CUDA Toolkit 12.6。
nvcc 是 CUDA 编译器,属于 CUDA Toolkit 的一部分。
CUDA Toolkit 里通常包括:
text
nvcc CUDA 编译器
CUDA headers 头文件
CUDA libs 库文件
nvprof/nsight 性能分析工具
cuda-gdb 调试工具
它主要影响什么?
影响编译。
比如你要编译 CUDA 代码:
bash
nvcc kernel.cu -o kernel
或者编译 PyTorch CUDA 扩展:
bash
python setup.py install
或者安装某些需要源码编译的库:
bash
pip install flash-attn --no-build-isolation
这时候 nvcc 才真正参与。
但如果你只是运行 PyTorch:
python
import torch
model = model.cuda()
那么系统里有没有 nvcc,很多时候并不重要。
因为 PyTorch 官方预编译包通常自带了运行所需的 CUDA Runtime 库。
所以:
text
nvcc 12.6
只说明:
系统或容器里安装的 CUDA Toolkit 是 12.6。
不代表:
PyTorch 只能使用 CUDA 12.6。
也不代表:
你的 NVIDIA 驱动是 12.6。
六、torch.version.cuda 是什么?
执行:
bash
python -c "import torch; print(torch.version.cuda)"
可能输出:
text
12.9
这个版本表示:
当前 PyTorch 实际使用/链接的 CUDA Runtime 版本。
也可以看更完整一点:
bash
python - <<'PY'
import torch
print("torch.__version__ :", torch.__version__)
print("torch.version.cuda :", torch.version.cuda)
print("torch.cuda.is_available():", torch.cuda.is_available())
PY
例如输出:
text
torch.__version__ : 2.9.0+cu129
torch.version.cuda : 12.9
torch.cuda.is_available(): True
这里的:
text
12.9
才是 PyTorch 真正在用的 CUDA Runtime 版本。
如果你安装的是 PyTorch 官方 CUDA 12.9 版本,那么它通常会自带相应的 CUDA Runtime 库。
也就是说:
text
PyTorch 用的是 12.9,
不代表你系统必须安装 CUDA Toolkit 12.9,
也不代表 nvcc 必须是 12.9。
它真正要求的是:
你的 NVIDIA 驱动必须支持 CUDA Runtime 12.9。
怎么判断?
看:
bash
nvidia-smi
右上角。
七、三个版本号到底分别代表什么?
现在把最常见的三个版本放一起。
1. nvidia-smi 右上角 CUDA Version
命令:
bash
nvidia-smi
示例:
text
CUDA Version: 13.3
含义:
当前 NVIDIA 驱动最高支持到 CUDA Runtime 13.3。
它不是:
text
已经安装的 CUDA Toolkit 版本
也不是:
text
PyTorch 正在使用的 CUDA 版本
它是:
text
驱动支持上限
2. nvcc --version
命令:
bash
nvcc --version
示例:
text
release 12.6
含义:
当前系统或容器里安装的 CUDA Toolkit 版本是 12.6。
它主要影响:
text
编译 CUDA 代码
编译 CUDA 扩展
安装需要源码编译的 GPU 库
如果你只是运行 PyTorch,它通常不是关键。
3. torch.version.cuda
命令:
bash
python -c "import torch; print(torch.version.cuda)"
示例:
text
12.9
含义:
当前 PyTorch 实际使用的 CUDA Runtime 版本是 12.9。
它决定:
text
PyTorch 运行时实际依赖哪个 CUDA Runtime
它需要满足:
text
torch.version.cuda <= nvidia-smi CUDA Version
八、为什么 12.6、12.9、13.3 同时出现不矛盾?
假设你现在看到:
bash
nvidia-smi
# CUDA Version: 13.3
bash
nvcc --version
# release 12.6
bash
python -c "import torch; print(torch.version.cuda)"
# 12.9
整理一下:
text
nvidia-smi CUDA Version: 13.3
= 驱动最高支持 CUDA Runtime 13.3
nvcc release: 12.6
= 系统或容器里安装的 CUDA Toolkit 是 12.6
torch.version.cuda: 12.9
= PyTorch 实际使用 CUDA Runtime 12.9
判断能不能跑:
text
torch.version.cuda 12.9 <= nvidia-smi CUDA Version 13.3
所以能跑。
这就是为什么:
标语写 12.6,命令看到 13.3,并不矛盾。
因为"标语 12.6"很可能说的是:
text
系统安装的 CUDA Toolkit 是 12.6
或者:
text
某个镜像/环境说明里写的是 CUDA 12.6
而:
text
nvidia-smi 的 13.3
说的是:
text
驱动最高支持到 CUDA Runtime 13.3
这两个本来就不是同一个维度。
九、驱动和 Runtime 的版本兼容规则
最重要的一条规则:
新的 NVIDIA 驱动通常可以支持旧的 CUDA Runtime。
例如:
text
驱动支持 CUDA 13.3
程序使用 CUDA Runtime 12.9
可以。
因为:
text
12.9 <= 13.3
但是反过来通常不行:
text
驱动支持 CUDA 12.6
程序使用 CUDA Runtime 12.9
通常不行。
因为:
text
12.9 > 12.6
驱动托不住。
这时候你有两个选择。
选择一:升级 NVIDIA 驱动
让:
text
nvidia-smi CUDA Version >= 程序需要的 CUDA Runtime 版本
例如你想用:
text
torch.version.cuda = 12.9
那么最好让:
text
nvidia-smi CUDA Version >= 12.9
如果升级后显示:
text
CUDA Version: 13.3
那么 CUDA Runtime 12.9 就可以跑。
选择二:降低 PyTorch/CUDA Runtime 版本
如果驱动最高只支持:
text
CUDA Version: 12.6
那就安装 CUDA 12.6 或更低版本的 PyTorch。
例如选择:
text
cu126
或者更低版本,具体以 PyTorch 官网可用版本为准。
十、一个最小判断流程
以后遇到 CUDA 版本问题,按这个顺序查。
第一步:看驱动天花板
bash
nvidia-smi
看右上角:
text
CUDA Version: 13.3
记住:
这是驱动能支持到的最高 CUDA Runtime 版本。
第二步:看 PyTorch 实际使用的 CUDA Runtime
bash
python -c "import torch; print(torch.version.cuda)"
例如:
text
12.9
第三步:比较大小
如果:
text
torch.version.cuda <= nvidia-smi CUDA Version
通常可以跑。
例如:
text
torch.version.cuda = 12.9
nvidia-smi CUDA Version = 13.3
可以。
如果:
text
torch.version.cuda = 12.9
nvidia-smi CUDA Version = 12.6
通常不行。
第四步:看 PyTorch 是否真的识别到 GPU
bash
python -c "import torch; print(torch.cuda.is_available())"
输出:
text
True
说明 PyTorch 可以用 GPU。
如果输出:
text
False
继续查:
bash
python -c "import torch; print(torch.version.cuda)"
如果输出:
text
None
说明你装的很可能是 CPU 版 PyTorch。
如果 torch.version.cuda 有值,但 torch.cuda.is_available() 是 False,再检查:
- 驱动是否正常;
- 容器是否透传 GPU;
- CUDA 库路径是否正确;
- PyTorch 是否和当前驱动兼容;
- 是否安装了错误架构的包。
十一、什么时候需要关心 nvcc?
如果你只是:
python
import torch
model.cuda()
或者跑现成模型:
bash
python train.py
python infer.py
通常只需要关心:
text
nvidia-smi CUDA Version
torch.version.cuda
torch.cuda.is_available()
就可以了。
但如果你要做下面这些事,就要关心 nvcc:
1. 编译 CUDA 扩展
比如:
bash
python setup.py install
或者:
bash
pip install -e .
里面有 .cu 文件。
2. 安装需要源码编译的库
例如某些版本的:
bash
flash-attn
xformers
deformable-detr
mmcv
或者其他包含 CUDA kernel 的库。
3. 自己写 CUDA kernel
比如:
cpp
__global__ void add_kernel(float* a, float* b, float* c) {
int idx = threadIdx.x;
c[idx] = a[idx] + b[idx];
}
需要用 nvcc 编译。
4. 使用 PyTorch 的 C++/CUDA Extension
例如:
python
from torch.utils.cpp_extension import load
这时候系统里的 nvcc 会被调用。
在这种情况下,建议:
text
nvcc 版本尽量和 torch.version.cuda 保持接近,至少主版本一致。
比如:
text
torch.version.cuda = 12.9
nvcc = 12.9
比较稳。
如果:
text
torch.version.cuda = 12.9
nvcc = 11.8
编译扩展时就可能遇到各种奇怪问题。
十二、容器场景下更容易误会
如果你用 Docker、Singularity、Apptainer、Kubernetes 之类的容器环境,版本看起来会更乱。
比如:
text
宿主机驱动:支持 CUDA 13.3
容器镜像里:nvcc 12.6
容器里的 PyTorch:torch.version.cuda 12.9
这很正常。
因为:
1. 容器里的 nvidia-smi 通常来自宿主机驱动
在容器里执行:
bash
nvidia-smi
看到的 Driver Version 和 CUDA Version,通常反映的是宿主机驱动能力。
不是容器镜像里安装的 CUDA Toolkit。
2. 容器里的 nvcc 是镜像里装的 Toolkit
容器里执行:
bash
nvcc --version
看到的是容器镜像内部安装的 CUDA Toolkit。
它可能和宿主机驱动版本不一样。
3. PyTorch 用的是自己 wheel 或 conda 包里的 CUDA Runtime
容器里执行:
bash
python -c "import torch; print(torch.version.cuda)"
看到的是 PyTorch 自己使用的 CUDA 版本。
它可能来自:
text
pip 安装的 cu129 wheel
或者:
text
conda 安装的 pytorch-cuda=12.9
或者:
text
镜像里预装的 PyTorch
所以容器场景下,你要这样理解:
text
宿主机驱动:nvidia-smi CUDA Version = 13.3
容器 Toolkit:nvcc --version = 12.6
容器 PyTorch:torch.version.cuda = 12.9
只要:
text
12.9 <= 13.3
PyTorch 就可以调用 GPU。
十三、租的云服务器,可以升级 CUDA 驱动吗?
这是很多人会问的问题。
答案是:
可以,但不是所有租的云服务器都允许你升级。
而且通常不建议你手动升级 NVIDIA 驱动,除非你确认自己有权限、知道风险,并且确实需要升。
1. 先确认你要升的是"驱动",不是"CUDA Toolkit"
如果你想提高:
text
nvidia-smi 右上角 CUDA Version
那你需要升级的是:
text
NVIDIA Driver
不是:
text
CUDA Toolkit
因为:
text
nvidia-smi 里的 CUDA Version 由驱动决定。
升级 nvcc / CUDA Toolkit 不一定会让 nvidia-smi 里的 CUDA Version 变高。
2. 什么时候真的需要升级驱动?
看两个值。
第一个:
bash
nvidia-smi
看:
text
CUDA Version
第二个:
bash
python -c "import torch; print(torch.version.cuda)"
如果:
text
torch.version.cuda <= nvidia-smi CUDA Version
一般不需要升级驱动。
例如:
text
nvidia-smi CUDA Version: 13.3
torch.version.cuda: 12.9
不需要升。
如果:
text
torch.version.cuda > nvidia-smi CUDA Version
通常跑不了。
例如:
text
nvidia-smi CUDA Version: 12.6
torch.version.cuda: 12.9
这时候要么升级驱动,要么降低 PyTorch/CUDA Runtime 版本。
十四、租的云服务器能不能自己升驱动?
分几种情况。
情况 A:你有 root/sudo,而且是普通 GPU 虚拟机
例如你能:
bash
sudo -i
或者:
bash
sudo apt update
并且能安装软件、重启机器。
这种情况下,理论上可以升级 NVIDIA 驱动。
但是要注意:
云厂商的 GPU 实例经常有推荐驱动版本,手动升级可能导致 GPU 不可用、重启失败、内核模块不兼容、云平台监控失效。
所以不是"能不能"的问题,而是"稳不稳"的问题。
情况 B:你用的是托管 AI 平台、Serverless GPU、容器实例
有些平台你只能 SSH 进容器,或者只能使用平台提供的镜像,不能真正控制宿主机。
这种情况下:
你通常不能升级宿主机的 NVIDIA 驱动。
你在容器里执行:
bash
nvidia-smi
看到的驱动版本,其实来自宿主机。
容器里一般不能升级宿主驱动。
你能做的通常是:
- 换更高驱动版本的基础镜像;
- 换更新的 GPU 实例类型;
- 联系平台客服/提工单;
- 降低 PyTorch/CUDA 版本。
情况 C:裸金属服务器
如果你租的是裸金属 GPU 服务器,通常权限更大。
这种情况下一般可以自己安装或升级驱动。
但也要注意:
- GPU 型号是数据中心卡还是消费卡;
- 是否需要
nvidia-fabricmanager; - 是否有多卡 NVLink/NVSwitch;
- 是否有 RDMA/InfiniBand;
- 云厂商是否要求使用指定驱动版本;
- 升级后是否影响售后支持。
情况 D:云平台使用 GPU Operator 或自动驱动安装
有些 Kubernetes 集群、云厂商镜像会使用:
text
NVIDIA GPU Operator
或者启动时自动安装驱动。
这种情况下,你手动改驱动可能会被覆盖,或者造成冲突。
更推荐:
修改平台提供的驱动版本配置,而不是手动硬装。
十五、租的云服务器升级驱动前,最稳的处理方式
如果你用的是租的云服务器,我建议按这个优先级来。
优先级 1:先确认是不是真的需要升
运行:
bash
nvidia-smi
python -c "import torch; print(torch.version.cuda)"
python -c "import torch; print(torch.cuda.is_available())"
如果:
text
torch.cuda.is_available() = True
并且:
text
torch.version.cuda <= nvidia-smi CUDA Version
那就别折腾驱动。
优先级 2:换云厂商提供的官方镜像
很多云平台都有预装 GPU 驱动和 CUDA 的镜像,例如:
text
Ubuntu + NVIDIA Driver + CUDA 12.x
PyTorch GPU 镜像
Deep Learning VM
AI 加速镜像
这比自己手动装驱动稳得多。
因为云厂商通常会处理:
- 内核兼容;
- GPU 驱动签名;
- Secure Boot;
- 云监控插件;
- 多卡驱动;
- fabricmanager;
- 重启后自动恢复。
优先级 3:提工单问云厂商
你可以直接问:
我的 GPU 实例当前 NVIDIA 驱动版本是多少?
是否支持升级到 xxx 驱动?
如果我想使用 CUDA 12.9 / 13.x Runtime,应该选择哪个镜像或驱动版本?
手动升级驱动是否会影响实例稳定性和售后支持?
这比自己硬升安全。
优先级 4:确实要自己升,先做快照/备份
如果你确认有权限,并且愿意承担风险,升级前至少做这些:
bash
nvidia-smi
uname -r
cat /etc/os-release
lspci | grep -i nvidia
再查当前驱动包。
Ubuntu/Debian:
bash
dpkg -l | grep -i nvidia
CentOS/RHEL/AlmaLinux/Rocky:
bash
rpm -qa | grep -i nvidia
然后确认:
- 云服务器能不能创建系统快照;
- 能不能 VNC/控制台登录,不只是 SSH;
- 升级失败后能不能回滚;
- 是否有 root 权限;
- 是否关闭了 Secure Boot 或已配置签名;
- 是否停掉了所有 GPU 进程;
- 是否卸载干净旧驱动;
- 是否使用与 GPU 型号匹配的驱动分支。
十六、为什么不建议在租的云服务器上手动升级驱动?
常见翻车点有这些。
1. 重启后 GPU 消失
升级时没问题,重启后:
bash
nvidia-smi
报错:
text
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
2. 内核更新后驱动失效
云平台自动更新内核,重启后 NVIDIA 内核模块没重新编译。
3. nouveau 冲突
Linux 自带开源驱动 nouveau 没禁用,导致 NVIDIA 驱动加载失败。
4. Secure Boot 阻止驱动加载
未签名内核模块无法加载。
5. 数据中心卡需要 fabricmanager
比如 A100/H100 等多卡机器,驱动和 nvidia-fabricmanager 版本要匹配。
6. 云平台脚本重置驱动
有些镜像重启后会重新初始化驱动,你手动装的版本可能被覆盖。
十七、容器里能不能升级驱动?
如果你是在 Docker 容器里:
bash
nvidia-smi
看到驱动版本比较低,不要试图在容器里升级驱动。
因为:
容器里的
nvidia-smi看到的驱动,通常来自宿主机。
容器里能装的通常只是:
text
CUDA Toolkit
cuDNN
PyTorch
用户态库
不能替换宿主机内核里的 NVIDIA 驱动模块。
所以容器场景下,如果驱动太低,正确做法是:
- 让宿主机升级驱动;
- 或者换一台驱动更高的机器;
- 或者使用低版本 CUDA 的 PyTorch。
十八、常见误区
误区 1:nvidia-smi 显示 13.3,就说明系统装了 CUDA 13.3
错。
它只表示:
text
驱动最高支持 CUDA Runtime 13.3
不代表你已经安装 CUDA Toolkit 13.3。
误区 2:nvcc 是 12.6,所以 PyTorch 只能用 12.6
错。
PyTorch 使用的 CUDA 版本看:
bash
python -c "import torch; print(torch.version.cuda)"
不是看:
bash
nvcc --version
如果你只是运行 PyTorch,nvcc 可能根本不参与。
误区 3:torch.version.cuda 是 12.9,所以系统必须安装 CUDA Toolkit 12.9
不一定。
PyTorch 官方 wheel 通常会自带 CUDA Runtime。
所以可能:
text
系统 nvcc 不存在
但 PyTorch 仍然可以跑 CUDA 12.9。
只要驱动支持即可。
误区 4:三个版本必须完全一样
不一定。
运行场景下,最重要的是:
text
torch.version.cuda <= nvidia-smi CUDA Version
编译扩展场景下,才更强调:
text
nvcc 和 torch.version.cuda 尽量匹配
误区 5:容器里 nvidia-smi 显示的 CUDA 版本就是容器里的 CUDA Toolkit
错。
容器里的 nvidia-smi 通常显示的是宿主机驱动支持的最高 CUDA 版本。
容器里的 CUDA Toolkit 要看:
bash
nvcc --version
或者看容器镜像内部安装内容。
误区 6:升级 CUDA Toolkit 就能提高 nvidia-smi 的 CUDA Version
不行。
nvidia-smi 里的 CUDA Version 由驱动决定。
想提高它,通常要升级 NVIDIA 驱动,而不是只装新的 CUDA Toolkit。
十九、推荐的一段检查脚本
可以把下面这段保存为:
bash
check_cuda.py
python
import subprocess
def run(cmd):
try:
result = subprocess.run(
cmd,
shell=True,
capture_output=True,
text=True,
timeout=30,
)
return result.stdout.strip() or result.stderr.strip()
except Exception as e:
return f"ERROR: {e}"
print("=" * 80)
print("NVIDIA-SMI")
print("=" * 80)
print(run("nvidia-smi"))
print()
print("=" * 80)
print("NVCC")
print("=" * 80)
print(run("nvcc --version"))
print()
print("=" * 80)
print("PyTorch")
print("=" * 80)
try:
import torch
print("torch.__version__ :", torch.__version__)
print("torch.version.cuda :", torch.version.cuda)
print("torch.cuda.is_available():", torch.cuda.is_available())
if torch.cuda.is_available():
print("torch.cuda.device_count():", torch.cuda.device_count())
print("torch.cuda.get_device_name(0):", torch.cuda.get_device_name(0))
except Exception as e:
print("Import torch failed:", e)
运行:
bash
python check_cuda.py
你会一下子看到三个版本。
二十、最终总结
你可以把整篇文章压缩成一张表:
| 命令/位置 | 版本含义 | 影响什么 | 关键程度 |
|---|---|---|---|
nvidia-smi 右上角 CUDA Version |
驱动最高支持的 CUDA Runtime 版本 | PyTorch/CUDA 程序能不能跑 | 非常重要 |
nvcc --version |
系统/容器安装的 CUDA Toolkit 版本 | 编译 CUDA 代码、编译扩展 | 编译时重要 |
torch.version.cuda |
PyTorch 实际使用的 CUDA Runtime 版本 | PyTorch 实际调用哪个 CUDA Runtime | 非常重要 |
再压缩成一句话:
能不能跑,看
torch.version.cuda是否不超过nvidia-smi的 CUDA Version。能不能编译,再看
nvcc是否匹配。想提高
nvidia-smi里的 CUDA Version,要升级 NVIDIA 驱动,不是升级 CUDA Toolkit。
所以这个组合:
text
nvidia-smi CUDA Version: 13.3
nvcc --version: 12.6
torch.version.cuda: 12.9
结论是:
text
可以跑。
因为:
text
12.9 <= 13.3
而:
text
nvcc 12.6
只是系统里装的 Toolkit 版本,和 PyTorch 实际运行使用的 CUDA Runtime 12.9 不是一回事。
所以:
标语写 12.6,命令看到 13.3,不矛盾。
一个说的是 Toolkit,一个说的是驱动支持上限。
真正决定 PyTorch 能不能跑的,是驱动天花板和 PyTorch 实际使用的 CUDA Runtime 版本。
二十一、最短备忘版
如果你只想记住最精简版本,就记这几句:
text
nvidia-smi 里的 CUDA Version:
驱动能支持到的最高 CUDA Runtime,天花板。
nvcc --version:
系统或容器里的 CUDA Toolkit,主要管编译。
torch.version.cuda:
PyTorch 实际使用的 CUDA Runtime。
能不能跑:
torch.version.cuda <= nvidia-smi CUDA Version。
要不要升驱动:
如果 torch.version.cuda > nvidia-smi CUDA Version,才需要升驱动。
租的云服务器:
能不能升驱动看云厂商和权限。
优先换官方镜像或提工单,不要盲目手动升。