admin管理员组文章数量:1588268
CUDA与cuDNN在linux / Ubuntu22.04上的安装与卸载
- 往下看的重要提醒
- CUDA for Linux
- 安装准备
- 安装方法推荐
- 方法一:`.run`(local)安装
- 方法二:`.deb`(local)安装
- 修改环境变量以便使用`nvcc`命令
- 功能验证
- 切换不同版本的CUDA
- CUDA卸载
- 卸载`.run`(local)安装的CUDA
- 卸载`.deb`(local)安装的CUDA
- cuDNN for Linux
- 安装准备
- `.tar.xz`压缩包安装方式
- 安装
- 验证安装
- `.deb`包安装方式
- 省流版
- 我的安装探索过程
- 验证安装
- 切换不同版本的cuDNN
- 卸载cuDNN
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测试方法大多使用
- 整合了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/cuda-downloads
- 一般都是需要寻找其他的合适版本,从上面网站的Resources · Archive of Previous CUDA Releases进去:CUDA Toolkit Archive
安装方法推荐
推荐使用方法一.run
安装
- 后续版本管理或卸载非常方便
- 因为使用
.deb
可能会将已经安装的较新的显卡驱动替换
方法一:.run
(local)安装
-
下载并安装
wget https://developer.download.nvidia/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 # 安装
-
进入可视化界面安装
同意协议:
因为之前已经安装了驱动,取消勾选驱动安装
在Options里可以更改安装地址,还可以选择为哪些用户或全部用户安装CUDA
因为要考虑我们手动切换版本,不要让安装程序自动更新软链接
安装成功:$ 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/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/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/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 bin cuda cuda-12 cuda-12.4 etc games include lib man sbin share src
-
在系统可视化界面中,可以看出
"cuda"
是一个软链接("cuda-12"
也是),它将指向具体版本的一个cuda文件夹,这里我安装了第二个版本的CUDA,所以指向了新安装的cuda-12.1
-
修改环境变量
注意,路径是通过软链接的文件夹来指向实际路径的
$ 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
bandwidthTest busGrind deviceQuery nbody nbody_data_files oceanFFT oceanFFT_data_files randomFog randomFog_data_files vectorAdd
# 运行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
用空格键勾选以下几项
选择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版本,可以只删除特定版本的目录。
- 删除默认安装的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 [installed,local] nsight-systems-2023.4.4/now 2023.4.4.54-234433681190v0 amd64 [installed,local] $ 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
-
链接文件夹:
将include
文件夹与lib
文件夹中的所有文件软连接到cuda/include/
与cuda/lib64/
中
如果有多个版本的CUDA,需要注意此处的命令,链接的地址是名为cuda
的软链接,这个软连接只会指向一个具体版本的CUDA文件夹,例如指向cuda12.4
或者cuda11.0
,需要留意到底将cuDNN链接到了哪个版本下的cudasudo 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月 2 2023 08A7D361.pub -rw-r--r-- 1 root root 1166 12月 2 2023 cudnn-local-08A7D361-keyring.gpg -rw-r--r-- 1 root root 1572 12月 2 2023 InRelease -rw-r--r-- 1 root root 444477788 12月 2 2023 libcudnn8_8.9.7.29-1+cuda12.2_amd64.deb -rw-r--r-- 1 root root 440462722 12月 2 2023 libcudnn8-dev_8.9.7.29-1+cuda12.2_amd64.deb -rw-r--r-- 1 root root 1664468 12月 2 2023 libcudnn8-samples_8.9.7.29-1+cuda12.2_amd64.deb -rw-r--r-- 1 root root 1928 12月 2 2023 Local.md5 -rw-r--r-- 1 root root 836 12月 2 2023 Local.md5.gpg -rw-r--r-- 1 root root 2121 12月 2 2023 Packages -rw-r--r-- 1 root root 949 12月 2 2023 Packages.gz -rw-r--r-- 1 root root 690 12月 2 2023 Release -rw-r--r-- 1 root root 833 12月 2 2023 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 ii cudnn-local-repo-ubuntu2204-8.9.7.29 1.0-1 amd64 cudnn-local repository configuration files ii libcudnn8 8.9.7.29-1+cuda12.2 amd64 cuDNN runtime libraries ii libcudnn8-dev 8.9.7.29-1+cuda12.2 amd64 cuDNN development libraries and headers ii libcudnn8-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-local InRelease [1,572 B] Get:2 file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29 InRelease Ign:2 file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29 InRelease Get:1 file:/var/cuda-repo-ubuntu2204-12-4-local InRelease [1,572 B] Get:3 file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29 Release Err:3 file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29 Release File not found - /var/cudnn-local-repo-ubuntu2204-8.9.7.29/Release (2: No such file or directory) Hit:4 https://mirrors.aliyun/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/ubuntu jammy-security InRelease Hit:8 http://mirror.bizflycloud.vn/ubuntu jammy-security InRelease Hit:9 https://packages.microsoft/repos/edge stable InRelease Reading package lists... Done E: The repository 'file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29 Release' 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 [signed-by=/usr/share/keyrings/cudnn-local-08A7D361-keyring.gpg] 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-local InRelease [1,572 B] Get:1 file:/var/cuda-repo-ubuntu2204-12-4-local InRelease [1,572 B] Hit:2 https://mirrors.aliyun/docker-ce/linux/ubuntu jammy InRelease Hit:3 http://security.ubuntu/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/repos/edge stable InRelease Reading package lists... Done
-
再次验证:
$ sudo dpkg -l | grep cudnn rc cudnn-local-repo-ubuntu2204-8.9.7.29 1.0-1 amd64 cudnn-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
版权声明:本文标题:CUDA与cuDNN在linuxUbuntu22.04上的安装与卸载,包含CUDA的.run安装与.deb安装,cuDNN的.tar安装与.deb安装 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728038033a1143143.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论