彻底搞清楚CUDA和cuDNN版本问题

本文解释了CUDA、cuDNN和PyTorch中的torch.version.cuda之间的区别,指出nvidia-smi显示的是驱动版本,而torch.version.cuda表示的是torch支持的最高CUDA版本。cuda编译器NVCC的版本对应于CUDARuntime,而torch.backends.cudnn.version则反映了cuDNN的实际版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

彻底搞清楚CUDA和cuDNN版本问题

1. 缘起

我的机器上以下三条指令输出的版本不相同。

nvcc -V  # 这个输出11.7
nvidia-smi  # 右上角显示12.3
import torch; torch.version.cuda  # 这个输出12.1

我想以此为契机,彻底搞清楚CUDA、cuDNN和torch之间的关系。

环境:

Ubuntu 22.04

torch==2.1.2

2. CUDA

CUDA的版本傻傻分不清楚?请看电子包浆一图流:

在这里插入图片描述

Driver是唯一能驱动GPU的,一般N卡都自带。它虽然也叫CUDA,但深度学习项目中所说的CUDA不是它。

RuntimeDriver的进一步封装,API更简洁。一般需要自己安装。它就是我们在深度学习项目中所说的CUDA,因为Runtimetorch+cu版本的必要依赖。

ps:其实这张图画得有问题。CUDA Application不能同时用RuntimeDriver的API,两者是互斥的。

3. 各命令的区别

1. nvidia-smi

这个命令是CUDA Driver的组件,也就是说基本所有有N卡的机器都能使用这个命令。

请添加图片描述

注意,nvidia-smi 不可查询CUDA版本!!!这张图最上面的Driver Version是实际的版本号,但CUDA Version不是实际的版本号,而是当前Driver支持的最高CUDA版本。CUDA向下兼容,你的CUDA必须要小于等于这个版本号。

这里贴个nvidia-smi 命令的详细用法

2. nvcc -V

很简单,nvcc是CUDA Runtime的编译器。输出的版本号就是机器上CUDA Runtime的版本号。如下图第四行的末尾:

请添加图片描述

3. torch.version.cuda

它的输出不是当前CUDA的版本号!!!而是当前torch支持的最高CUDA版本!!!

上源码:
请添加图片描述
源码里的torch.version 都是用字符串写定的,根本没有去检查CUDA版本。

4. torch.backends.cudnn.version()

torch/cudnn/__init__.py 第八十行有源码(下图),但仅仅是一个封装了一个api,不知道输出究竟是什么逻辑。注意94行还有一个我们常用的is_available()请添加图片描述
再找__cudnn.version是怎么来的(下图)。第27行显示是_cudnn.getVersionInt(),注意到第十行,找到torch._C的目录(记得is_available()吗,同样是这个目录)。请添加图片描述
打开torch/_C全部是python存根。__init__.pyi里没有getVersionInt() ,有两个常量:_has_cuda_has_cudnn,只规定了bool类型。torch/_C中存在_cudnn.pyi,如下图:请添加图片描述
第5行所写的torch/csrc是空的。到这线索就断了。

结论

虽然没有找到可读的源码,但我们已经可以得出一些有效的结论:

##################################################### 
############ 以下的命令是反映机器上真实环境的 ############ 
##################################################### 
$ nvcc -V  # 查询CUDA Runtime版本
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0

>>> torch.backends.cudnn.is_available()  # 查询cuDNN是否可用
True

>>> torch.backends.cudnn.version()  # cudnn的版本(输出代表8.9.02版本)
8902

####################################################################### 
############ 以下命令输出只提示版本对应的关系,不代表机器上真实环境 ############
#######################################################################
$ nvidia-smi  # 输出省略

>>> torch.version.cuda  
'12.1'
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值