Linux之cuda、cudnn安装及版本切换

0 背景

我们在用不同框架做深度学习时,难免会遇到需要不同版本的cuda和cudnn版本的情况,如果把原来版本的卸载掉重新安装新版本,则会影响其它框架的使用,最好的方法是在主机上安装多个版本的cuda和cudnn,需要用到哪种就切换到哪种,这样就免去了重复卸载安装的工作

关于tensorflow对应的cuda和cudnn版本,参考官网链接,注意在1.13以上版本的tensorflow,都需要用到CUDA10.0和cudnn7.4,本文就以cuda10.0和cudnn7.4的更新为例,不卸载原9.0版本的cuda

1 查看当前版本

cuda一般安装在 /usr/local/cuda/ 路径下,该路径下有一个version.txt文档,里面记录了cuda的版本信息

cat  /usr/local/cuda/version.txt 

但是如果安装了多个cuda,实际使用的可能不是/usr/local/cuda/下边的版本,这个时候需要使用nvcc -V指令来查看实际使用的cuda版本

同理,cudnn的信息在其头文件里

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 

 2 更换cuda版本

2.1 安装cuda

2.1.1 方法一

首先在官网下载自己所需的cuda版本,比如我们需要新安装10.0版本的cuda,在官网根据自己系统选择对应的文件

我这里选择ubuntu16.04的runfile文件,运行以下指令安装

sudo bash cuda_10.0.130_410.48_linux.run 

如果运行bash时报错

“Not enough space on parition mounted at /”

则加一个临时目录,方法如下,将dir改成自己的目录就行

sudo bash cuda_10.0.130_410.48_linux.run -tmpdir=[dir]

运行bash后,弹出选项设置,首先接受(accept)协议,然后按照以下选项设置

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 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 ...

 安装成功后,会显示summary信息

2.1.2 方法二

为了避免手动安装出现错误,可以使用deb的方式安装,如下(具体指令根据自己下载的版本有所区别)

注意:这种方法安装可能会自动安装显卡驱动,我们如果对显卡版本有要求的话,建议不用这种方式安装

2.1.3 测试方法

cd /usr/local/cuda/samples/1_Utilities/deviceQuery 
sudo make
./deviceQuery

 如出现以下FAIL,则未重启电脑,重启后即会解决

./deviceQuery Starting...
 
CUDA Device Query (Runtime API) version (CUDART static linking)
 
cudaGetDeviceCount returned 803
-> system has unsupported display driver / cuda driver combination
Result = FAIL

如果出现PASS,则说明安装成功 

2.2 版本切换

2.2.1方法一

如果只修改自己用户的CUDA版本,则只需要修改环境变量即可,打开~/.bashrc文件,找到cuda的环境变量

export PATH="$PATH:/usr/local/cuda-10.0/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda-10.0/lib64"  

将cuda的路径改为自己需要的cuda版本路径即可

然后source一下使生效

source ~/.bashrc

 这样的好处是只改了当前用户的cuda版本,其它用户还可以用他们需要的cuda版本,互不影响

2.2.2方法二

如果想要把服务器上多用户的CUDA版本都切换了,则删除原有链接,建立新的软链接即可,这样服务器上每个用户的版本都切换了

sudo rm -rf /usr/local/cuda #删除之前创建的软链接
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda #创建新 cuda 的软链接,注意修改自己对应的版本

可以使用 ls -l 查看软链接情况,带 -> 符号的表明是软链接  

3 更换cudnn版本

cudnn版本与cuda版本是一一对应的,且只能有一种对应关系,因此,在确定cuda版本之后,再下载更换cudnn版本

3.1 下载解压

官网下载需要的cudnn,注意要与自己的cuda版本以及平台相对应,我这里下载的是linux平台的对应cuda10.0的7.4.1版本的cudnn

 下载完后,拷贝到自己服务器上,并解压,如果下载的是*.solitairetheme8格式的压缩文件,则采用如下方式进行解压(注意*号替换成自己的版本)

mv cudnn-*.solitairetheme8 cudnn-*.tgz
tar -xvf cudnn-*.tgz

3.2 删除原来版本

sudo rm -rf /usr/local/cuda-10.0/include/cudnn.h
sudo rm -rf /usr/local/cuda-10.0/lib64/libcudnn*

3.3 复制新版本

在解压后的文件夹中,找到include和lib64文件夹,将里边的文件拷贝到cuda目录中

sudo cp include/cudnn.h /usr/local/cuda-10.0/include/
sudo cp lib64/lib* /usr/local/cuda-10.0/lib64/
sudo chmod a+r /usr/local/cuda-10.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*

cd /usr/local/cuda-10.0/targets/x86_64-linux/lib/
sudo ln -sf libcudnn.so.7.4.1 libcudnn.so.7

3.4 测试方法

cp -r /usr/src/cudnn_samples_v7/ ~
cd ~/cudnn_samples_v7/mnistCUDNN/
make clean
make -j8
./mnistCUDNN

运行显示 Test passed 表示安装成功!

4 其它问题

如果更新完cuda和cudnn版本后,运行tensorflow等程序,报错如下

“CUDA driver version is insufficient for CUDA runtime version”

则是因为自己显卡驱动版本比较低,首先运行nvidia-smi查看自己显卡驱动

 可以看到驱动版本是384.130,而cuda10.0对应的版本需要大于等于410.48,来源,可见需要更新显卡驱动

 在英伟达官网下载自己显卡对应的驱动,然后安装更新驱动版本即可,具体安装方法可参考《[专业亲测]Ubuntu16.04安装Nvidia显卡驱动(cuda)--解决你的所有困惑

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宗而研之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值