最近做实验需要用到不同版本的cuda,所以这里记录一下切换不同CUDA版本的过程,毕竟之后经常使用。
首先在官网下载自己所需的cuda版本,比如我们需要新安装10.0版本的cuda,在官网根据自己系统选择对应的文件。我这里是需要安装10.0版本的:
先要确认一下自己系统的版本:
cat /proc/version
sudo bash cuda_10.0.130_410.48_linux.run
运行bash后,弹出选项设置,首先接受(accept)协议,然后按照以下选项设置:
注意安装过程中提示是否安装驱动的时候选择n,是否创建软连接选择n(因为之前已经安装过CUDA了),其他都选择y:
Do you accept the previously read EULA?
accept/decline/quit: accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48? #这里是由于之前已经安装过其它版本的
(y)es/(n)o/(q)uit: n
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n
Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: y
Enter Toolkit Location
[ default is /usr/local/cuda-10.0 ]:
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: n
Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: n
Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...
先看一下自己使用的CUDA有没有cuDNN:cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
文件路径中的cuda是此时使用的软链接,如果没有使用软链接,那么就是正在使用的版本例如:cat /usr/local/cuda-10.0/include/cudnn.h | grep CUDNN_MAJOR -A 2
提示这个就是没有:-bash: cd: cat: No such file or directory
先不要着急,接着往下看
如果出现这个,则是有cuDNN:
但是,可能跟你安装的方式有关,点这里!!!
#上一个方法没验证,但是这个方法验证了 不仅是cudnn还可以验证cuda
function lib_installed() { /sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep $1; }
function check() { lib_installed $1 && echo "$1 is installed" || echo "ERROR: $1 is NOT installed"; }
check libcudnn
check libcuda
#没报错就是安装好了
我这里版本是7.6.5.
下载网站在这里,需要注册才能下载。
解压文件夹:tar -xvf cudnn-10.0-linux-x64-v7.6.5.tgz
将解压后的文件拷贝到相应的目录下:
sudo cp cuda/include/cudnn.h /usr/local/cuda-10.0/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64/
sudo chmod a+r /usr/local/cuda-10.0/include/cudnn.h
sudo chmod a+r /usr/local/cuda-10.0/lib64/libcudnn*
如果你觉得版本低了,可以进行更改:这个自行百度,注意不要删错文件或者复制错地方。
cd /usr/local/
我这里是有9.0和10.0两个版本的CUDA。
注意:浅蓝色的cuda是一个软链接,它指向我们指定的cuda版本。
可以查看这个软链接指向的是哪一个版本:(后面要修改的)
stat cuda
nvcc -V
当前使用的也是CUDA9.0的版本。(有时候,软链接和你现在使用的CUDA版本并不一致,说明此时环境变量并没有使用软链接,我看网上好多人有这个问题却不知道怎么解决)
env
我这里是以及修改过了,没有修改前是cuda9.0
先简单介绍一下:
如果你运行一个基于 Unix 或者类 Unix 的操作系统,bash 很有可能是作为默认终端被安装的。虽然存在很多不同的 shell,bash 却是最常见或许也是最主流的。bash 是一个能解释你输入进终端程序的东西,并且基于你的输入来运行命令。它在一定程度上支持使用脚本来定制功能,这时候就要用到 .bashrc 了。
为了加载你的配置,bash 在每次启动时都会加载 .bashrc 文件的内容。每个用户的 home 目录都有这个 shell 脚本。它用来存储并加载你的终端配置和环境变量。
终端配置可以包含很多不同的东西。最常见的,.bashrc 文件包含用户想要用的别名。别名允许用户通过更短的名字或替代的名字来指向命令,对于经常在终端下工作的人来说这可是一个省时利器。
打开.bashrc 文件
vim ~/.bashrc
然后看最后几行:(我这里是已经更改过了,如果没有更改的话,里面是cuda-9.0,把cuda-9.0全部换成cuda即可,之后就可以通过软链接cuda来快速切换不同版本了)
(注意在设置环境变量时,使用的是cuda,而不是cuda-9.0和cuda-10.0,这主要是为了方便我们切换cuda版本,可以让我们不用每次都去该环境变量的值)
修改完之后保存退出,此时需要立即生效更改:(不然你对bashrc所做的任何修改将在下一次启动终端时生效。)
source ~/.bashrc
删除原有的软链接:
sudo rm -rf /usr/local/cuda
删除后:
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda
nvcc -V
Linux export 命令用于设置或显示环境变量。
在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
我这里查看自己现在的环境变量:
export -p |gerp PATH
export -p |gerp cuda 找到需要修改的地方进行替换
export CUDA_HOME="/usr/local/cuda-10.1"
export LD_LIBRARY_PATH=":/usr/local/cuda-10.1/lib64"
export PATH="/usr/local/cuda-10.1/bin:/home/iim321/anaconda3/condabin:/usr/local/cuda-10.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
此时已经修改成功了: