显卡、显卡驱动、cuda 之间的关系是什么?

论坛 期权论坛 期权     
匿名用户1024   2021-5-25 14:34   6190   5
新手菜鸟小白,刚学习深度学习,安装了caffe,打算配置gpu加速。
显卡是geforce gtx 745(比较低端),在ubuntu系统下,安装了cuda8.0(过程中附带重新安装了显卡驱动375.26),最终显示安装成功。
但是回到图形界面发现ubuntu系统的分辨率降低,且设置里无法更改,所有图标、文字等等全都变得很大;使用nvidia-smi也找不到显卡驱动,但是使用nvcc -V能查到cuda信息;官网安装教程里还让检验device node,看是否存在dev/nvidia*文件,不存在的话手动用setup script生成,我的就不存在,且无法(可能是我的方法不对)生成。结果就是:显卡有问题,cuda安装好了。
现在我觉得是安装的显卡驱动的问题。
在官网上查了其他符合版本重新安装,也还是一样出现上述问题。
想知道显卡,显卡驱动,和cuda之间是怎样的关系?他们的版本对彼此有啥影响?为什么安装cuda之前要重新安装显卡驱动?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
有关回应  16级独孤 | 2021-5-25 14:34:28
硬件,底层接口,应用程序接口
3#
有关回应  16级独孤 | 2021-5-25 14:34:29
显卡:(GPU)主流是Nvidia的GPU,深度学习本身需要大量计算。GPU的并行计算能力,在过去几年里恰当地满足了深度学习的需求。AMD的GPU基本没有什么支持,可以不用考虑。


驱动:没有显卡驱动,就不能识别GPU硬件,不能调用其计算资源。但是呢,Nvidia在Linux上的驱动安装特别麻烦,尤其对于新手简直就是噩梦。得屏蔽第三方显卡驱动。下面会给出教程。

CUDA:是Nvidia推出的只能用于自家GPU的并行计算框架。只有安装这个框架才能够进行复杂的并行计算。主流的深度学习框架也都是基于CUDA进行GPU并行加速的,几乎无一例外。还有一个叫做cudnn,是针对深度卷积神经网络的加速库。

驱动安装教程:


4#
有关回应  16级独孤 | 2021-5-25 14:34:30
显卡/GPU是具体干活的芯片,其从host端拿命令和数据。显卡驱动,分内核态和用户态两部分。内核态驱动只管将用户态驱动发过来的命令和数据准备好,通知GPU来拿,利用环形fifo来下发命令和数据指针,并追踪命令的完成状态。用户态部分,负责对shader程序的编译,编译成GPU的二进制代码指令。OS提供的D3D,OpenGL等函数库,屏蔽底层不同显卡的差异。上层程序比如游戏,在准备好对应的模型、贴图纹理、着色器程序等数据之后,调用统一的D3D/OpenGL接口发起绘制请求,D3D则调用显卡用户态驱动提供的回调函数将对应的数据传递给后者,后者进行运行时编译生成底层代码,然后传递给内核态驱动,内核态驱动将命令和数据发送给GPU。至于GPU怎么算的,那就是完全另外一回事了。
那么,GUDA又是什么呢。CUDA就是通用计算,游戏让GPU算的是一堆像素的颜色,而GPU完全可以算其他任何运算,比如大数据量矩阵乘法等。同样,程序准备好对应的数组,以及让GPU如何算这些数组的描述结构(比如让GPU内部开多少个线程来算,怎么算,之类),这些数据和描述,都要调用CUDA库提供的函数来传递给CUDA,CUDA再调用显卡用户态驱动对CUDA程序进行编译,后者再调用内核态驱动将命令以及编译好的程序数据传送给GPU,算。CUDA,就是相当于一个专门与通用程序而不是图形程序对接的库,那么它的角色和地位与D3D/OpenGL在系统架构层次中是齐平的。
附录,比较有用的。

5#
有关回应  16级独孤 | 2021-5-25 14:34:31
用一张图表示为:





最底层是装有显卡的计算机,计算机安装有操作系统,显卡驱动(GPU Driver)基于操作系统,CUDA是在驱动之上提供给软件开发人员的一个编程库,现在多应用在并行计算等科学和工程研究领域。
显卡:相当于一个小型的电脑系统,显卡这块PCB板,就好比电脑的主板,上面焊接了GPU核心(CPU),同时还有显存(内存),供电模块,散热。属于硬件层面。
显卡驱动:相当于介绍显卡的名片,告诉操作系统(Win10),这个显示设备叫什么,使用这个显示设备需要哪些文件,就好比用一些词语、句子来描述一个人。属于软件层面。
CUDA:是全球两大电脑GPU生产商NVIDIA和AMD之中NVIDIA开发的一套并行运算平台,可以利用NVIDIA旗下显卡(AMD的不支持)的架构特性,进行科学计算,比如现在大热的人工智能等等,都需要GPU来协助进行计算。你可以把CUDA想象成NVIDIA公司提供的一个计算平台,你在这个平台上,可以使用NV公司提供给你的各种便捷计算工具来进行计算,不需要你自己再来开发这些工具。
简单来讲,比如,我们要算100000次从1加到10000000,如果利用一个4线程CPU,需要100000/4=250000次,而用GPU(假如它是1000个线程),性能相同的情况下,AMD的这个1000线程的GPU要算1000000/1000=1000次,NV的这个1000线程的GPU也是1000次。但是现在如果使用CUDA,它能提供一种类似高斯“1加到50,利用首尾相加再除以2”的方法来简化计算,那么使用CUDA后的NV显卡可能只需要计算200次,可见效率提高了很多。
总之,显卡是硬件层面的,好比汽车,需要显卡驱动这个“人”来驾驶,而CUDA就是NVIDIA牌汽车上的驾驶辅助系统,帮助你驾驶,就是这么简单。
自己配置环境确实总是会有各种各样的问题,在这里比较推荐大家在智星云租用GPU,环境都是配置好的,性价比很高
6#
有关回应  16级独孤 | 2021-5-25 14:34:32
CPU:中央处理器,主要为串行指令而优化(大白话:响应速度快)。
GPU:图形处理器,主要为大规模的并行运算而优化(大白话:能同时处理大规模数据计算)。
GPU也称显示芯片、显卡等。一般有集成(嵌在主板上)和非集成(可插拔)两种。后者自然需要一套软件来让CPU操作GPU。这个软件程序就叫显卡驱动。软件需要编译,自然高度依赖操作系统,因此即使同样型号的显卡在不同操作系统一般需要的驱动也不一样。
那CUDA又是什么?
话说在2007年之前,GPU由CPU操作,CPU把一些图形图像的计算任务交给GPU执行。程序员不需要与GPU打交道。随着GPU计算能力的发展,越来越多的计算场景由GPU完成效果会更好。但现有的程序无法直接自由控制GPU的处理器。当然程序员也可以直接写代码与显卡驱动对接,从而直接控制GPU的处理器,但这样代码恐怕写起来要让人疯掉。
GPU由英伟达最初推出,目前为止自然也是它一家独大。但程序员不愿意与显卡驱动对接,英伟达很着急。
想要把自家产品的性能发挥到最高,英伟达当然会有动力提供一套软件接口来简化操作GPU的处理器。英伟达把这一套软件定义为CUDA(Compute Unified Device Architecture,统一计算架构)。大白话就是英伟达开发的一套软件,方便程序员直接操控自家的显示芯片。
(注:本人18线小码农一枚,擅长一本正经的胡说八道,以上内容不保证正确)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:136515
帖子:27303
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP