问题描述

        项目开发中,不同的项目可能对不同的cuda版本有所要求,常见的是这几种cuda-11.3//cuda-11.8//cuda-11.6,按照之前的认知,一个主机只能安装一个版本的cuda,否则会引起环境混乱,知道cuda底层逻辑的人都知道这有多么扯蛋,对吧。

        也正是因为受到这个东西的折磨,今天通学了一下底层逻辑和具体实操。

解决办法

        NVIDIA的显卡驱动与CUDA的版本并不是严格的一一对应关系,CUDA实际上也只是一个工具包,我们可以根据自己的需求进行安装,即可以安装多个CUDA版本。同时CUDNN是一个SDK,专门用于神经网络的加速包,它与CUDA也没有严格的一一对应关系,可以选择多个版本的CUDNN进行安装。虽然说不是严格的对应,不过还是要服从大版本的对应,即安装之前查看GPU驱动版本与CUDA版本的对应关系,选择对应的版本进行安装,避免不兼容而报错的错误。

       1、cuda是什么?在系统架构扮演什么角色?

        话不多说,直接上图

        我们可以看出cuda还是比较底层的对吧,直接和硬件交互了嘛,那我们只需要根据具体需求选择不同的cuda版本就可以了,但是这个时候可能会出现一个问题,就是说显卡和cuda不兼容问题 , 这个的原则是这样的:高版本兼容低版本,但也有可能低版本的在高版本的情况下会出现运行异常(我就遇到过),这种就需要具体情况具体分析了!

        ok,我们继续接着说。

        2、不同版本cuda的下载

        既然cuda这么底层,那么多安装几个cuda肯定也是没有问题的,这个思想有点像多系统主机,所以我们要做到的第一项工作便是如何下载对应所需版本的cuda(需要注意的是上面的图cudatoolkit在官网下载时候是CUDA Toolkit),这个自然最好的方式是去官网下载啦

CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive        但如果从官网下载就会出现一个不可避免的问题:下载速度太慢了!!!并且还可能下着下着就断了!!!烦死了(大圣表情包请自己脑补)!!!

        所以需要多次下载才能真正100%,不信的话看我多苦,失败是成功之母,我真想说一句“c他老母”。 

        鉴于此,我下载好了,放在了百度云盘,需要的话我后面放在网盘分享出来,敬请期待,这样的话大家就下载快多了!!! 

        下载完成之后自然就是安装了啊

        3、不同版本cuda的安装

        3.1、不同文件格式的安装命令是不同的

        3.1.1、runfile

        我下载的是runfile所以执行

sudo sh cuda_版本号信息_linux.run

        3.1.2、deb

        但之前的话,下载的deb文件,说实话,deb文件还是挺好用的

sudo dpkg -i cuda_版本号_linux.deb

        不过官网两个版本都有,可以自行抉择。 

        3.2、不同版本的安装过程是不同的 

        需要注意的是不同版本的安装前戏可能不同,比如cuda-8.0,需要阅读臭长的文档

        但是cuda-11.3,界面就会清新很多

        二者的安装过程也有区别,比如cuda-11.3,界面就很友好 

 

        但是cuda-8.0,就要敲一行看一行 

        总之,按照上面这一系列操作下来,就把cuda安装好了,需要几个安几个就行 

        接下来我们聊一下配置

        4、cuda的配置

        配置方面呢,需要注意的一点是,我们之前总能搜到这两种配置方法:文件配置和命令行配置。

        4.1、文件配置

        其中文件配置里的配置方式也有两种

sudo gedit ~/.bashrc

or

vim ~/.bashrc

        然后在最后一行添加下述代码: 

        4.1.1、方式一,无版本说明

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64

export PATH=$PATH:/usr/local/cuda/bin

export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

        4.1.2、方式二,有版本说明

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64

export PATH=$PATH:/usr/local/cuda-11.8/bin

export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.8

        添加完之后,需要更新配置文件,否则你就会怀疑自己,我明明改了,为什么没作用呢: 

source ~/.bashrc

        4.1.3、那上述方式二者区别是什么呢?

        一般来说,单cuda直接说明版本就可以了,不需要配置其他的,但是也可以通过软链的方法把安装的版本连接过去,二者的作用是一样的,因为系统加载是靠加载bashrc文件的

sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda

        4.2、命令行配置

        需要注意的是,命令行的配置也需要文件配置的基础,只是需要知道,默认情况下的配置并不带版本号,所以修改软连接有用的的原因就在于这        

sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda

        了解完这些基本知识,就要来看一下如何进行多版本cuda切换了 

        5、多版本cuda来回切换

        例如从cuda11.8切换到11.3

        第一步、查看cuda版本

nvcc -V

        第二步、修改软链 

删除已经存在的软链

sudo rm -rf cuda

重新建立软链

sudo ln -s /usr/local/cuda-11.3 /usr/local/cuda

        第三步、再次查看cuda版本

nvcc -V

        第四步、效果图 

        大功告成 !!!

完结撒花

        我已经无法回头,但我会在这条路上走的更坚定

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。