Ubuntu安装多版本cuda,并在多版本之间切换

我来填坑了,之前在 nvcc -V和nvidia-smi出现的cuda版本不同 这里挖了个坑,尝试了一下多版本cuda切换,应该是成功了

本文参考 安装多版本 cuda ,多版本之间切换 发现了他里面的一点小小的问题,已做了修改

首先去CUDA Toolkit中下载你需要的cuda,我用的是CUDA Toolkit 10.0 

这里遇到了第一个问题,cuda_10.0.130_410.48_linux.run这个文件,下载到win10环境下,是有.run的后缀的,但是在Ubuntu下却没有,我并不知道有没有影响,反正我是下载到win10后,再用winscp传到Ubuntu的

建议选择使用 .run 文件安装,因为使用 .deb可能会将已经安装的较新的显卡驱动替换。

sudo chmod +x cuda_10.0.130_410.48_linux.run # 为 cuda_10.0.130_410.48_linux.run 添加可执行权限
./cuda_10.0.130_410.48_linux.run # 安装 cuda_10.0.130_410.48_linux.run

首先会出现安装须知

按q跳过

在安装过程中截取其中比较重要的几个选择:

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: n # 如果在这之前已经安装好更高版本的显卡驱动就不需要再重复安装,如果需要重复安装就选择 yes,此外还需要关闭图形界面。

Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: y

Enter Toolkit Location
 [ default is /usr/local/cuda-10.0 ]: # 一般选择默认即可,也可以选择安装在其他目录,在需要用的时候指向该目录或者使用软连接 link 到 /usr/local/cuda。

在这里我出现了一些问题,我并没有出现,原文中的是否通过sudo来安装

/usr/local/cuda-9.0 is not writable.
Do you wish to run the installation with 'sudo'?
(y)es/(n)o: y

而是,直接让我换一个目录

于是我切换到root用户重新走了一遍,但是可能也正是选择了root的原因,我又遇到了下文中新的问题。后续我会说明

先继续安装

Please enter your password: 
Do you want to install a symbolic link at /usr/local/cuda? # 是否将安装目录通过软连接的方式 link 到 /usr/local/cuda,yes or no 都可以,取决于你是否使用 /usr/local/cuda 为默认的 cuda 目录。
(y)es/(n)o/(q)uit: n

Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: n

我们看一下安装汇总

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-10.0
Samples:  Not Selected

Please make sure that
 -   PATH includes /usr/local/cuda-10.0/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.0/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 10.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run -silent -driver

Logfile is /tmp/cuda_install_1444.log

安装完成后可以在 /usr/local 目录下同时看到cuda9,cuda10,cuda三个文件夹

最后,我们通过

vim ~/.bashrc

如果不在root用户下

改为

sudo vim ~/.bashrc

将cuda 相关的路径都从

/usr/local/cuda-9.0

修改到软连接的

/usr/local/cuda

在这里我发现我的路径中只有两条

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

和其他教程里的三条不同 参考Ubuntu 16.04 lts安装CUDA9.0 & cuDNN7.0.5&tensorflow-gpu

export CUDA_HOME=/usr/local/cuda-9.0
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

像他这里,就是三条

其中第三条是lib64,一般认为,安装cudnn的时候,需要将cudnn的库文件复制到cuda安装路径的lib64下

我没有这一条,说明,之前师兄们安装cudnn的时候,可能与我现在参考的教程不同。

或许也正是这个问题,导致了我发现,即使我没有安装cudnn,我的代码也能正常加速

至于为啥,cudnn版本和cuda版本按理说是不匹配的,却依然能加速??

大概是因为cuDNN是一个SDK,是一个专门用于神经网络的加速包,注意,它跟我们的CUDA没有一一对应的关系,即每一个版本的CUDA可能有好几个版本的cuDNN与之对应,但一般有一个最新版本的cuDNN版本与CUDA对应更好。(参考tensorflow各个版本的CUDA以及Cudnn版本对应关系

当我们需要切换cuda版本的时候,只需要

rm -rf /usr/local/cuda#删除之前创建的软链接
ln -s /usr/local/cuda-10.0/ /usr/local/cuda  #建立新的软连接
nvcc -V #查看当前 cuda 版本

注意,第二行的cuda后没有/,但是原文中是有的

原文的第二行

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

可能是机器不同的原因,具体还是要看你的电脑究竟是怎么建立连接的

保证cuda和cuda-10.0下文件内容相同即可。

比如我的就是

如果你的cuda下是个cuda-10.0文件夹,那就要和我一样吧最后的/去掉了

有的人遇到了 ls -l显示的软连接已经建立

但是nvcc -V的结果依然没变

原作者的解释是

source ~/.bashrc或重启shell

虽然我也遇到了这个情况,但是原作者的方案并没有解决我的问题。。。但是我在root用户下,nvcc -V的结果却是cuda10。。。

我现在的问题是不同用户组里,nvcc -V显示的结果不同

可以看到这里root用户结果是cuda10,而zhanglei结果是cuda9,不知道重启服务器后,会不会都变成cuda10

不过幸运的是,tensorflow-gpu 1.15已经能正常加速了

猜你喜欢

转载自blog.csdn.net/weixin_39518984/article/details/111470238