@[TOC](ubuntu16.04 安装多版本cuda(原10.0,新安装10.1),实现任意切换)
前言
需求:单位需要使用yolo-v5训练模型,可所需的pytorch对cuda的依赖版本较高,而仅仅安装单个高版本的cuda又会与原先的项目产生矛盾,所以纠结一下,研究了安装双cuda步骤,记录一下
一、下载cuda地址:
cuda官方下载地址: https://developer.nvidia.com/cuda-toolkit-archive
cudnn官方下载地址:https://developer.nvidia.com/rdp/cudnn-download
我使用的cuda版本与cudnn版本如下所示:
下图是英伟达显卡驱动与cuda的版本对照:
英伟达显卡驱动需要由较高cuda版本对应的显卡驱动来确定;更新英伟达显卡驱动可以在安装cuda时选择安装,但是本人多次尝试都失败告终,最后使用ubuntu的自带的更新功能成功,如下界面:
二、安装cuda10.1
sudo chmod +x cuda_10.1.105_418.39_linux.run # 为 cuda添加可执行权限
sudo ./cuda_10.1.105_418.39_linux.run # 安装
稍等片刻后会出现如下安装提示:
3、如果之前安装过另一个版本的cuda,除非你确定想要用这个新版本的cuda,否则这里就建议选n,因为指定该链接后会将cuda指向这个新的版本
4. cuda环境设置:
sudo gedit ~/.bashrc
打开后在末尾添加以下语句
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda
以上的路径都是指向/usr/local/cuda 软连接,并没有写死指向某一个cuda版本,后面切换时不用改路径了,只改软连接指向就可以。
保存关闭后:
source ~/.bashrc
三、cuda版本切换
切换/usr/local/目录
sudo rm -rf cuda #删除之前的软链接(原本指向10.0)
sudo ln -s /usr/local/cuda-10.1 /usr/local/cuda #生成新的软链接,指向10.1
在/usr/local/ 目录下,以下四行命令均可以查看当前cuda软链接指向的哪个cuda版本
stat cuda # stat /usr/local/cuda
cat /usr/local/cuda/version.txt
nvcc --version
nvcc -V
ls -al # 在/usr/local目录下查看
当需要cuda10.0时,只需要执行以下语句,将软连接指向cuda10.0即可:
sudo rm -rf cuda
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda
补充问题:
1、nvcc -V显示有误
已经切换到了cuda10.1,用stat cuda查看正常,但用nvcc -V 查看的时候仍然显示10.0版本。可能原因是nvcc默认是你以前deb安装时候其他版本的,所以就算操作按上面一步步来,nvcc –V结果还是没变。所以我们可以找到nvcc位置,然后创建/usr/local/cuda/bin/nvcc软链接到原先nvcc位置,操作如下:
which nvcc # 找到nvcc位置,我的在/usr/local/cuda-10.0/bin/nvcc
sudo ln -s /usr/local/cuda/bin/nvcc /usr/local/cuda-10.0/bin/nvcc # 创建软链接链接到当前cuda的nvcc
nvcc -V # 显示当前cuda版本
在创建软连接时可能还会遇到这个问题,显示ln: 无法创建符号链接’/usr/local/cuda-10.0/bin/nvcc’: 文件已存在
此时,可以把cuda10.0/bin下的nvcc备份一下,然后删除重新创建软连接。
sudo rm -f nvcc # 在/usr/local/cuda-10.0/bin下删除
2. nvcc -V找不到
nvcc -V # 出现以下提示
Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit
可能是cuda 装好了,但是 nvcc 所在路径没有加入系统路径中,所以系统找不到 nvcc 。如果cuda 安装好了, nvcc 程序应该在路径 /usr/local/cuda/bin 中,可以直接在该路径下执行:
./nvcc -V
3、卸载掉cuda
1、如果安装的cuda是10.0(使用runfile文件包安装),则使用以下方法卸载
sudo /usr/local/cuda-10.0/bin/uninstall_cuda_10.0.pl
卸载之后,如有一些残留的文件夹,之前安装的是CUDA 10.0。可以一并删除:
sudo rm -rf /usr/local/cuda-10.0/
2、如果安装的cuda是10.1(使用runfile文件包安装),则使用以下方法卸载
cd /usr/local/cuda/bin
sudo ./cuda-uninstaller
3、如果cuda是由deb包安装,则执行以下指令
sudo apt-get remove cuda
sudo apt autoremove
四、安装cudnn
下载好后直接解压,得到文件夹 cuda,然后复制lib64和include文件夹到usr/local/cuda-10.1
sudo cp cuda/include/cudnn.h /usr/local/cuda-10.1/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.1/lib64/
sudo chmod a+r /usr/local/cuda-10.1/include/cudnn.h /usr/local/cuda-10.1/lib64/libcudnn*
确认是否成功安装:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如下所示:
补充:在安装完毕后,安装tensorflow后,终端可以正常导入tensorflow包,但是在pycharm导入tensorflow可能会出现以下报错:
ImportError: libcublas.so.10.0:cannot open shared object file:No such file or director
分析原因:
pycharm无法继承.bashrc里面的环境变量,因此才会出现这种问题
解决方法:
打开pycharm,进行如下修改:
Run------>Edit Configuration
即:
PYTHONUNBUFFERED=1;LD_LIBRARY_PATH=/usr/local/cuda/lib64