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

news2025/1/19 2:19:31

彻底搞清楚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/cuda/shared/cudnn.cpp是空的。到这线索就断了。

结论

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

##################################################### 
############ 以下的命令是反映机器上真实环境的 ############ 
##################################################### 
$ 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'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1496327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wireshark——获取捕获流量的前N个数据包

1、问题 使用Wireshark捕获了大量的消息,但是只想要前面一部分。 2、方法 使用Wireshark捕获了近18w条消息,但只需要前5w条。 选择文件,导出特定分组。 输入需要保存的消息范围。如:1-50000。 保存即可。

阿里云2核4G服务器支持人数并发测试,2核4G主机测评

阿里云2核4G服务器多少钱一年?2核4G配置1个月多少钱?2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

Docker部署ruoyi前后端分离项目

目录 一. 介绍前后端项目 二. 搭建局域网 2.1 创建网络 2.2 注意点 三. Redis 3.1 安装 3.2 配置redis.conf文件 3.3 测试 四. 安装MySQL 4.1 安装 4.2 配置my2.cnf文件 4.3 充许远程连接 五. 若依部署后端服务 5.1 数据导入 5.2 使用Dockerfile自定义镜像 5.3 运行…

青少年如何从零开始学习Python编程?有它就够了!

文章目录 写在前面青少年为什么要学习编程 推荐图书图书特色内容简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家带来一本非常适合青少年学习编程的图书,快来看看吧~ 青少年为什么要学习编程 青少年学习编程,就好比在他们年轻时就开始掌握一种…

[C语言]——分支和循环(2)

目录 一.逻辑操作符:&& , || , ! 1.逻辑取反运算符! 2.与运算符&& 3.或运算符 4.练习:闰年的判断 5.短路 二.switch语句 1.if语句和switch语句的对比 2.switch语句中的break 3.switch语句中的default 4.switch…

docker 数据卷 详解与实践

常见的数据卷命令 命令 说明 文档地址 docker volume create 创建数据卷 docker volume create docker volume ls 查看所有数据卷 docs.docker.com docker volume rm 删除指定数据卷 docs.docker.com docker volume inspect 查看某个数据卷的详情 docs.docker.co…

MIT 6.S081---Lab: Multithreading

Uthread: switching between threads (moderate) 修改uthread.c,在thread中新增context字段: 修改uthread.c,在thread_create函数中新增以下逻辑: 修改uthread.c中的thread_switch函数定义: 修改uthread.c中的th…

代码随想录算法训练营第三十八天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 刷题https://leetcode.cn/problems/fibonacci-number/description/文章讲解https://programmercarl.com/0509.%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE视频讲解https://www.bilibili.com/video/BV…

框架漏洞--->Log4j2 Shiro1.2.4反序列化基础

上次讲了thinkphp 那么这次我们就来讲一下log4j2 1.关于log4j2的原理 ----> CVE-2021-44228 当时这个漏洞出来的时候,可以说是轰动了全球~!!!!! 当时基本上是用这个框架的都爆出了这个漏洞 于是,它就在框架漏洞中占有了一席重要之地!&am…

【C语言 数据结构】堆与二叉树(下)

接着上次的,这里主要介绍的是堆排序,二叉树的遍历,以及之前讲题时答应过的简单二叉树问题求解 堆排序 给一组数据,升序(降序)排列 思路 思考:如果排列升序,我们应该建什么堆&#x…

Redis面试题(答案版)2024

基础内容 1、简单介绍以下你了解的Redis (1)高性能:Redis是基于内存的,读写速度非常快,可以支持10w的QPS。 (2)用途多样:缓存、消息队列、分布式锁等 (3)支持…

物联网电气融合实训室建设方案

1 教学实训总体设计 1.1 建设背景 (一)政策推动与战略部署 近年来,物联网技术在全球范围内得到了广泛的关注和应用。作为信息技术的重要组成部分,物联网在推动经济转型升级、提升社会管理水平、改善民生福祉等方面发挥着重要作…

ChatGPT高效提问——说明提示技巧

ChatGPT高效提问——说明提示技巧 现在,让我们开始体验“说明提示技巧”(IPT, Instructions Prompt Technique)和如何用它生成来自ChatGPT的高质量的文本。说明提示技巧是一个通过向ChatGPT提供需要依据的具体的模型的说明来指导ChatGPT输出…

FPGA-串口接收图像写入RAM并读出在TFT显示屏上显示

系统框图: 需要用到的模块有: 1,UART_RX(串口接收模块); 2,串口接受的数据存放到RAM模块; 3,RAM IP核; 4,时钟IP核 (TFT显示屏驱动时钟的产生&#xff09…

理解循环神经网络(RNN)

文章目录 1. 引言:什么是RNN以及它的重要性RNN简介RNN在机器学习中的作用和应用场景 2. RNN的工作原理神经网络基础RNN的结构和运作方式循环单元的作用 3. RNN的关键特点与挑战参数共享长期依赖问题门控机制(例如LSTM和GRU)代码示例&#xff…

【Vue】vue3 在图片上渲染 OCR 识别后的文本框、可复制文本组件

需求 后面返回解析后的文本和四角坐标,在图片上渲染成框,并且可复制。图片还可以缩放、拖拽 实现 这里要重点讲下关于OCR文本框的处理: 因为一些文字可能是斜着放的,所有我们要特殊处理,根据三角函数来计算出它的偏…

openEuler学习——部署MGR集群

本文介绍如何利用GreatSQL 8.0.25构建一个三节点的MGR集群。 1.安装准备 IP端口角色192.168.20.1103306mgr1192.168.20.1113306mgr2192.168.20.1123306mgr3 配置hosts解析 [rootMGR1 ~]# cat >> /etc/hosts << EOF > 192.168.20.110 MGR1 > 192.168.20.1…

小程序商城营业执照办哪种类型的?

在数字化浪潮的推动下&#xff0c;越来越多的商家选择通过微信小程序商城来拓展线上业务。但在启动小程序商城之前&#xff0c;有一项关键性的准备工作不可忽视——那就是营业执照的办理。本文将为您详细解读小程序商城营业执照的办理类型及相关流程步骤&#xff0c;帮助您顺利…

虚拟机时间同步主机

1.查看是否设置同步 2.查看时区 date -R 0800 表示时区东八区 明显不对 执行指令&#xff1a; tzselect &#xff1b;找到亚洲-中国-北京 3.覆盖一下文件 复制文件到 /etc/localtime 目录下&#xff1a;#sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 4.重现查…

【DAY08 软考中级备考笔记】机组:计算机组成和数据转换

机组&#xff1a;计算机组成和数据转换 3月2日 – 天气&#xff1a;晴 1. 计算机的基本组成结构 计算机的硬件由运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入和输出设备组成其中&#xff0c;控制器和运算器成为CPU控制器又分为了内部存储器和外部存储器。内部…