嚴華 发表于 2024-9-11 21:05:00

CUDA与cuDNN在linux / Ubuntu22.04上的安装与卸载,包含CUDA的.run安装与.d

NVIDIA显卡驱动 for Linux / Ubuntu22.04的续集,主要关注CUDA与cuDNN在linux / Ubuntu22.04上的安装与卸载。


[*]重点:
[*]整合了两种CUDA安装方式(.run与.deb)、两种cuDNN的安装方式(.tar.xz与.deb),网上似乎没什么人做这个
[*]整合了CUDA与cuDNN的官方样例代码的测试方法

[*]网上的CUDA测试方法大多使用nvcc -V,还算OK,添加了官方samples的测试
[*]网上的cuDNN测试方法根本上止步于查询版本号大概查询dpkg是否能正常索引包,不太有效,能编译跟跑通官方样例才是正解

[*]整合了CUDA与cuDNN的版本切换方法,尤其是美满的使用脚本的一键切换版本方法(部门代码由GPT辅助生成)
[*]整合了CUDA与cuDNN的彻底卸载方法

往下看的重要提醒

假如你使用了conda来管理你的环境,假如环境中安装了pytorch,那么已经自带了需要的CUDA与cuDNN,不需要、没必要再另外安装
假如是TensorFlow,可以从conda的仓库里指定CUDA与cuDNN版本来安装
可以看到我这里安装了torch,已经附带了cuda12.4与cuDNN9.1.0_0了,想安装差别版本,直接去pytorch官网吧
$ conda list | grep 'cudnn'
pytorch   2.4.0   py3.12_cuda12.4_cudnn9.1.0_0    pytorch
CUDA for Linux

安装准备


[*]使用nvidia-smi查察可支持CUDA最高版本
[*]NVIDIA ToolKit官网找对应版本CUDA:
[*]CUDA下载页:https://developer.nvidia.com/cuda-downloads
[*]一样平常都是需要探求其他的合适版本,从上面网站的Resources · Archive of Previous CUDA Releases进去:CUDA Toolkit Archive

安装方法推荐

推荐使用方法一.run安装


[*]后续版本管理或卸载非常方便
[*]由于使用 .deb可能会将已经安装的较新的显卡驱动替换
方法一:.run(local)安装


[*] 下载并安装
wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/./cuda_12.1.1_530.30.02_linux.run

# 法一:
sudo sh ./cuda_12.1.1_530.30.02_linux.run

# 法二:
sudo chmod +x ./cuda_12.1.1_530.30.02_linux.run # 添加可执行权限
./cuda_12.1.1_530.30.02_linux.run # 安装

[*] 进入可视化界面安装
同意协议:
https://i-blog.csdnimg.cn/direct/1900af8cd3064e938d0ce2c9fec820a8.png
由于之前已经安装了驱动,取消勾选驱动安装https://i-blog.csdnimg.cn/direct/dc61581566b44bf8ade6b0ac5782c62d.png#
在Options里可以更改安装地址,还可以选择为哪些用户或全部用户安装CUDAhttps://i-blog.csdnimg.cn/direct/3931620afc754a00839c2304f7ed3e6e.png#
由于要思量我们手动切换版本,不要让安装步伐主动更新软链接https://i-blog.csdnimg.cn/direct/f0cea7f92e2e43d7b642726b3f44d2d7.png#
安装乐成:
$ sudo ./cuda_12.1.1_530.30.02_linux.run
===========
= Summary =
===========

Driver:   Not Selected
Toolkit:Installed in /usr/local/cuda-12.1/

Please make sure that
-   PATH includes /usr/local/cuda-12.1/bin
-   LD_LIBRARY_PATH includes /usr/local/cuda-12.1/lib64, or, add /usr/local/cuda-12.1/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-12.1/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 530.00 is required for CUDA 12.1 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 /var/log/cuda-installer.log
从输出信息中也能看到对环境变量有要求:
Please make sure that
-   PATH includes /usr/local/cuda-12.1/bin
-   LD_LIBRARY_PATH includes /usr/local/cuda-12.1/lib64, or, add /usr/local/cuda-12.1/lib64 to /etc/ld.so.conf and run ldconfig as root

方法二:.deb(local)安装

直接跟着官网的指令一行行走安装即可
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda-repo-ubuntu2204-12-6-local_12.6.0-560.28.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-6-local_12.6.0-560.28.03-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-6


[*] 报错没有安装libtinfo5:
The following packages have unmet dependencies:
E: nsight-systems-2023.4.4 : Depends: libtinfo5 but it is not installable

[*] 解决法一:从libtinfo5官网找到对应版本的下载地址并wget下载:Libtinfo5官网
wget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.4-2_amd64.deb
dpkg -i libtinfo5_6.4-2_amd64.deb


[*]参考:Ubuntu 24.04 Preview 版安装 libtinfo5

[*] 解决法二(未测试):
修改/etc/apt/sources.list大概/etc/apt/sources.list.d/ubuntu.sources

[*]详见:Installing CUDA on Ubuntu 23.10 - libt5info not installable

修改环境变量以便使用nvcc下令



[*] 不修改的话大概率没法用
[*] 检查CUDA是否确实安装
$ ls /usr/local
bincudacuda-12cuda-12.4etcgamesincludelibmansbinsharesrc

[*] 在系统可视化界面中,可以看出"cuda"是一个软链接("cuda-12"也是),它将指向具体版本的一个cuda文件夹,这里我安装了第二个版本的CUDA,以是指向了新安装的cuda-12.1
https://i-blog.csdnimg.cn/direct/f08a6c5c421e41f5a9ec8e4d0c3917e8.png#
[*] 修改环境变量
注意,路径是通过软链接的文件夹来指向现实路径的
$ vim ~/.bashrc

# 末尾添加以下三行:
# cuda
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin

# 刷新
$ source ~/.bashrc

# 测试
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0

功能验证

最后表现PASS,验证乐成
# 找到验证demo的目录
$ cd /usr/local/cuda-12.1/extras/demo_suite
$ ls
bandwidthTestbusGrinddeviceQuerynbodynbody_data_filesoceanFFToceanFFT_data_filesrandomFograndomFog_data_filesvectorAdd
# 运行deviceQuery
$ ./deviceQuery
……
……
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 12.4, CUDA Runtime Version = 12.1, NumDevs = 1, Device0 = NVIDIA GeForce RTX 3090
Result = PASS
切换差别版本的CUDA



[*] 手动修改软链接以指向差别版本的CUDA
# 删了旧的软链接,链接新的目录即可
sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-12.1 /usr/local/cuda
参考:Linux下CUDA的多版本安装及切换
[*] 写个bash
比方存为switch_cuda.sh,使用时直接调用./switch_cuda.sh即可
#!/bin/bash

# 设置 CUDA 的安装路径
CUDA_BASE_PATH="/usr/local"

# 读取用户输入的 CUDA 版本
echo "Available CUDA versions: 12.1, 12.4"
read -p "Enter the CUDA version you want to switch to (e.g., 12.1): " CUDA_VERSION

# 检查 CUDA 版本目录是否存在
CUDA_PATH="$CUDA_BASE_PATH/cuda-$CUDA_VERSION"
if [ ! -d "$CUDA_PATH" ]; then
    echo "Error: CUDA version $CUDA_VERSION not found in $CUDA_BASE_PATH."
    exit 1
fi

# 删除旧的 CUDA 符号链接
if [ -L "$CUDA_BASE_PATH/cuda" ]; then
    sudo rm "$CUDA_BASE_PATH/cuda"
    echo "Removed existing CUDA symbolic link."
fi

# 创建新的 CUDA 符号链接
sudo ln -sf "$CUDA_PATH" "$CUDA_BASE_PATH/cuda"
echo "Switched to CUDA $CUDA_VERSION."

# 刷新库缓存
sudo ldconfig

echo "CUDA $CUDA_VERSION has been successfully switched."

CUDA卸载

卸载.run(local)安装的CUDA

很方便,强烈推荐,这也是为什么上面推荐使用.run的方式安装CUDA
cd/usr/local/cuda-11.2/bin
sudo ./cuda-uninstaller
用空格键勾选以下几项
https://i-blog.csdnimg.cn/direct/37d38693854b4d5f8ca864a5d2fc73b0.png#
选择done,提示Successfully uninstalled完成卸载。
卸载.deb(local)安装的CUDA

很麻烦,这也是为什么上面推荐使用.run的方式安装CUDA

[*] 查察有什么包,以防止误删(针对已经安装多个版本的CUDA)

[*]通过.deb安装的CUDA版本可以使用以下下令查察:dpkg -l | grep cuda
[*]通过.run文件安装的CUDA版本通常可以通过查察/usr/local目录来检查:ls /usr/local | grep cuda

[*] 卸载CUDA工具包和相关组件:
sudo apt-get remove --purge '^cuda-.*'
sudo apt-get remove --purge '^libnvidia-.*'
sudo apt-get remove --purge '^nvidia-.*'


[*]'^cuda-.*':匹配所有以cuda-开头的包,如cuda-toolkit-12-6、cuda-drivers等。
[*]'^libnvidia-.*' 和 '^nvidia-.*':匹配所有以libnvidia-或nvidia-开头的包,删除与NVIDIA相关的库和驱动步伐。一样平常删完第一个'^cuda-.*',后面都没有了

[*] 移除本地的CUDA存储库和GPG密钥:
sudo rm /etc/apt/sources.list.d/cuda*
sudo rm /etc/apt/preferences.d/cuda-repository-pin-600
sudo rm /usr/share/keyrings/cuda-*-keyring.gpg


[*]sudo rm /etc/apt/sources.list.d/cuda*:删除CUDA存储库的源列表文件,以免APT继续实验从NVIDIA存储库中获取更新。
[*]sudo rm /etc/apt/preferences.d/cuda-repository-pin-600:删除为CUDA存储库设置的APT优先级文件。
[*]sudo rm /usr/share/keyrings/cuda-*-keyring.gpg: 删除CUDA存储库的GPG密钥。

[*] 清理APT缓存:
sudo apt-get autoremove
sudo apt-get autoclean


[*]autoremove:删除系统中不再需要的依靠包。
[*]autoclean:打扫APT缓存中的旧版本软件包文件。

[*] 删除CUDA安装目录(可选):
bash复制代码
sudo rm -rf /usr/local/cuda*


[*]删除默认安装的CUDA目录(一样平常在/usr/local/cuda),包罗所有版本的CUDA。
[*]假如安装了多个CUDA版本,可以只删除特定版本的目录。

[*] 检查:dpkg -l | grep cuda,应该没有输出
[*] 卸载残留软件:Nsight system和Nsight compute
$ sudo apt list --installed | grep 'nsight'
nsight-compute-2024.1.1/now 2024.1.1.4-1 amd64
nsight-systems-2023.4.4/now 2023.4.4.54-234433681190v0 amd64

$ sudo apt purge nsight-compute-2024.1.1 nsight-systems-2023.4.4
$ sudo apt autoremove

cuDNN for Linux

安装准备


[*] 下载页面:cuDNN Archive
官方安装文档:

[*].tar压缩包安装方式:Tarball Installation
[*].deb安装方式:Package Manager Local Installation-Ubuntu/Debian Local Installation

[*] 安装方式选择:

[*].tar压缩包安装:没有使用系统的软件包管理(dpkg),需要对Linux有肯定的相识,但是可以同时安装多个版本并人为控制调用
[*].deb包安装:探索起来麻烦,但是去除弯路后安装方便,然而不方便进行多版本控制
[*]省流:有多版本需求思量.tar压缩包安装,否则用.deb包一键安装

[*] 下载对应CUDA版本的cuDNN(需要登录)

[*] .tar压缩包安装方式
我的下载版本为:
cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x 的 Local Installer for Linux x86_64 (Tar)
得到文件cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
[*] .deb包安装方式
我的下载版本为:
cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x 的 Local Installer for Ubuntu22.04 x86_64 (Deb)
得到文件cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb

.tar.xz压缩包安装方式

安装


[*] 创建目录:sudo mkdir -p /opt/cudnn/cudnn-8.9.7
[*] 解压缩并移动文件夹并重定名:
假如没有多版本需求,也可以不放在opt内,大概可以直接写在/usr/local/cudnn下,看个人需求
# 解压、移动、strip-components=1将解压文件中的第一层目录去掉
$ sudo tar -xJvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz -C /opt/cudnn/cudnn-8.9.7 --strip-components=1
# 查看一下目录结构
$ cd /opt/
$ tree -L 2 cudnn
cudnn
└── cudnn-8.9.7
    ├── include
    ├── lib
    └── LICENSE

[*] 链接文件夹:
此处需要注意链接的是cuda软链接,需要注意到底链接到了哪个版本下的cuda(假如有多个版本)
sudo ln -sf /opt/cudnn/cudnn-8.9.7/include/* /usr/local/cuda/include/
sudo ln -sf /opt/cudnn/cudnn-8.9.7/lib/* /usr/local/cuda/lib64/

验证安装



[*] 查察已安装的 cuDNN 版本,只能证明能够文件索引,无法验证系统路径是否能正常索引:
cat /opt/cudnn/cudnn-8.9.7/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
[*] Sample_demo验证

[*]假如是.deb安装,ibcudnn8-samples包将包含这些cudnn_samples,但由于没有这样安装,只能自己下载了。
[*]下载官方的测试样例:cuDNN-samples-v8,这是我从ibcudnn8-samples的.deb包中提取的官方样例
[*]下载后: $ cd ~/Downloads/cudnn_samples_v8/mnistCUDNN
$ ~/Downloads/cudnn_samples_v8/mnistCUDNN$ sudo make clean && make
# 运行文件
$ ./mnistCUDNN
……
……
Test passed!
# 说明cuDNN正常运行


参考:
【Linux】安装CUDA 11.2 和 cuDNN 8.4.0并检查是否安装乐成
Linux下CUDA的多版本安装及切换
.deb包安装方式

省流版

以下面的安装探索过程总结出的安装方式


[*] 直接解压下载的.deb文件到文件夹./cudnn:
$ dpkg -x cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb ./cudnn-deb
# 看看文件结构
$ tree -L 3 ./cudnn
./cudnn
├── etc
│   └── apt
│       └── sources.list.d
├── usr
│   └── share
│       └── doc
└── var
└── cudnn-local-repo-ubuntu2204-8.9.7.29
├── 08A7D361.pub
├── cudnn-local-08A7D361-keyring.gpg
├── InRelease
├── libcudnn8_8.9.7.29-1+cuda12.2_amd64.deb
├── libcudnn8-dev_8.9.7.29-1+cuda12.2_amd64.deb
├── libcudnn8-samples_8.9.7.29-1+cuda12.2_amd64.deb
├── Local.md5
├── Local.md5.gpg
├── Packages
├── Packages.gz
├── Release
└── Release.gpg
8 directories, 12 files

[*] 安装./cudnn/var/cudnn-local-repo-ubuntu2204-8.9.7.29中的这三个.deb文件
注意,有依靠需求,必须从上往下按顺序安装
cd ./cudnn/var/cudnn-local-repo-ubuntu2204-8.9.7.29
sudo dpkg -i libcudnn8_8.9.7.29-1+cuda12.2_amd64.deb
sudo dpkg -i libcudnn8-dev_8.9.7.29-1+cuda12.2_amd64.deb
sudo dpkg -i libcudnn8-samples_8.9.7.29-1+cuda12.2_amd64.deb

我的安装探索过程

不想看可以直接过,看下面的验证安装环节,主要目的是留个档,盼望后人不要趟我这些坑


[*]先跟着官网的走:
# 安装deb包
cd ~/Downloads/
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
# 导入CUDA GPG key
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
# 刷新apt
sudo apt-get update


[*] 到现在为止都是与官网一样的,但是接下来的步骤,官网写着:
       To install for CUDA 11, run:sudo apt-get -y install cudnn9-cuda-11
To install for CUDA 12, run:sudo apt-get -y install cudnn9-cuda-12
    但现实上会找不到cudnn9-cuda-12这个包:
$ sudo apt-get -y install cudnn9-cuda-12
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
E: Unable to locate package cudnn9-cuda-12

[*] 使用apt-cache search cudnn可以发现要装的文件有3个:3个libcudnn8文件
$ apt-cache search cudnn
nvidia-cudnn - NVIDIA CUDA Deep Neural Network library (install script)
libcudnn8 - cuDNN runtime libraries
libcudnn8-dev - cuDNN development libraries and headers
libcudnn8-samples - cuDNN samples
cudnn-local-repo-ubuntu2204-8.9.7.29 - cudnn-local repository configuration files

[*] 查察/var/cudnn-local-repo-ubuntu2204-8.9.7.29目录可以发现三个libcudnn8文件
$ ls /var/cudnn-local-repo-ubuntu2204-8.9.7.29 -l
total 865868
-rw-r--r-- 1 root root      1660 12月22023 08A7D361.pub
-rw-r--r-- 1 root root      1166 12月22023 cudnn-local-08A7D361-keyring.gpg
-rw-r--r-- 1 root root      1572 12月22023 InRelease
-rw-r--r-- 1 root root 444477788 12月22023 libcudnn8_8.9.7.29-1+cuda12.2_amd64.deb
-rw-r--r-- 1 root root 440462722 12月22023 libcudnn8-dev_8.9.7.29-1+cuda12.2_amd64.deb
-rw-r--r-- 1 root root   1664468 12月22023 libcudnn8-samples_8.9.7.29-1+cuda12.2_amd64.deb
-rw-r--r-- 1 root root      1928 12月22023 Local.md5
-rw-r--r-- 1 root root       836 12月22023 Local.md5.gpg
-rw-r--r-- 1 root root      2121 12月22023 Packages
-rw-r--r-- 1 root root       949 12月22023 Packages.gz
-rw-r--r-- 1 root root       690 12月22023 Release
-rw-r--r-- 1 root root       833 12月22023 Release.gpg

[*] 手动安装这三个包
$ cd /var/cudnn-local-repo-ubuntu2204-8.9.7.29
$ sudo dpkg -i libcudnn8_8.9.7.29-1+cuda12.2_amd64.deb
$ sudo dpkg -i libcudnn8-dev_8.9.7.29-1+cuda12.2_amd64.deb
$ sudo dpkg -i libcudnn8-samples_8.9.7.29-1+cuda12.2_amd64.deb

[*] 探索总结:

[*]安装cuDNN本地仓库没必要,由于反正都无法找到想要的包
[*]而且由于需要的包已经在deb文件包含,解压直接安装即可

验证安装


[*] 底子验证,仅验证可以访问并查询到对应版本信息
# 先找到cudnn_version文件在哪
$ whereis cudnn_version.h
cudnn_version.h: /usr/include/cudnn_version.h

# 打印cudnn_version.h中的信息(匹配到“CUDNN_MAJOR”后打印此行和后(After)2两行)
# 我的版本号为CUDNN_MAJOR.CUDNN_MINOR.CUDNN_PATCHLEVEL=8.9.7
$ cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 7
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

/* cannot use constexpr here since this is a C-only file */

[*] 底子验证,仅验证包被精确安装
$ ldconfig -v | grep cudnn
                …………
                libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.9.7
                libcudnn.so.8 -> libcudnn.so.8.9.7
                libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.9.7
                libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.9.7
                libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.9.7
                libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.9.7
                libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.9.7
/sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Permission denied

[*] 官方的Sample_demo验证
$ cd/usr/src/cudnn_samples_v8/mnistCUDNN
# 编译the mnistCUDNN sample,成功编译的文件为mnistCUDNN
$ sudo make clean && make
# 运行文件
$ ./mnistCUDNN
……
……
Test passed!
# 说明cuDNN正常运行


[*] sudo make可能会报编译错误:fatal error: FreeImage.h: No such file or directory
$ sudo make
CUDA_VERSION is 11010
Linking agains cublasLt = true
CUDA VERSION: 11010
TARGET ARCH: x86_64
HOST_ARCH: x86_64
TARGET OS: linux
SMS: 35 50 53 60 61 62 70 72 75 80 86
test.c:1:10: fatal error: FreeImage.h: No such file or directory
    1 | #include "FreeImage.h"
      |          ^~~~~~~~~~~~~
compilation terminated.
解决:
$ sudo apt install libfreeimage3 libfreeimage-dev
# 重新编译,成功
$ sudo make clean && make
参考:
ubuntu安装anaconda3+cuda11.2+cuDNN+pytorch1.7
编译mnistCUDNN时堕落:fatal error: FreeImage.h: No such file or directory

切换差别版本的cuDNN



[*] .deb包安装,大概只能重新安装?不知道直接安装差别版本会不会起冲突,没有试验过
[*] .tar.xz压缩包安装,我使用的是这个方式
cuDNN的软链接比力多直接用脚本了,这个脚本为上面CUDA与这里cuDNN版本切换的复合脚本
比方存为switch_cuda_cuDNN.sh,使用时直接调用./switch_cuda_cuDNN.sh即可
#!/bin/bash

# 设置 CUDA 和 cuDNN 的安装路径
CUDA_BASE_PATH="/usr/local"
CUDNN_BASE_PATH="/opt/cudnn"

# 读取用户输入的 CUDA 和 cuDNN 版本
echo "Available CUDA versions: 12.1, 12.4"
read -p "Enter the CUDA version you want to switch to (e.g., 12.1): " CUDA_VERSION

echo "Available cuDNN versions: 8.9.5, 8.9.7"
read -p "Enter the cuDNN version you want to switch to (e.g., 8.9.7): " CUDNN_VERSION

# 检查 CUDA 版本目录是否存在
CUDA_PATH="$CUDA_BASE_PATH/cuda-$CUDA_VERSION"
if [ ! -d "$CUDA_PATH" ]; then
    echo "Error: CUDA version $CUDA_VERSION not found in $CUDA_BASE_PATH."
    exit 1
fi

# 检查 cuDNN 版本目录是否存在
CUDNN_PATH="$CUDNN_BASE_PATH/cudnn-$CUDNN_VERSION"
if [ ! -d "$CUDNN_PATH" ]; then
    echo "Error: cuDNN version $CUDNN_VERSION not found in $CUDNN_BASE_PATH."
    exit 1
fi

# 删除旧的 CUDA 符号链接
if [ -L "$CUDA_BASE_PATH/cuda" ]; then
    sudo rm "$CUDA_BASE_PATH/cuda"
    echo "Removed existing CUDA symbolic link."
fi

# 删除旧的 cuDNN 符号链接,只删除带有 "cudnn" 的链接
if [ -d "$CUDA_BASE_PATH/cuda/include" ]; then
    sudo find "$CUDA_BASE_PATH/cuda/include" -type l -name "*cudnn*" -exec rm {} \;
    echo "Removed existing cuDNN include symbolic links."
fi

if [ -d "$CUDA_BASE_PATH/cuda/lib64" ]; then
    sudo find "$CUDA_BASE_PATH/cuda/lib64" -type l -name "*libcudnn*" -exec rm {} \;
    echo "Removed existing cuDNN lib symbolic links."
fi

# 创建新的 CUDA 符号链接
sudo ln -sf "$CUDA_PATH" "$CUDA_BASE_PATH/cuda"
echo "Switched to CUDA $CUDA_VERSION."

# 创建新的 cuDNN 符号链接
sudo ln -sf "$CUDNN_PATH/include/"* "$CUDA_BASE_PATH/cuda/include/"
sudo ln -sf "$CUDNN_PATH/lib/"* "$CUDA_BASE_PATH/cuda/lib64/"
echo "Switched to cuDNN $CUDNN_VERSION."

# 刷新库缓存
sudo ldconfig

echo "CUDA $CUDA_VERSION and cuDNN $CUDNN_VERSION have been successfully switched."

卸载cuDNN


[*] 查察已经安装的包有什么
$ sudo dpkg -l | grep cudnn
iicudnn-local-repo-ubuntu2204-8.9.7.29 1.0-1               amd64 cudnn-local repository configuration files
iilibcudnn8                            8.9.7.29-1+cuda12.2 amd64 cuDNN runtime libraries
iilibcudnn8-dev                        8.9.7.29-1+cuda12.2 amd64 cuDNN development libraries and headers
iilibcudnn8-samples                  8.9.7.29-1+cuda12.2 amd64 cuDNN samples

[*] 卸载安装的libcudnn8相关包:
# 卸载刚才手动安装的三个libcudnn8相关包,要按依赖顺序卸载
sudo dpkg -P libcudnn8-samples
sudo dpkg -P libcudnn8-dev
sudo dpkg -P libcudnn8

[*] 还需要删除安装时使用的本地cuDNN仓库文件:
sudo dpkg -r cudnn-local-repo-ubuntu2204-8.9.7.29
sudo rm -rf /var/cudnn-local-repo-ubuntu2204-8.9.7.29

[*] 可以删除导入的GPG密钥:sudo rm /usr/share/keyrings/cudnn-local-*-keyring.gpg
[*] 清理APT缓存,确保系统不会再实验使用已删除的仓库:
sudo apt-get clean
sudo apt-get update
仍旧报错,说明仍旧没有在apt仓库中清理干净:
$ sudo apt-get update
Get:1 file:/var/cuda-repo-ubuntu2204-12-4-localInRelease
Get:2 file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29InRelease
Ign:2 file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29InRelease
Get:1 file:/var/cuda-repo-ubuntu2204-12-4-localInRelease
Get:3 file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29Release
Err:3 file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29Release
File not found - /var/cudnn-local-repo-ubuntu2204-8.9.7.29/Release (2: No such file or directory)
Hit:4 https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy InRelease                                                                                             
Hit:5 http://mirror.bizflycloud.vn/ubuntu jammy InRelease                                                                                                            
Hit:6 http://mirror.bizflycloud.vn/ubuntu jammy-updates InRelease                                 
Hit:7 http://security.ubuntu.com/ubuntu jammy-security InRelease                                    
Hit:8 http://mirror.bizflycloud.vn/ubuntu jammy-security InRelease
Hit:9 https://packages.microsoft.com/repos/edge stable InRelease
Reading package lists... Done
E: The repository 'file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29Release' no longer has a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
解决:
# 通过grep找到名为cudnn-local-repo-ubuntu2204-8.9.7.29的仓库在哪
$ grep -r 'cudnn-local-repo-ubuntu2204-8.9.7.29' /etc/apt/sources.list /etc/apt/sources.list.d/
/etc/apt/sources.list.d/cudnn-local-ubuntu2204-8.9.7.29.list:deb file:///var/cudnn-local-repo-ubuntu2204-8.9.7.29 /
# 直接删掉
$ sudo rm /etc/apt/sources.list.d/cudnn-local-ubuntu2204-8.9.7.29.list
# 重试
$ sudo apt-get update
Get:1 file:/var/cuda-repo-ubuntu2204-12-4-localInRelease
Get:1 file:/var/cuda-repo-ubuntu2204-12-4-localInRelease
Hit:2 https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy InRelease                                                                                          
Hit:3 http://security.ubuntu.com/ubuntu jammy-security InRelease                                                                                                
Hit:4 http://mirror.bizflycloud.vn/ubuntu jammy InRelease                                                      
Hit:5 http://mirror.bizflycloud.vn/ubuntu jammy-updates InRelease                           
Hit:6 http://mirror.bizflycloud.vn/ubuntu jammy-security InRelease
Hit:7 https://packages.microsoft.com/repos/edge stable InRelease
Reading package lists... Done

[*] 再次验证:
$ sudo dpkg -l | grep cudnn
rccudnn-local-repo-ubuntu2204-8.9.7.291.0-1 amd64cudnn-local repository configuration files
rc 状态表现该包的步伐文件已被删除,但配置文件仍旧存在
要彻底打扫这个包及其残留的配置文件,可以用:sudo dpkg --purge cudnn-local-repo-ubuntu2204-8.9.7.29
[*] 彻底删除完成
参考:Ubuntu18.04——私房整理安装NIVIDA驱动(11.4), CUDA11.2, cudnn8.2, TensorRT8.0, Pytorch1.9.0

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: CUDA与cuDNN在linux / Ubuntu22.04上的安装与卸载,包含CUDA的.run安装与.d