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


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

  • 重点:
    1. 整合了两种CUDA安装方式(.run与.deb)、两种cuDNN的安装方式(.tar.xz与.deb),网上好像没什么人做这个
    2. 整合了CUDA与cuDNN的官方样例代码的测试方法
      • 网上的CUDA测试方法大多使用nvcc -V,还算OK,添加了官方samples的测试
      • 网上的cuDNN测试方法基本上止步于查询版本号或者查询dpkg是否能正常索引包,不太有用,能编译跟跑通官方样例才是正解
    3. 整合了CUDA与cuDNN的版本切换方法,尤其是完善的使用脚本的一键切换版本方法(部分代码由GPT辅助生成)
    4. 整合了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

安装准备

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

安装方法推荐

推荐使用方法一.run安装

  • 后续版本管理或卸载非常方便
  • 因为使用 .deb可能会将已经安装的较新的显卡驱动替换

方法一:.run(local)安装

  1. 下载并安装

    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 # 安装
    
  2. 进入可视化界面安装

    同意协议:
    在这里插入图片描述
    因为之前已经安装了驱动,取消勾选驱动安装在这里插入图片描述
    在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.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
    
  • 解决法二(未测试):
    修改/etc/apt/sources.list或者/etc/apt/sources.list.d/ubuntu.sources

修改环境变量以便使用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

  1. 查看有什么包,以防止误删(针对已经安装多个版本的CUDA)

    • 通过.deb安装的CUDA版本可以使用以下命令查看:dpkg -l | grep cuda
    • 通过.run文件安装的CUDA版本通常可以通过查看/usr/local目录来检查:ls /usr/local | grep cuda
  2. 卸载CUDA工具包和相关组件:

    sudo apt-get remove --purge '^cuda-.*'
    sudo apt-get remove --purge '^libnvidia-.*'
    sudo apt-get remove --purge '^nvidia-.*'
    
    • '^cuda-.*':匹配所有以cuda-开头的包,如cuda-toolkit-12-6cuda-drivers等。
    • '^libnvidia-.*''^nvidia-.*':匹配所有以libnvidia-nvidia-开头的包,删除与NVIDIA相关的库和驱动程序。一般删完第一个'^cuda-.*',后面都没有了
  3. 移除本地的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密钥。
  4. 清理APT缓存:

    sudo apt-get autoremove
    sudo apt-get autoclean
    
    • autoremove:删除系统中不再需要的依赖包。
    • autoclean:清除APT缓存中的旧版本软件包文件。
  5. 删除CUDA安装目录(可选):

    bash复制代码
    sudo rm -rf /usr/local/cuda*
    
    • 删除默认安装的CUDA目录(一般在/usr/local/cuda),包括所有版本的CUDA。
    • 如果安装了多个CUDA版本,可以只删除特定版本的目录。
  6. 检查dpkg -l | grep cuda,应该没有输出

  7. 卸载残留软件: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

安装准备

  1. 下载页面:cuDNN Archive

    官方安装文档:

  2. 安装方式选择:

    • .tar压缩包安装:没有使用系统的软件包管理(dpkg),需要对Linux有一定的了解,但是可以同时安装多个版本并人为控制调用
    • .deb包安装:探索起来麻烦,但是去除弯路后安装方便,然而不方便进行多版本控制
    • 省流:有多版本需求考虑.tar压缩包安装,否则用.deb包一键安装
  3. 下载对应CUDA版本的cuDNN(需要登录)

    1. .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

    2. .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压缩包安装方式

安装

  1. 创建目录:sudo mkdir -p /opt/cudnn/cudnn-8.9.7

  2. 解压缩并移动文件夹并重命名:

    如果没有多版本需求,也可以不放在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
    
  3. 链接文件夹:

    此处需要注意链接的是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 122  2023 08A7D361.pub
    -rw-r--r-- 1 root root      1166 122  2023 cudnn-local-08A7D361-keyring.gpg
    -rw-r--r-- 1 root root      1572 122  2023 InRelease
    -rw-r--r-- 1 root root 444477788 122  2023 libcudnn8_8.9.7.29-1+cuda12.2_amd64.deb
    -rw-r--r-- 1 root root 440462722 122  2023 libcudnn8-dev_8.9.7.29-1+cuda12.2_amd64.deb
    -rw-r--r-- 1 root root   1664468 122  2023 libcudnn8-samples_8.9.7.29-1+cuda12.2_amd64.deb
    -rw-r--r-- 1 root root      1928 122  2023 Local.md5
    -rw-r--r-- 1 root root       836 122  2023 Local.md5.gpg
    -rw-r--r-- 1 root root      2121 122  2023 Packages
    -rw-r--r-- 1 root root       949 122  2023 Packages.gz
    -rw-r--r-- 1 root root       690 122  2023 Release
    -rw-r--r-- 1 root root       833 122  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文件包含,解压直接安装即可

验证安装

  1. 基础验证,仅验证可以访问并查询到对应版本信息

    # 先找到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 */
    
  2. 基础验证,仅验证包被正确安装

    $ 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
    
  3. 官方的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

  1. 查看已经安装的包有什么

    $ 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
    
  2. 卸载安装的libcudnn8相关包:

    # 卸载刚才手动安装的三个libcudnn8相关包,要按依赖顺序卸载
    sudo dpkg -P libcudnn8-samples
    sudo dpkg -P libcudnn8-dev
    sudo dpkg -P libcudnn8
    
  3. 还需要删除安装时使用的本地cuDNN仓库文件:

    sudo dpkg -r cudnn-local-repo-ubuntu2204-8.9.7.29
    sudo rm -rf /var/cudnn-local-repo-ubuntu2204-8.9.7.29
    
  4. 可以删除导入的GPG密钥sudo rm /usr/share/keyrings/cudnn-local-*-keyring.gpg

  5. 清理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.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.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.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
    
  6. 再次验证:

    $ 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

  7. 彻底删除完成
    参考:Ubuntu18.04——私房整理安装NIVIDA驱动(11.4), CUDA11.2, cudnn8.2, TensorRT8.0, Pytorch1.9.0

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu 22.04安装 CUDA 可以按照以下步骤进行操作: 1. 首先,确保你的显卡支持 CUDA。你可以在 NVIDIA 官方网站查找显卡兼容性列表。 2. 打开终端,并使用以下命令添加 NVIDIA 的存储库: ``` $ sudo add-apt-repository -y ppa:graphics-drivers/ppa $ sudo apt update ``` 3. 安装适合你的显卡的 NVIDIA 驱动程序。可以使用“Additional Drivers”工具来完成这一步骤,或者在终端中使用以下命令安装: ``` $ sudo ubuntu-drivers autoinstall ``` 4. 安装 CUDA Toolkit。你可以从 NVIDIA 官方网站下载适合你的 CUDA 版本。假设你已经下载了一个名为 `cuda-repo-ubuntu22.04-<version>.deb` 的文件,在终端中导航到该文件所在的目录,并运行以下命令: ``` $ sudo dpkg -i cuda-repo-ubuntu22.04-<version>.deb $ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu22.04/x86_64/7fa2af80.pub $ sudo apt update $ sudo apt install cuda ``` 5. 设置环境变量。在终端中打开 `~/.bashrc` 文件,并添加以下行: ``` export PATH=/usr/local/cuda-<version>/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-<version>/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} ``` 请确保将 `<version>` 替换为你安装CUDA 版本号。 6. 保存并关闭 `~/.bashrc` 文件。然后,运行以下命令以使环境变量生效: ``` $ source ~/.bashrc ``` 7. 最后,验证 CUDA 是否成功安装。你可以在终端中运行以下命令来检查 CUDA 版本: ``` $ nvcc --version ``` 如果一切顺利,你应该能够看到 CUDA 版本号的输出信息。这意味着你已经成功在 Ubuntu 22.04安装CUDA。祝你好运!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值