图文并茂讲解CUDA, CUDA Toolkit, CUDA Driver, CUDA Runtime, nvcc之间的关系及其版本兼容性

Intorduction:
跑深度学习需要用到GPU,而CUDA就是GPU和程序(如python)之间的桥梁。CUDA的环境依赖错综复杂,环境配置成为深度学习初学者的拦路虎。
同时网上教程大多为解决某个具体环境配置报错,或者分别讲解CUDA、CUDA toolkit(CUDA工具包)、CUDNN、NVCC等概念,并没有从计算机体系结构的角度将其层次化。故做此文,旨在帮助深度学习入门者从宏观上建立一个CUDA体系,而不是仅仅停留在报错才去了解的摸黑阶段。
本文尽可能采用自顶向下的金字塔式讲解,使得文章抓住主干,逻辑层次清晰。

概念介绍
先介绍CUDA是什么:
官方定义:CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序,所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。
https://baike.baidu.com/item/CUDA/1186262?fr=aladdin
通俗解释:CUDA就是让python等程序语言可以同时在CPU和GPU上跑的一个平台。
首先通过图来感受CUDA在体系结构中所在的层次。
图一图一

https://github.com/NVIDIA/nvidia-container-toolkit
我们可以清晰看到,绿色部分的CUDA,就是起了承上启下的作用。CUDA就是由CUDA驱动和CUDA工具包组成。
CUDA Toolkit在容器内部,而CUDA Driver在操作系统层。

CUDA Toolkit (nvidia): CUDA完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。
注意:这里的CUDA Toolkit指的是CUDA官网下载的完整版,不是指Pytorch附带下载的CUDA不完整版,后文有详细说明。

CUDA Driver: 运行CUDA应用程序需要系统至少有一个具有CUDA功能的GPU和与CUDA工具包兼容的驱动程序。每个版本的CUDA工具包都对应一个最低版本的CUDA Driver,也就是说如果你安装的CUDA Driver版本比官方推荐的还低,那么很可能会无法正常运行。CUDA Driver是向后兼容的,这意味着根据CUDA的特定版本编译的应用程序将继续在后续发布的Driver上也能继续工作。通常为了方便,在安装CUDA Toolkit的时候会默认安装CUDA Driver。在开发阶段可以选择默认安装Driver,但是对于像Tesla GPU这样的商用情况时,建议在官方安装最新版本的Driver。
原文链接:https://blog.csdn.net/zjy1175044232/article/details/120887377

我们单独拿出CUDA的结构:
在这里插入图片描述图二
在这里插入图片描述图三
图二图三将CUDA划分成三部分结构,最底层依然是CUDA Driver,而驱动之上的是CUDA Runtime和CUDA Libraries,则我们结合图一可以推断出,CUDA toolkit由CUDA Runtime和CUDA Libraries组成。

图二和图三还说明程序可以直接调用CUDA开发库、CUDA runtime ,CUDA驱动三部分。图四就是表达应用程序通过调用API来进行GPU上的计算。

在这里插入图片描述https://cloud.tencent.com/developer/article/1496697

在这里插入图片描述https://www.cnblogs.com/marsggbo/p/11838823.html

NVCC:NVCC是CUDA的编译器,属于runtime层,当然也属于CUDA toolkit。
cuDNN:cuDNN的全称为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络中的基础操作而设计基于GPU的加速库。cuDNN为深度神经网络中的标准流程提供了高度优化的实现方式,例如convolution、pooling、normalization以及activation layers的前向以及后向过程。
CUDA这个平台一开始并没有安装cuDNN库,当开发者们需要用到深度学习GPU加速时才安装cuDNN库,工作速度相较CPU快很多。
在这里插入图片描述安装pytorch时会选择Compute platfrom,这里的如果选择CUDA系列,会安装cuDNN和不完整的CUDA Toolkit。

CUDA Toolkit (nvidia): CUDA完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。

CUDA Toolkit (Pytorch): CUDA不完整的工具安装包,其主要包含在使用 CUDA 相关的功能时所依赖的动态链接库。不会安装驱动程序,也不会安装编译工具(nvcc)。

(NVCC 是CUDA的编译器,只是 CUDA Toolkit 中的一部分)

注:CUDA Toolkit 完整和不完整的区别:在安装了CUDA Toolkit (Pytorch)后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,不需要重新进行编译过程。如需要为 Pytorch 框架添加 CUDA 相关的拓展时(Custom C++ and CUDA Extensions),需要对编写的 CUDA 相关的程序进行编译等操作,则需安装完整的 Nvidia 官方提供的 CUDA Toolkit。
https://zhuanlan.zhihu.com/p/542319274

也就是说,pytorch带的CUDA不会安装runtime层和以下的层,包括nvcc和CUDA driver。

在这里插入图片描述https://developer.nvidia.com/zh-cn/blog/gpu-containers-runtime/
这个图是在容器内部搭建操作系统,创造一个从CUDA Driver到应用程序都完全独立的容器。说明我们可以唉不同的层次进行容器的封装,可以从runtime以上封装容器(通常虚拟环境是runtime以上的),也可以直接从操作系统开始封装。

在这里区分一下Docker和虚拟环境的区别:
虚拟环境只是隔离了Python程序的依赖项,即在一个虚拟环境中,包含了特定版本的Python解释器和Python库,当激活该虚拟环境时,会屏蔽掉虚拟环境以外Python解释器和Python库。
而docker可以隔离整个系统,更接近虚拟机。同时docker可以有不同层次的封装。
https://www.saoniuhuo.com/question/detail-2432744.html

虚拟环境的隔离类似于图1,多个虚拟环境共用CUDA Driver,也可以共用CUDA runtime。因此在一个虚拟环境中安装附带CUDA的pytorch时,不会安装CUDA runtime以及CUDA驱动,只会安装已经编译好的CUDA函数库。因此如果缺少CUDA runtime(缺少nvcc),Pytorch依然可能可以正常在GPU上运行,在有CUDA驱动的前提下。
但是如果有python setup.py build develop等需要nvcc的命令,则必须保证有和CUDA函数库相同版本的CUDA runtime(包括nvcc),否则会报错。之后的版本兼容性会进一步说明。

版本兼容性问题:
首先是CUDA版本要和GPU算力相匹配,如A100的算力是8.0,需要CUDA版本大于11.0
查看GPU与算力对应:https://en.wikipedia.org/wiki/CUDA
在这里插入图片描述
查看算力对应的CUDA版本:原链接未找到,但是bilibiliup主"我是土堆"在视频中提到过,图片如下:
在这里插入图片描述之后是CUDA driver版本和CUDA runtime版本的对应关系:
CUDA driver版本需要大于等于CUDA runtime版本
CUDA driver版本通过nvidia-smi命令查看:
在这里插入图片描述可以看到,我的CUDA Driver版本是11.7

CUDA runtime版本通过 nvcc --version查看,如果报错,可能是因为没有下载CUDA runtime,也有可能是没有将CUDA rumtime添加到环境依赖中。报错的具体解决方案在此不再赘述,直接问百度或者谷歌或者chatGPT报错信息即可。

在这里插入图片描述
可以看到我的nvcc版本是11.4,即runtime版本是11.4<=11.7的CUDA Driver版本,因此适配。

之后是CUDA runtime版本需要和CUDA Libraries版本适配。
CUDA Libraries如果是如果pytorch附带下载的CUDA toolkit(不完整版),需要选择小于等于nvcc --version的版本下载。我的nvcc是11.4,因此我需要下载小于等于11.4版本的CUDA toolkit(不完整版)。可以看到官网页面只有11.6和11.7的版本,因此需要找历史版本:https://pytorch.org/get-started/previous-versions/
在这里插入图片描述找到了pytorch附带小于等于11.4的CUDA toolkit(不完整版)
在这里插入图片描述在这里插入图片描述
再次说明:Pytorch 接口输出的 cuda 的版本并不一定是 Pytorch 在实际系统上运行时使用的 cuda 版本,而是编译该 Pytorch release 版本时使用的 cuda 版本。也就是说,我pytorch下载的CUDA是已经编译好的版本,编译时使用的是11.3的nvcc

注意:之前查阅资料时,并没有博客提出需要让pytorch 附带的CUDA toolkit(不完整版)小于等于CUDA runtime版本。但是在我复现论文时,在使用pytorch1.13.0 pytorch-cuda=11.7时遇到了RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu)的错误,通过降低Pytorch和CUDA toolkit(不完整版)的版本,即conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit=11.3 -c pytorch,解决了这个问题。
我复现的论文因为有python setup.py build develop命令,因此需要使用nvcc编译,如果nvcc版本小于CUDA toolkit(不完整版),则很可能出错。因此我推测是因为pytorch附带的CUDA toolkit版本过高导致。
(挖个坑:之后可以通过控制变量法实验进一步验证该结论,具体方式是安装pytorch==1.12.1和cuda11.6的版本,若报相同错误则说明确实是CUDA的问题而非pytorch的问题。)
遇到相同问题的博客:
https://blog.csdn.net/Chemist_Dong/article/details/128012131

最终是cuDNN要和CUDA libraries版本要适配,pytorch等框架的版本也要和cuDNN版本适配,应用程序要和pytorch框架适配。
这三个适配具体实现方法很简单,对与pytorch来说,在官网下载CUDA版本的pytorch,会自动下载适配的cuDNN,CUDA libraries以及适配的Pytorch。
旧版本的pytorch程序通常能够在新版本的pytorch框架内正常运行(当然python2不能在python3环境中运行)。

在这里插入图片描述最后再回过头看该图,会清晰很多。总结兼容性问题:高版本底层通常兼容低版本的上层,反之通常不行。在某博客上看到一个解释:上层可能加入一个新的功能,如果底层没有对应的实现则报错。但是底层通常会保证之前的软件可以移植过来。
因此底层通常向后兼容(backward)。因为中文的前后有歧义,所以我喜欢翻译成向过去兼容。
确定了GPU的型号就确定了算力,高算力需要匹配高版本CUDA。
CUDA Driver版本(nvidia-smi命令查看)需要大于等于CUDA runtime版本(nvcc --version命令查看)
CUDA runtime版本需要大于等于CUDA libraries版本(Pytorch附带下载的CUDA toolkit版本)

因此从头配置完整的深度学习CUDA环境的操作为:
1.保证系统至少存在一块GPU
2.在虚拟环境中查看nvidia-smi和nvcc --version,若nvcc --version小于nvidia-smi,则适配。
2.若确认不存在nvcc和CUDA驱动,官网安装CUDA Driver和完整版的CUDA toolkit(部分博客说安装CUDA toolkit时会同时安装CUDA Driver,未验证)
3.创建虚拟环境,具体流程请自行百度。
5.下载CUDA版本小于等于nvcc --version的pytorch及其附带的CUDA toolkit(不完整版)

大部分深度学习并不需要完整的CUDA toolkit 因此简化版的操作为:
1.保证系统存在至少一块GPU
2.查看nvidia-smi,确认有驱动
3.若无驱动需要官网安装
4.创建虚拟环境
5.安装附带CUDA toolkit(不完整版)pytorch

如果没有GPU,或者想要快速跑通简单的深度学习程序,可以用CPU版本的pytorch,则不需要安装驱动。直接在用conda创建虚拟环境然后安装pytorch即可。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈钱不丢人,但请实事求是

这是头哥侃码的第286篇原创 诺贝尔文学奖得主莫言&#xff0c;他曾在一次采访中说过这样一句话。 “一个人&#xff0c;可以被生活打败&#xff0c;但是不能被它打倒。” 的确&#xff0c;每个人都会遇见自己的人生艰难时刻&#xff0c;像我几个月前那样&#xff0c;突然从快节…

以太网之父鲍勃·梅特卡夫获2022图灵奖,76岁进入新领域再出发!

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 3 月 22 日&#xff0c;计算机协会 ACM 授予 鲍勃梅特卡夫&#xff08;Bob Metcalfe &#xff09;为 2022 年 ACM 图灵奖的获得者&#xff0c;以表彰以太网发明的标准化和商业化。 &…

计算机网络之TCP协议详解

系列文章目录 第一章 计算机网络之http协议详解 第二章 计算机网络之https协议详解 第三章 计算机网络之TCP协议详解 文章目录 系列文章目录前言TCP 传输控制协议TCP的封装格式三次握手四次断开/四次挥手计时器重传计时器——为了控制丢失的数据段坚持计时器——为了防止零窗口…

ROS-Noetic版本的安装(Ubuntu20.04环境)

ROS安装&#xff1a; 关于ROS的安装已经有很多好的博文供以参考&#xff0c;本文总结了一些安装过程中可能出现的报错情况已经解决方法。许多博文的教程步骤大差不差&#xff0c;建议是直接先按照官方步骤走&#xff0c;遇到问题再一步步解决。 ROS官方的参考链接&#xff1a; …

【机器学习】pytorch安装——环境配置(极简教程)

&#x1f951; Welcome to Aedream同学 s blog! &#x1f951; 文章目录 省流总结新建环境确定显卡型号安装显卡驱动安装pytorch国内镜像下载本地下载 验证安装成功 最近重新配置环境&#xff0c;简单记录一下。最近chatgpt等大语言模型和ai绘图火热&#xff0c;也为了方便很多…

淘宝天猫重组换血,原核心高管离职;Google Bard 大更新,数学和逻辑能力有所提升;K8s 1.27 发布|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

【Redis】缓存一致性

文章目录 缓存一致性读缓存**双检加锁**策略 写缓存保障最终数据一致性解决方案先更新数据库&#xff0c;再更新缓存案例演示1->更新缓存异常案例演示2->并发导致 先更新缓存&#xff0c;再更新数据库案例演示->并发导致 先删除缓存&#xff0c;再更新数据库案例演示-…

Composer - 学习/实践

1.应用场景 熟练使用composer快速构建php web应用, 弄秦楚composer的基本工作原理. 2.学习/操作 文档 php三种工具pecl pear composer的区别_会飞的鱼的博客-CSDN博客_php-pear Composer 2.0 is now available! // Composer 2.0 is now available! 介绍 A multi-framework Co…

解读最佳实践:倚天 710 ARM 芯片的 Python+AI 算力优化 | 龙蜥技术

编者按&#xff1a;在刚刚结束的 PyCon China 2022 大会上&#xff0c;龙蜥社区开发者朱宏林分享了主题为《ARM 芯片的 PythonAI 算力优化》的技术演讲。本次演讲&#xff0c;作者将向大家介绍他们在倚天 710 ARM 芯片上开展的 PythonAI 优化工作&#xff0c;以及在 ARM 云平台…

解读最佳实践:倚天710 ARM芯片的 Python+AI 算力优化

编者按&#xff1a;在刚刚结束的 PyCon China 2022 大会上&#xff0c;龙蜥社区开发者朱宏林分享了主题为《ARM 芯片的 PythonAI 算力优化》的技术演讲。本次演讲&#xff0c;作者将向大家介绍他们在倚天 710 ARM 芯片上开展的 PythonAI 优化工作&#xff0c;以及在 ARM 云平台…

论文笔记:AugGPT: Leveraging ChatGPT for Text Data Augmentation

AugGPT&#xff1a;利用 ChatGPT 进行文本数据增强 摘要1 介绍2 相关工作2.1 数据增强2.2 小样本学习2.3 超大型语言模型2.4 ChatGPT&#xff1a;现在与未来 3 数据集3.1 亚马逊数据集3.2 症状数据集3.3 PubMed20k数据集 4 方法4.2 使用 ChatGPT 进行数据增强4.3 小样本文本分类…

好用的文献阅读插件(Easy Scholar、EasyPubMedicine、Sci-Hub X Now!)

目录 一、Easy Scholar 二、EasyPubMedicine 一、Easy Scholar Easy Scholar&#xff1a;自动显示期刊等级&#xff0c;帮助筛选优质论文。 安装&#xff1a; 点击浏览器右上角的“。。。”&#xff0c;选择“扩展”。 点击打开加载项 在浏览器的扩展商店中搜索“easy sch…

Zotero 6 文献管理 + 内置PDF阅读器 + 选中翻译

本来想叫《还在用知云&#xff1f;zotero 6内置PDF阅读器了 还带翻译插件的&#xff01;》&#xff0c;想了想还是算了&#xff0c;不要做标题党&#xff0c;回归我朴实无华的标题吧。 如果你会用zotero只是来看翻译功能的&#xff0c;那你继续往下看。如果你还不会用zotero&a…

[科研神器]如何让ChatPDF帮你日读文献300篇

今天介绍一个新的工具ChatPDF&#xff0c;简直是读文献的绝对生产力啊。 我们要做的就是把PDF文件上传给它&#xff0c;让它帮你读&#xff0c;它会在几分钟内概述和理解整个文档你只需要提问就可以&#xff0c;而且支持中文。 ChatPDF的网址是&#xff1a;https://www.chatp…

【3款文献阅读的插件】

目录 01 easy Scholar 02 EasyPubMed 03 Sci-Hub X Now! 04 总结 重要事情说三遍&#xff1a;这个不涉及翻墙&#xff0c;这个不涉及翻墙&#xff0c;这个不涉及翻墙&#xff01;&#xff01;&#xff01; 01 easy Scholar 点击下载文件&#xff0c;修改后缀名为zip文件&a…

文献阅读软件

文献阅读软件 上次对文献管理软件做了介绍&#xff0c;接下来对文献阅读及笔记整理软件进行介绍。 文献的基本格式是PDF&#xff0c;因此文献阅读软件的基本就是PDF阅读器&#xff0c;知网文献有专门的格式&#xff0c;没什么额外选择。因此&#xff0c;本文主要介绍的是PDF的…

文献阅读神器 ReadPaper

在以前我阅读文献的都是用的WPS&#xff0c;很多小伙伴用知云&#xff0c;但是今天我开始用ReadPaper了&#x1f604; 推荐理由&#xff1a; 1.直接跳转参考文献 在一篇论文中参考文献&#xff0c;ReadPaper可以直接跳转阅读&#xff0c;不需要再去复制论文名字-搜索了。 就…

Python 带你花式过情人节

阅读文本大概需要 5 分钟。 一年 N 度的情人节又又又又又到了&#xff01;有对象的人在享受着甜蜜的烦恼&#xff1a;今天 ta 会送我什么礼物&#xff1f;今天晚上去哪里度过&#xff1f;今天去哪里一起吃饭过节呢&#xff1f;啊&#xff01;ta 竟然送我这么贵的礼物&#xff0…

这个情人节如何过得不一样?快来看哪个国家才是全球浪漫目的地 | 美通社头条...

美通社消息&#xff1a;这个情人节如何过得不一样&#xff1f;爱彼迎近期发布全球浪漫目的地&#xff0c;邀请情侣们住进令人怦然心动的房源&#xff0c;奔赴一场倾心已久的旅程。爱彼迎数据显示&#xff0c;泰国、马来西亚、菲律宾、巴西、南非等目的地&#xff0c;满足了情侣…

得分逼近ChatGPT,人类难以分辨!开源「原驼」爆火,iPhone都能微调大模型了

梦晨 发自 凹非寺来源 | 量子位 QbitAI 自动测试分数达到ChatGPT的99.3%&#xff0c;人类难以分辨两者的回答…… 这是开源大模型最新成果&#xff0c;来自羊驼家族的又一重磅成员——华盛顿大学原驼&#xff08;Guanaco&#xff09;。 更关键的是&#xff0c;与原驼一起提出的…