OpenMMLabb不同订单库需求不同的cuda版本,一直没找到一个完全完整靠谱的教程,这是我参考几个博客完成测试的全过程记录,方便以后操作,无任何商业用途,如有侵权,请联系删除。
注:
Ubuntu22.04系统,已安装CUDA11.7版本,现在安装CUDA11.3版本
————————————————
CUDA官网所有版本下载地址:https://developer.nvidia.com/cuda-toolkit-archive
选择指定的CUDA版本,选择你的系统架构版本。【11.3-11.7】
注意:芯片架构不懂的可以点击查看解释:Architeture解释
执行页面底部安装命令即可安装:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda-repo-ubuntu2004-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda=11.3*
注意:上面代码最后一行加上cuda版本号,否则会默认安装最高版本哦的!!!
安装成功会有以下提示:
查看cuda安装路径
cd /usr/local
接下来需要安装cudnn,从官网选择对应的版本下载即可,这里需要你先进行登陆然后才能进入下载。这里我们选择对应于cuda11.3的cudnn8.6.0,选择cuDNN Library for Linux选项,如下图所示:
选择与系统对应的安装包,此处需要选择tar格式的,deb无法指定安装
下载后是一个压缩包,将其解压(解压的文件夹名称默认是cudnn),然后在解压后的目录下打开一个终端,依次执行如下命令即可。
sudo cp cudnn/include/cudnn.h /usr/local/cuda-11.3/include
sudo cp cudnn/lib/libcudnn* /usr/local/cuda-11.3/lib64
sudo chmod a+r /usr/local/cuda-11.3/include/cudnn.h /usr/local/cuda-11.3/lib64/libcudnn*
4 设置环境变量
在任一终端执行sudo gedit ~/.bashrc,打开环境变量配置文本。将里面所有与cuda有关的带版本号路径都改为无版本号的。比如我之前已经安装好了cuda10.0,然后当时配置环境变量时,有许多/usr/local/cuda-10.0/这样的路径,要做的就是把所有的-10.0都去掉。修改好之后,保存并关闭文件,然后在终端执行命令source ~/.bashrc使环境变量的修改生效。
然后,要切换cuda版本的时候,直接建立对应的软链接即可,命令如下:
sudo rm -rf /usr/local/cuda #删除之前创建的软链接
sudo ln -s /usr/local/cuda-11.3 /usr/local/cuda #创建链接到cuda9.0的软链接
nvcc --version #查看当前cuda版本
如果一切配置都是正确的,那么执行完ncvv --version
这行命令后,应该可以看到如下输出:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Build cuda_11.7.r11.7/compiler.31442593_0
可以看到,cuda版本已经成功更换成9.0了。而如果要更改回去,则只需要执行类似上面的命令即可(只需将9.0改为10.0,是不是超级方便):
sudo rm -rf /usr/local/cuda #删除之前创建的软链接
sudo ln -s /usr/local/cuda-11.7 /usr/local/cuda #创建链接到cuda9.0的软链接
nvcc --version #查看当前cuda版本
执行后,可以看到输出变成了:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130
Build cuda_11.3.r11.3/compiler.297451515_0
虽然执行nvcc --version
命令可以看到cuda版本的切换,但是,如果此时你再执行nvidia-smi
命令,想看一下
当前GPU的信息和使用情况的话,你很可能会获得一个报错信息:
Failed to initialize NVML: Driver/library version mismatch
意思是驱动版本不匹配。心想,这就奇了怪了,安装cuda时候选择了run文件就是为了避免安装时候驱动被修改,而且安装过程中的驱动选项也是选的no,这下可不好解释了。网上很多说法是这种问题应该重装系统驱动的,但是,千万别!搞不好你不仅新安装的cuda失败了,就连之前已经安装妥当的cuda也白搭进去了。俗话说的好,遇事不决,重启解决。重启一下系统就完事了,确实有效!重启后再次打开终端执行nvidia-smi,输出如下:
可以看到右上角显示的cuda version是11.0,而我当前cuda版本实际上是9.0,我甚至根本就没安装过11.0的。需要注意的是,要看当前是什么cuda版本,使用nvcc --version看到的输出才是正确的,而nvidia-smi主要是用来查看GPU使用情况的,此外,它还能实时查看GPU使用情况。
一般如果我们都是使用默认位置安装cuda的话,那么其安装路径都是/usr/local。如果要查看该目录下已经安装有哪些版本的cuda,可以通过在终端执行如下命令:
ls -l /usr/local | grep cuda
比如我这里执行的输出为:
lrwxrwxrwx 1 root root 20 11月 13 12:45 cuda -> /usr/local/cuda-10.0
drwxr-xr-x 19 root root 4096 3月 1 2021 cuda-10.0
drwxr-xr-x 17 root root 4096 11月 13 12:11 cuda-8.0
drwxr-xr-x 18 root root 4096 10月 27 21:10 cuda-9.0
总共有四行输出,其中第一行表示当前建立了软链接的版本,是cuda10.0。然后,后边三行就是已经安装的cuda版本,我这里有三个,分别是8.0,9.0和10.0。这个命令的作用主要是,如果你忘了已经安装了哪些版本的cuda的时候,就可以直接通过命令查看到。