在ubuntu上安装多个版本的CUDA,并且可以随时切换

Posted Yesterday_萝卜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ubuntu上安装多个版本的CUDA,并且可以随时切换相关的知识,希望对你有一定的参考价值。

前言

实验室工作站被多人使用导致需求不同的cuda版本,一直没找到一个完全完整靠谱的教程,这是我参考几个博客完成测试的全过程记录,方便以后操作,无任何商业用途,如有侵权,请联系删除。

注:其中好多摘录自其他博客,我在操作过程中大部分未保存结果,只能用其他博客中我认为合适的图片等代替

一、确定安装的软件版本

安装前需先确定显卡驱动、CUDA、cuDNN等之间的对应关系。由于我的帐户没有管理员权限,不能安装显卡驱动,只能根据现有驱动的版本来选择CUDA版本,输入指令 cat /proc/driver/nvidia/version 查看当前服务器版本号

文中目录结构解释如下:

用户名为zb;
目录 /home/zb/cuda/用于存放不同的cuda版本,每安装一个版本的CUDA就在该目录下新建一个文件夹,如cuda-8.0,并安装在相应的目录下;
安装包下载到 /home/zb/cuda/ 目录下,安装完成后就删除安装包;
目录 /home/zb/cuda/tem/ 目录用于cuDNN的解压,安装完成后就删除该目录;

注意:不同版本cuda对应的NVIDIA驱动版本

CUDA与Driver的对应版本:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

cuda10.0与Linux系统以及GCC的对应关系:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

二、下载CUDA Toolkit 和 cuDNN

cuda的下载地址: https://developer.nvidia.com/cuda-toolkit-archive

使用指令wget -c XXX 将安装包下载到服务器上

cudnn的下载地址: https://developer.nvidia.com/rdp/cudnn-archive

注:由于下载cuDNN需要登录帐户,直接在终端用指令下载可能会失败,可以先在windows上注册个帐户下载好再上传到服务器。(使用MobaXterm等软件连接服务器后可以很方便地把windows上的文件通过拖动的方式上传到服务器上)

三、安装CUDA

先执行下面的命令安装相关依赖,否则会出现 Missing recommended library 错误。

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

这时还可能报如下图错误

可以尝试执行 sudo apt-get updatesudo apt-get upgrade --fix-missing,如果报如下图错误或者还是无法安装相关依赖。
解决方案为手动下载或者更换软件源(我的选择)

(1)手动下载
在使用上述方法后还是无法下载,出现的报错信息如下所示:

直接在浏览器中尝试打开无法下载的这个deb链接,自动弹出了下载页面,如下图所示:

那就很简单了,直接下载保存,默认应该是直接下载到“下载”文件夹下了。然后,打开该文件所在目录,打开一个终端,执行如下命令,将下载的deb文件(依据自己包的名称进行修改)放到ubuntu apt-get下载文件存放的目录(即 /var/cache/apt/archives )下,这样在install的时候,就能被自动检测到了。

sudo mv libflite1_2.1-release-3_amd64.deb /var/cache/apt/archives

完成后,再次执行安装命令:

sudo apt install ffmpeg

如果显示页面载入出错,链接被重置等问题,如下图所示:

看下一个方法吧。

(2)更换软件源
如果链接真的不存在,那有可能是链接更新了,但是源里的链接没有同步更新了导致的。既然这个源行不通,那我们就换一个源试试。打开软件和更新,在ubuntu软件页面下,可以看到有下载自这个选项:

现在使用的源在这里名为“中国 的服务器”,点开下拉列表,选择其他站点,可以看到有很多选项:



更换后在终端执行如下命令进行更新:sudo apt-get update
如果还是没法安装,就多换几次源尝试,总有一个适合你(当然也可能都不行,直接放弃)

回到正题,安装cuda

在安装包所在目录下输入指令 sudo sh XXX 进行安装,如:sudo sh cuda_11.4.0_470.42.01_linux.run

注:如图中一样选择就行。


按空格根据需要选择要安装的模块,有“X”的表示安装,没有的表示不安装,我这里已经安装过418.116的显卡驱动了,所以选择不安装驱动 (最终的结果和此处的图一致,如果不一致请保持一致的选择):

按上下键移动到CUDA Toolkit 10.1上,然后按“A”键,出现:

全部不安装并更改Toolkit Install Path:

再返回主界面然后选择Options->Library install path:


然后确定,返回选择Install

四、配置cuDNN

使用指令tar -xzvf /home/zb/cuda/cudnn-8.0-linux-x64-v7.1.tgz -C /home/zb/cuda/tem/ 将cuDNN解压到tem文件夹并执行以下指令

cp /home/zb/cuda/tem/cuda/include/cudnn.h  /home/zb/cuda/cuda-8.0/include/  
cp /home/zb/cuda/tem/cuda/lib64/libcudnn*  /home/zb/cuda/cuda-8.0/lib64
chmod a+r /home/zb/cuda/cuda-8.0/include/cudnn.h  /home/zb/cuda/cuda-8.0/lib64/libcudnn*

五、cuda多个版本的切换

在安装了多个cuda版本后,可以在/usr/local/目录下查看自己安装的cuda版本。

这里,cuda-11.0和cuda-11.4就是我们安装的两个cuda版本了,而cuda是一个软链接,它指向我们指定的cuda版本(注意上面在设置环境变量时,使用的是cuda,而不是cuda-11.0和cuda-11.4,这主要是为了方便我们切换cuda版本,可以让我们不用每次都去该环境变量的值)
可以使用stat命令查看当前cuda软链接指向的哪个cuda版本

可以看到,文件类型是symbolic link,而指向的目录正是/usr/local/cuda-11.4,当我们想使用cuda-11.0版本时,只需要删除该软链接,然后重新建立指向cuda-11.0版本的软链接即可(注意名称还是cuda,因为要与bashrc文件里设置的保持一致)

sudo rm -rf cuda
sudo ln -s /usr/local/cuda-11.4 /usr/local/cuda

想切换其他版本的cuda,只需要改动建立软链接时cdua的正确路径即可。

六、配置用户环境变量

(1)不使用上述的多个版本切换
修改个人用户目录下的.bashrc文件,sudo gedit ~/.bashrc

export PATH=/home/zb/cuda/cuda-8.0/bin$PATH:+:$PATH
export LD_LIBRARY_PATH=/home/zb/cuda/cuda-8.0/lib64$LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH

(2)使用上述的多个版本切换
修改个人用户目录下的.bashrc文件,sudo gedit ~/.bashrc

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

最后输入指令 source .bashrc 使新配置的环境变量生效.

相关命令

查看cuda版本 : nvcc -V
查看位置 : which nvcc
查看NVIDIA动态使用情况: watch -n 1 nvidia-smi
cuda 版本 : cat /usr/local/cuda/version.txt
cudnn 版本 : cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
NVIDIA 驱动版本 : cat /proc/driver/nvidia/version

参考链接

1,https://blog.csdn.net/hizengbiao/article/details/88625044
2,https://blog.csdn.net/ksws0292756/article/details/80120561
3,https://blog.csdn.net/qq_34638161/article/details/80845366
4,https://blog.csdn.net/ksws0292756/article/details/80120561
5,https://blog.csdn.net/weixin_44120025/article/details/122317808
6,https://www.cnblogs.com/Uni-Hoang/p/12901597.html

ubuntu 安装多个CUDA版本并可以随时切换

CUDA是什么就不介绍了,直接讲怎么实现CUDA多版本的共存和实时切换。

1、安装多个版本的CUDA

这里,我们以cuda9-1版本和cuda9-0版本为例(先安装哪个无所谓) 
首先,在cuda版本库中选择自己需要的cuda版本。 

然后,选择对应的安装包,这里选择runfile类型的安装文件,以便后面设置每个cuda的安装路径。 

下载完成以后,我们利用cd命令,进入到cuda_8.0.61_375.26_linux.run文件所在的目录中,然后运行下面的指令,进行安装(注意这个文件名,前面的cuda_8.0.61代表cuda的版本,后面的375.26代表的对应的NVIDIA驱动的版本,这里我用cuda8.0的安装过程为例,9.0和9.1同理)

安装过程中在建立软链接时需要注意一下,如果你是第一次安装cuda,那么毫无疑问输入y(yes),但是如果你是安装额外版本的cuda,是否选择y(yes)就要看你的具体需求而定,简言之,就是如果你希望启用当前安装的cuda版本,就选y,如果你只是想安装这个版本,而暂时还不想启用该版本时,就选n。

#先执行下面的命令安装相关依赖,
#否则会出现`Missing recommended library`错误
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev 


sudo sh cuda_8.0.61_375.26_linux.run #开始安装

#..一堆协议说明...
#直接按q退出协议说明.
zerozone@zerozone: accept/decline/quit: accept  #接受协议

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26? 
y)es/(n)o/(q)uit: n  #是否显卡驱动包,由于已经安装显卡驱动,选择n

Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y #是否安装工具包,选择y

Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]: #工具包安装地址,默认回车即可

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y #添加链接**注意这个连接,如果你之前安装过另一个版本的cuda,除非你确定想要用这个新版本的cuda,否则这里就建议选no,因为指定该链接后会将cuda指向这个新的版本**

Install the CUDA 8.0 Samples?
(y)es/(n)o/(q)uit: y #安装样例

Enter CUDA Samples Location
 [ default is /root ]:  #样例安装地址默认即可

# ***安装信息***
Installing the CUDA Toolkit in /usr/local/cuda-8.0 ...

Missing recommended library: libXi.so
Missing recommended library: libXmu.so
#注意,这里出现了Missing recommended library错误,
#是因为博主在第一次安装时,没有添加最开始的那条安装相关依赖的指令,
#之后我添加了依赖后,再次安装,就没有Missing错误了

Installing the CUDA Samples in /root ...
Copying samples to /root/NVIDIA_CUDA-8.0_Samples now...
Finished copying samples.

===========
= Summary =
===========
Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-8.0
Samples:  Installed in /root, but missing recommended libraries

Please make sure that
 -   PATH includes /usr/local/cuda-8.0/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.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-8.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.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 361.00 is required for CUDA 8.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_6388.log   
# ***安装完成***
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

配置CUDA相关环境变量 
修改~/.bashrc文件(或~/.zhsrc) 在文件末尾添加环境变量

Tensorflow官方安装历程要求注意的是:配置PATHLD_LIBRARY_PATHCUDA_HOME环境变量.

vim ~/.bashrc #修改配置文件(如果你用的是zsh,则需要修改 ~/.zshrc文件)

#在文件结尾处添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

利用同样的方法下载你想安装的另一个版本的cuda工具包(注意是runfile类型),在安装过程中,注意cuda symbol link的选择(首次安装,选y,安装额外的版本,选n)

2、cuda多个版本的切换

在安装了多个cuda版本后,可以在/usr/local/目录下查看自己安装的cuda版本,如下图所示: 

这里,cuda-9.0和cuda-9.1就是我们安装的两个cuda版本了,而cuda是一个软链接,它指向我们指定的cuda版本(注意上面在设置环境变量时,使用的是cuda,而不是cuda-9.0和cuda-9.1,这主要是为了方便我们切换cuda版本,可以让我们不用每次都去该环境变量的值)

可以使用stat命令查看当前cuda软链接指向的哪个cuda版本,如下所示: 

可以看到,文件类型是symbolic link,而指向的目录正是/usr/local/cuda-9.0,当我们想使用cuda-9.1版本时,只需要删除该软链接,然后重新建立指向cuda-9.1版本的软链接即可(注意名称还是cuda,因为要与bashrc文件里设置的保持一致)

sudo rm -rf cuda
sudo ln -s /usr/local/cuda-9.1 /usr/local/cuda
  • 1
  • 2

想切换其他版本的cuda,只需要改动建立软链接时cdua的正确路径即可

以上是关于在ubuntu上安装多个版本的CUDA,并且可以随时切换的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu 安装多个CUDA版本并可以随时切换

Ubuntu 18.04 安装 CUDA 9.0

是否可以在 Windows 上运行多个 CUDA 版本?

Ubuntu安装cuda

问题7:虚拟机+ubuntu+安装cuda(傻瓜式操作)+cuda path配置+查看cuda的版本

ubuntu16.04怎么检测是不是安装cuda8