Ubuntu22.04中多版本CUDA切换
人工智能兴起,AI相关开源软件大部分都会使用到GPU,而NVIDIA的CUDA加速处于绝对垄断地位。而AI开源软件,使用的操作系统更倾向于Linux,但不同的软件对CUDA的版本有不同依赖,这样就造成开发调试不同软件,需要切换电脑到不同的CUDA版本。本文以Ubuntu22.04为例,说明本地电脑安装多版本CUDA并使用简单方式切换,以满足不同开发的需求。
当然,开发好的软件,docker部署运行时,只依赖特定版本CUDA,可以下载相关版本CUDA的镜像,宿主机只要安装最新GPU驱动与NVIDIA Container Toolkit。可以参考下面链接:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
GPU驱动
要在本机安装多版本cuda,并能切换后正常使用,首先要保障安装的GPU驱动是比较新的。可以从nvidia官方网站下载驱动。
安装驱动后,可以运行nvidia-smi ,如图查看到 CUDA version:12.2。表示此显卡可支持的CUDA版本最高到12.2。如果开发的软件依赖CUDA12.1,12.1<12.2,则这个显卡驱动版本满足要求。如果开发软件依赖CUDA12.4,则要首先升级GPU驱动到新版本。
多版本CUDA下载与安装
可以从
https://developer.nvidia.com/cuda-toolkit-archive 下载可能用到的CUDA版本。比如要下载cuda12.1、cuda11.8
根据自己的环境依次选择,推荐下载【runfile(local)】格式的文件。
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run
sudo sh cuda_12.1.1_530.30.02_linux.run
执行sh
cuda_12.1.1_530.30.02_linux.run开始安装此版本cuda。
- 安装第一个CUDA版本:11.8
执行sudo sh
cuda_11.8.0_530.30.02_linux.run
因为已经安装过显卡驱动,这里选择【Continue】继续安装。
不选择Driver与Kernel Objects,Install
出现上面的画面表示cuda11.8已经安装完成。安装到的位置为:/usr/local/cuda-11.8
- 安装第二个CUDA版本:12.1
如上运行sudo sh
cuda_12.1.1_530.30.02_linux.run。同样选择。
出现上面画面,选【Install】后,会出现新界面:
此界面是由于cuda11.8安装时,会自动在/usr/local/下建立软链接,名字为cuda,指向/usr/local/cuda-11.8。而此处安装cuda12.1.1,如果选【Yes】也会同样操作,将cuda软链接,指向/usr/local/cuda-12.1。因为我有很多的程序都是依赖cuda11.8的,所以此处选【No】
看到此界面,表示已经安装cuda12.1成功。
多版本cuDNN下载与安装
cuDNN(CUDA Deep Neural Network library)是 NVIDIA 提供的一个深度神经网络库。它为深度学习应用提供特别优化,如卷积、池化、归一化和激活函数等。如果安装CUDA是用于人工智能网络工作,需要安装此库。当然,这个库的版本与CUDA版本有依赖关系。
https://developer.nvidia.com/cudnn-archive
可以从上面的网址下载cudnn库。要下载库,需要用邮箱注册一个账号。
cuDNN 8.x - 1.x (December 2023 - August 2014) 是 8.x版及以前的cudnn版本。选择此种版本,选择方式与9.x方式稍有不同。但都是推荐下载tar 包文件为好。
根据操作系统及文件格式,选要下载的cudnn包。
cuDNN 9.1.0 (April 2024)
上面的选择界面中,有一个链接【Tarball and Zip Archive Deliverables】
通过此处,可以从列表方式中选择要下载的cudnn Tar包。
cuDNN的安装,实际只是下载的tar包解压,然后把解压后文件,拷贝到对应版本的cuda下的对应目录。
上面的两个cuda版本默认安装到/usr/local/下
cuda-11.8/
cuda-12.1/
如下拷贝解压的tar包中文件,到对应的cuda版本目录下即可(cudaxx为对应的cuda-11.8或cuda-12.1):
?cp include/*.*? ? ? ? ? ? ? /usr/local/cudaxx/include? ? ? ?
cp? lib/.*.*? ? ? ? ? ? ? ? ? ? ? ?/usr/local/cudaxx/lib64/
配置文件修改
修改/etc/profile文件,添加:
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export CUDA_HOME=/usr/local/cuda
cuda版本切换
上面说过,/usr/local/cuda是一个软链接。设置上面的环境变量后,只要切换软链接的指向位置,即可在实现切换cuda版本。
cd /usr/local
rm cuda 删除软链接
ln -s cuda-12.1/ cuda 将cuda-12.1/映射到cuda.
上面的命令,即可实现切换到cuda12.1的环境。
可以用 nvcc -V 来验证切换是否成功。