我来填坑了,之前在 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已经能正常加速了