1 GPU和CUDA之间的关系:
GPU(Graphics Processing Unit)即图形处理器,又称显示核心、视觉处理器、显示芯片,是一种专门作图像运算工作的微处理器。
CUDA(Compute Unified Device Architecture)是一种将GPU作为数据并行计算设备的软硬件体系,是显卡厂商NVIDIA在2007年推出的并行计算平台和编程模型。它利用图形处理器(GPU)能力,实现计算性能的显著提高。
cuda包含三大组件,分别是 NVIDIA driver(驱动)、toolkit 和 samples。
driver driver 和toolkit可以分开安装,并且同一台主机上两者支持的CUDA版本可以不一样,只要保证 driver cuda version >= toolkit cuda version driver 安装后会提供nvidia-smi命令,会显示GPU硬件信息以及支持的CUDA版本等。而nvcc命令是toolkit提供的,因此,在没有nvcc的情况下,也可能有nvidia-smi命令。所以nvidia-smi显示的就是驱动API driver包含函数库libcuda.so,该函数库提供对 CUDA driver API 的访问。
toolkit
toolkit负责的是runtime API
toolkit包含函数库libcudart.so,该函数库提供了对 CUDA runtime API 的访问,以及nvcc编译器等。
toolkit同样也包含NVIDIA driver 的安装包,但是在安装过程中可以选择提前单独安装NVIDIA driver,再安装NVIDIA toolkit,这就有可能导致 driver 和 toolkit 显示的CUDA版本不一样。
可以看到在我的台式电脑上driver API 和 runtime API 是不相同的。之后我进入虚拟环境,在虚拟环境中根据我的驱动API的版本cuda11.2下载了cuda11.1的pytorch,因为pytorch官网上最高的cuda版本就是11.2,
之后在import torch,查看cuda的版本以及是否可用。
此时奇怪的事情发生了:
可以看到这个时候torch中输出的cuda版本是11.1,为什么呢?
再次打开pytorch的官网,发现它的这个命令帮我们下载了cudatoolkit=11.1,所以在torch里面cuda的版本是11.1,那么这个时候我再使用nvcc -V 的话会输出什么呢?
奇怪的事情又发生了:
此时的输出还是9.1,真是太操蛋了。
为什么会有两个不一样的运行时API 呢,因为我们知道nvcc-V这样显示的其实就是一个运行时API。
此时我看到了一个这样的表述:
什么意思呢?
也就是说我们通过nvcc-V显示出来的是系统的CUDA版本,现在的问题是我们的系统上的CUDA版本和torch中的不一样。
那么这个系统的CUDA在哪里呢?
我找了一下发现在这:
打开其中的文件发现,这里也是写着9.1,所以现在的任务是什么呢?
自然是给我们的系统的CUDA进行一下更新。
这又是一个非常让人…的事情,操蛋的事情。 首先我们对系统中的原来的版本进行删除
sudo apt-get purge nvidia* 运行这个将系统中现存的nvidia相关文件进行删除。 sudo ubuntu-drivers autoinstall 接着运行这个,安装驱动,因为上一步删除了一些老的驱动版本 但是安装可能会遇到一些问题 查询硬件信息: lspci | grep -i vga 自身硬件可以安装的最新驱动https://www.nvidia.com/Download/Find.aspx?spm=a2c4g.163824.0.0.543b7710uYqulv&lang=cn 安装还是按照这个来: =========================================================== 通过这个网站看驱动和cuda之间的对应关系:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html 接下来就是安装cuda了,这里说的安装cuda其实主要就是安装cudatoolkit这个东西,其实就是一个功能包。这是官网地址,去这里安装 选择和自己电脑匹配的版本,刚开始呢 我是按照网上的教程,选择的是runfile,但是死活就是安装不掉就是出错: 之后我就选择下载那个deb版本的了,按照那个官网上的步骤来就行。
安装完成之后 运行 nvcc -V 看看能不能运行,如果不行,那就是我们安装的CUDA的地址还不在PATH中,所以
export PATH=/usr/local/cuda-x.x/bin: PATH export LD_LIBRARY_PATH=/usr/local/cuda-x.x/lib64:$LD_LIBRARY_PATH 这样就差不多了!
又出现问题
解决方法,直接重启电脑即可
ok
nvidia-smi显示的更像是硬件的显卡信息, nvcc -V 是使用硬件的软件,所以它的版本不能高于我们硬件的版本!
20231122 “根据我的理解,驱动可以看做是操作系统的一部分,而固件则是硬件的一部分,内置在硬件的芯片里。也就是说驱动是用以操控某一硬件产品的应用程序,而固件是指那些预安装到硬件产品内部芯片里面,与硬件产品捆绑匹配的程序。举例来说,安装一块显卡,显卡内置的BIOS就可以看作是固件,而系统需要识别显卡,安装的就是驱动。” 这是一句别人理解的话,所以意思是NVIDIA显卡是不用安装固件的,固件已经放在了硬件里面。但是在NPU中确实是需要安装驱动和固件的。 可以在https://www.nvidia.cn/Download/index.aspx?lang=cn 这个网站上搜索自己的显卡可以安装的驱动。下载下来之后是一个run包。sudo apt install build-essential,安装一些依赖包。./xxxx.run的方式进行安装。