不同方式查看CUDA版本的含义
最近在给深度学习项目搭建环境时,遇到了不得不使用 CUDA 11.8 的情况,而我在通过不同方式查看自己 CUDA 版本时发现了不同版本号,产生了诸多疑惑(甚至差点卸载了 CUDA 重装)。经过一番探索以及向d老师寻求帮助后,终于理清了他们的关系,遂写下此文以帮助遇到同样问题的追光者们~(部分内容引用自DeepSeek,如有错误之处欢迎指出!)
nvcc -V
该方式显示的是当前环境下
nvcc
对应的 CUDA 工具包(CUDA Toolkit)版本(如下面的cuda_12.0
表示 CUDA Toolkit 版本为12.0):1
2
3
4
5nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0对于当前环境下的CUDA Toolkit版本,有这几种情况:
- 处于虚拟环境中,且该虚拟环境有 cuda-nvcc:那么输出的版本就是该环境下 CUDA Toolkit 版本;
- 处于虚拟环境中,但是该虚拟环境中没有安装 cuda-nvcc:那么输出的是系统 CUDA Toolkit 版本;
- 无环境(base 环境)情况下,输出的是系统 CUDA Toolkit 版本。
每种情况下,运行
which nvcc
输出的也是相应的nvcc
的位置。
为了深刻理解
nvcc
与 CUDA 的关系,在此阐述一下他们的定义。- CUDA 是什么? CUDA(Compute Unified Device Architecture)是 NVIDIA 推出的并行计算平台和编程模型,允许开发者直接利用 GPU 进行通用计算(如深度学习、科学计算等)。其由 CUDA 工具包(Toolkit)、CUDA 驱动和 CUDA 运行时库等组成。
nvcc
是什么?nvcc
(NVIDIA CUDA Compiler)是 CUDA Toolkit 中的编译器,专门用于编译 CUDA 代码(.cu
文件)。nvcc
与 CUDA 的关系nvcc
是 CUDA Toolkit 的一部分。安装 CUDA Toolkit 时,会默认安装 nvcc;nvcc
依赖 CUDA Toolkit。其行为受 CUDA Toolkit 版本的控制;nvcc
不直接依赖显卡驱动。编译代码时只需 CUDA 工具包,但生成的程序运行时需要匹配的 NVIDIA 驱动。
torch.version.cuda
在虚拟环境中,运行:
1
2
3
4
5
6# .venv1
Python 3.12.3 (main, Feb 4 2025, 14:48:35) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.version.cuda)
11.8输出的 11.8 表示当前环境下实际使用的 CUDA 版本。 当我在另一个环境运行时,显示的就是另一个环境的 CUDA 版本:
1
2
3
4
5
6# .venv2
Python 3.12.3 (main, Feb 4 2025, 14:48:35) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.version.cuda)
12.4
由此可见,每个虚拟环境独立管理 Python 包。在一个环境中安装 PyTorch for CUDA 11.8,不会影响其他环境中已安装的 PyTorch(如 CUDA 12.4 版本)。 并且需要注意的是,现在的 PyTorch 的预编译包(通过
pip
或conda
安装)会自带与 CUDA 版本对应的运行时库(如 cuDNN、cuBLAS 等),且这些库仅在该虚拟环境中生效,不会干扰系统全局或其他环境中的 CUDA。nvidia-smi
下图中
CUDA Version: 12.4
表示当前安装的 NVIDIA 驱动版本支持的最高 CUDA Toolkit 版本,并非当前版本。说明我的 NVIDIA 驱动可以支持 CUDA Toolkit 12.4 及以下的版本,即向下兼容。注:PyTorch 实际依赖的是 NVIDIA 驱动。PyTorch 通过 NVIDIA 驱动与 GPU 通信。只要驱动版本足够新(如支持 CUDA 12.0 的驱动通常也兼容 CUDA 11.8),不同 CUDA 版本的 PyTorch 均可运行。
总结一下:
命令 | 显示内容 | 主要用途 |
---|---|---|
nvcc -V |
系统中安装的 CUDA Toolkit 版本 | 确认编译 CUDA 代码时的工具包版本 |
torch.version.cuda |
当前环境中 Pytorch 实际使用的 CUDA 运行时版本 | 确认深度学习框架的 CUDA 环境 |
nvidia-smi |
驱动支持的最高 CUDA Toolkit 版本 | 确认驱动兼容性 |