神枪霸王显卡:(GPU)主流是Nvidia的GPU,深度学习本身需要大量计算。GPU的并行计算能力,在过去几年里恰当地满足了深度学习的需求。AMD的GPU基本没有什么支持,可以不用考虑。
驱动:没有显卡驱动,就不能识别GPU硬件,不能调用其计算资源。但是呢,Nvidia在Linux上的驱动安装特别麻烦,尤其对于新手简直就是噩梦。得屏蔽第三方显卡驱动。下面会给出教程。
CUDA:是Nvidia推出的只能用于自家GPU的并行计算框架。只有安装这个框架才能够进行复杂的并行计算。主流的深度学习框架也都是基于CUDA进行GPU并行加速的,几乎无一例外。还有一个叫做cudnn,是针对深度卷积神经网络的加速库。
上周在一台服务器上配环境配了两天才配好,踩坑同时也发现自己对于GPU与并行计算的基础知识所知甚少,因此学习总结一下。
这篇文章写的非常详细,值得仔细阅读,显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn区别?,下面结合自己的理解总结一下。
官方定义:CUDA是NVIDIA创建的一个并行计算平台和编程模型,它不是编程语言,也不是一种API。
官方定义: NVIDIA CUDA®深度神经网络库(cuDNN)是一个用于深度神经网络的GPU加速库。cuDNN为标准例程(如前向和后向卷积、池化、归一化和激活层)提供了高度优化的实现。
但深度学习训练的时候不装CUDNN也能训练(此处存疑,我没有装但是还可以正常训练,也可能是系统原本装好了)。
通常情况下,这两个显示都是不一样的,不过不用担心,只要driver API比runtime API高,一般都没问题。但是我自己的例子却证明了版本差太多是有问题的,我遇到的问题见下面问题7。
别人装过了,生成了/tmp/cuda-installer.log,把这个文件删了就好了。参考链接
由此可以说明两个driver应该不能差一个大版本。一个同事也跟我说RTX 3090不支持cuda10.2,这个不支持应该指的就是驱动不匹配。
开篇:3090的环境已经平稳运行1年,随着各大厂商(Tensorflow、Pytorch、Paddle等)努力适配CUDA 11.x版本,对3090的GPU支持在逐渐完善,对于早期(CUDA 11.0 或 11.1)的服务器环境也迫切需要升级到适应最新版本CUDA 11.2 及以上。文章尽力把的整个过程升级过程写清楚,让小白能够理解,如有不足之处,也请大家指导。
对于个人深度学习玩家,20、30系列游戏卡显卡(非Tesla、P系列等),如果新安装环境,建议使用10.2或11.2版本,适用更广。
正常来讲docker内的 CUDA版本和 宿主机(物理机)无关,但是这个错误(忘截图了....),让我重新思考 docker内CUDA版本 和宿主机Nvidia驱动之间的关系。
从CUDA 11.x 以后 已经可以对 编译后的程序进行向后兼容(原文如下),也就是 程序编译发布后,是可以升级CUDA。并给出了最低驱动版本 450.80.02,这也是很多博主贴图的依据。
说到这里我们要看看CUDA SDK构成,这是我的知识盲点(反正是一个SDK包,没有在意具体里面包含什么)
明白三部分构成后,Nvida公司向后兼容仅是运行环境,提供了一个compatibility mode(兼容模式),如果你是开发者,最小(= 450.80.02)的驱动版本仅能保证 编译后的CUDA程序可以运行。
用大白话讲:宿主机(物理主机)的Nvidia GPU 驱动 必须大于 CUDA Toolkit要求的 Nvida GPU 驱动版本。否则 对于开发者 CUDA Toolkit就不能用(仅是运行环境 向后兼容)。
宿主机(物理机)的 Nvidia GPU 驱动 选择 高版本, 更容易 兼容你Docker内不同CUDA的驱动要求。
API 会改变,二进制兼容性会被破坏(编译环境和 和二进制兼容性都不保证)
API会增加新的函数,弃用一些API,编译环境可能会破坏,但是 二进制兼容性会保持。
看到这里,大家应该理解,为啥要升级 宿主机的 驱动版本了吧,即使Docker的CUDA和主机无关,但是Docker和宿主机的驱动有关,为了保证CUDA Toolkit的Nvidia GPU 驱动要求,主机需要升级 Nvidia GPU 驱动。
总结:现在明白为什么需要一个更新的驱动程序了吧,CUDA兼容仅限运行环境,下次详细些升级过程。加油吧:)分享知识不收费,也请“点赞”鼓励我,努力为大家呈现更多精彩原创内容:)
最底层是装有显卡的计算机,计算机安装有操作系统,显卡驱动(GPU Driver)基于操作系统,CUDA是在驱动之上提供给软件开发人员的一个编程库,现在多应用在并行计算等科学和工程研究领域。
显卡:相当于一个小型的电脑系统,显卡这块PCB板,就好比电脑的主板,上面焊接了GPU核心(CPU),同时还有显存(内存),供电模块,散热。属于硬件层面。
显卡驱动:相当于介绍显卡的名片,告诉操作系统(Win10),这个显示设备叫什么,使用这个显示设备需要哪些文件,就好比用一些词语、句子来描述一个人。属于软件层面。
而CUDA:是全球两大电脑GPU生产商NVIDIA和AMD之中NVIDIA开发的一套并行运算平台,可以利用NVIDIA旗下显卡(AMD的不支持)的架构特性,进行科学计算,比如现在大热的人工智能等等,都需要GPU来协助进行计算。你可以把CUDA想象成NVIDIA公司提供的一个计算平台,你在这个平台上,可以使用NV公司提供给你的各种便捷计算工具来进行计算,不需要你自己再来开发这些工具。
简单来讲,比如,我们要算100000次从1加到10000000,如果利用一个4线次,而用GPU(假如它是1000个线程),性能相同的情况下,AMD的这个1000线线次。但是现在如果使用CUDA,它能提供一种类似高斯“1加到50,利用首尾相加再除以2”的方法来简化计算,那么使用CUDA后的NV显卡可能只需要计算200次,可见效率提高了很多。
总之,显卡是硬件层面的,好比汽车,需要显卡驱动这个“人”来驾驶,而CUDA就是NVIDIA牌汽车上的驾驶辅助系统,帮助你驾驶,就是这么简单。
自己配置环境确实总是会有各种各样的问题,在这里比较推荐大家在智星云租用GPU,环境都是配置好的,性价比很高
|