Anaconda、CUDA、cuDNN和PyTorch包的安装

本文最后更新于 2024年7月12日 下午

本文主要分享了Linux(Ubuntu 18.04)下Anaconda、CUDA、cuDNN和PyTorch包的安装。

Anaconda

查询

1
2
3
4
5
6
7
8
9
conda --help  # 查询 conda 的命令
conda --version # 查看当前 conda 的版本
# 环境管理
# 查看所有的conda环境
conda env list # 或
conda info --envs
# 查看当前环境
conda info -e # 查看当前环境是哪个
conda info # 查看当前环境的完整信息

安装

  1. 更新软件包列表。

    1
    2
    sudo apt update  # 更新软件包列表,检查可用的软件包更新
    sudo apt upgrade # 安装可用的软件包更新
  2. 安装第三方库。

    1
    sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6
  3. 查询系统架构。

    1
    uname -a  # 查询系统架构
  4. 安装Conda。

    https://docs.anaconda.com/anaconda/install/linux/

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # Step 1.更换终端 Shell
    # https://stackoverflow.com/questions/40370467/anaconda-not-found-in-zsh
    cat /etc/shells # 查看系统安装了的shell
    echo $SHELL # 当前的shell
    chsh -s /bin/bash # 切换回 bash 终端

    # Step 2.下载安装 Anaconda3
    # https://www.anaconda.com/
    # https://repo.anaconda.com/archive/
    curl -O https://repo.anaconda.com/archive/Anaconda3-<INSTALLER_VERSION>-Linux-x86_64.sh
    bash Anaconda3-2023.09-0-Linux-x86_64.sh
    # 认真看安装过程提示信息,需要按Enter (回车键)或者输入yes,(如果输入yes时,不小心输多了,就按control和退格键删除)。
    # 看到 more 就是按空格键翻页查看协议,按 q 退出。
    # Anaconda 建议您接受默认安装位置。请勿将 Anaconda/Miniconda 安装路径选择为 /usr 。
    # 使用 CTRL+C 取消安装。
    You can undo this by running `conda init --reverse $SHELL`? [yes|no]
    yes

    # 安装软件完成后需要重启
    source ~/.bashrc

    # 检查conda是否安装成功
    conda --help # 调用出来说明安装成功

    # Step 3.更换回终端 Shell
    chsh -s /bin/zsh # 切换回 zsh 终端
  5. 完成。

配置

可以通过配置auto_activate_base关闭自动进入conda基础环境:

1
conda config --set auto_activate_base false

如要开启,将其设为true就可以了:

1
conda config --set auto_activate_base true

附:conda常用命令

NVIDIA显卡驱动

查询驱动

1
2
lspci | grep -i nvidia  # 查看是否安装NVIDIA显卡
nvidia-smi # 查看显卡信息

安装驱动

图形界面(推荐)

打开应用程序界面,选择“软件和更新(softwares and updates)”-附加驱动,在此处选择“使用NVIDIA driver metapackage来自nvidia-driver-版本号(专有)”。

一般安装版本号最大的那个。

如果刚装好系统,应该会使用底下那个nouveau,nouveau不是英伟达提供的,是民间大佬写的适配英伟达显卡的驱动,只是浏览屏幕的话够用,但我们要深度学习,就需要使用英伟达的驱动了。

命令行

系统自带

1
2
3
4
5
6
7
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
ubuntu-drivers devices
# 找到最适合的驱动安装,安装recommended标记的,通常也是数字版本最大的那个
sudo apt install nvidia-driver-XXX
# 也可以自动安装系统推荐那个
sudo ubuntu-drivers autoinstall

如果没有遇到报错,说明安装成功,此时调用nvidia-smi指令可能还是看不到显卡信息,不要担心,sudo reboot重启系统之后就能看到了。

run文件安装

参考链接

如果在系统自带的方式中ubuntu-drivers devices找不到可用的版本,可以使用以下方法:

  1. 安装依赖项:

    1
    2
    3
    sudo apt-get update
    sudo apt-get install gcc
    sudo apt-get install make
  2. 禁用nouveau

  3. 英伟达的官网上查找你自己电脑的显卡型号然后下载相应的驱动,例如:NVIDIA-Linux-x86_64-450.57.run。下载后的run文件拷贝至home目录下(可选?)。

  4. 在Ubuntu下按Ctrl+Alt+F1进入命令行界面(如果是服务器本来就没有图形化界面的话这一步就不必了?)。

    1. 如果出现unit lightdm.service not loaded,则:

      1
      2
      sudo apt-get update
      sudo apt-get install lightdm
    2. 安装后会跳出一个界面,选择lightdm

    3. 重启:

      1
      sudo reboot
    4. 重启登录后Ctrl+Alt+F1进入命令行界面。

  5. 输入用户名和密码登录后输入:

    1
    2
    3
    sudo service lightdm stop  # 这个是关闭图形界面,不执行会出错。or
    sudo /etc/init.d/lightdm stop
    sudo /etc/init.d/lightdm status

    对于其他的 Linux 版本,如果桌面系统是基于 gdm 类型,应该把命令中的 lightdm 改为 gdm 即可。

    非这两种桌面系统类型的,自行搜索一下你的Linux版本关闭 X 服务的相关命令吧。

  6. 关闭了 X 服务后图形桌面可能会关闭,因为我是通过 ssh 连接的服务器进行的操作,所以也没有看到具体的变化,然后输入一下命令:

    1
    2
    ps aux | grep X  # 查看还有没有X服务的进程,若有直接sudo kill -9 进程号   杀死X服务进程即可
    sudo kill -9 [‘pid’]
  7. 卸载掉原有驱动(如果装过的话)。

  8. 安装:

    1
    2
    3
    cd home
    sudo chmod a+x NVIDIA-Linux-x86_64-396.18.run # 给驱动run文件赋予执行权限
    sudo ./NVIDIA-Linux-x86_64-396.18.run -no-x-check -no-nouveau-check -no-opengl-files
    • -no-x-check:安装驱动时关闭X服务
    • -no-nouveau-check:安装驱动时禁用nouveau
    • -no-opengl-files:只安装驱动文件,不安装OpenGL文件。只有禁用opengl这样安装才不会出现循环登陆的问题
    1. The distribution-provided pre-install script failed! Are you sure you want to continue?Yes
    2. Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later?No
    3. Nvidia’s 32-bit compatibility libraries?No
    4. Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up.Yes
  9. 报错处理:

    1. ERROR: Unable to load the kernel module 'nvidia.ko'.可以尝试将-no-opengl-files替换为--add-this-kernel

    2. ERROR: Unable to load the kernel module 'nvidia-drm'. 此问题是由于之前安装过驱动的残留所致。卸载掉原有驱动

    3. Error:Unable to load the 'nvidia-drm' kernel module .出现这个问题最有可能的原因是你安装的Ubuntu是UEFI模式启动的,但是在BIOS中却打开了Security BOOT选项。正确做法是禁用该选项,具体方式请自行搜索。

    4. An NVIDIA kernel module 'nvidia-uvm' appears to already be loaded in your kernel.如原文所述,'nvidia-uvm'程序因故未退出导致按照无法正常进行,直接:

      1
      2
      sudo lsof | grep nvidia.uvm
      # 查看哪些程序在占用nvidia.nvm就可以了,可直接通过 sudo kill -9 [`pid`] 杀死相对应的进程即可

      对于一些 kill 杀不死的进程可直接重启服务器。

      如果还是存在错误,那么就需要查看是否卸载了之前的驱动。

  10. 安装完毕之后执行:

    1
    2
    modprobe nvidia  # 挂载Nvidia驱动
    nvidia-smi # 检查驱动是否安装成功

    此时调用nvidia-smi指令可能还是看不到显卡信息,不要担心,sudo reboot重启系统之后就能看到了。

  11. 开启图形界面,重启:

    1
    2
    sudo service lightdm start
    sudo reboot
  12. 安装完毕。

卸载驱动

首先,打开应用程序界面,选择“软件和更新(softwares and updates)”-附加驱动,在此处选择“使用X.Org X server-Nouveau display driver来自xserver-Xorg-video-nouveau(开源)”。

然后,开始卸载:

1
2
3
4
5
6
7
8
9
10
11
12
sudo apt-get --purge remove nvidia-*
sudo apt-get purge nvidia*
sudo apt-get purge libnvidia*
# 如果驱动是通过run文件安装的,可以尝试
sudo ./NVIDIA-Linux-xxx.run --uninstall

# 清除缓存(慎用)
sudo apt-get autoremove

sudo dpkg --list | grep nvidia # 验证一下有没有卸载干净,输出为空,表示全部卸载了
# (非必要不重启,万一进不了系统了),再打开“软件与更新”,会发现显卡驱动又回到了而nouveau。执行
cat /proc/driver/nvidia/version # 会发现文件目录不存在,说明真的卸载干净了

之后重新安装NVIDIA驱动即可。

禁用nouveau

应该先装完Nvidia驱动,再在“软件与更新”里面更改驱动,最后再禁用。直接禁用后重启相当于没有驱动了,开机图形化界面进不了。

1
2
3
4
5
6
7
8
9
10
sudo gedit /etc/modprobe.d/blacklist.conf 
# 在blacklist.conf文件末尾加上这两行,并保存:
blacklist nouveau
options nouveau modeset=0

sudo update-initramfs -u # 应用更改
# 重启电脑
sudo reboot
# 验证是否禁用nouveau
lsmod | grep nouveau # 没有信息返回说明已禁用了

无法进入图形化界面

如果重启后无法进入图形化界面,则强制重启电脑,在BIOS引导界面不直接进入Linux系统,而是进入Advance options for Ubuntu,并选择进入其中一个内核(最好是备用内核),过段时间左上角会出现“_”符号,按住Ctrl+Alt+F2,进入终端,输入用户名和密码,随后卸载所有驱动,清除缓存,重新安装驱动并重启即可。指令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 卸载所有驱动
sudo apt-get --purge remove nvidia-*
sudo apt-get purge nvidia*
sudo apt-get purge libnvidia*

# 清除缓存(慎用)
sudo apt-get autoremove

# 重新安装驱动
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
ubuntu-drivers devices
# 找到最适合的驱动安装,安装recommended标记的,通常也是数字版本最大的那个
# 最好安装系统之前的那个
sudo apt install nvidia-driver-XXX
# 也可以自动安装系统推荐那个
sudo ubuntu-drivers autoinstall

reboot # 重启

CUDA

全称:CUDA Toolkit

不安装CUDA也可行,在虚拟环境中安装pytorch的时候会自动装一个不完整的CUDA,足够跑深度学习了。只不过用deepspeed的时候会报错找不到CUDA_HOME。但是如果需要CUDA编程等操作就需要安装完整版的CUDA。

特定版本的CUDA会对NVIDIA显卡驱动有最低版本要求,一般来说装最新的驱动即可,会向下兼容。

(GPU加速的、而不是CPU)CUDA、PyTorch和Python版本并不是一一对应的关系。因此,在选择要安装的CUDA版本时,建议根据环境要求的Python和PyTorch版本在这里这里提前确定兼容的CUDA版本。

如果CUDA版本太高,没有相应的PyTorch支持。就需要按照PyTorch版本去降低CUDA的版本。

查询

1
2
3
4
5
6
7
ls -l /usr/local | grep cuda  # 检查是否安装了CUDA
nvcc -V # 查看自己安装的CUDA版本
lspci | grep -i nvidia # 检查系统是否有支持 CUDA 编程的 GPU
# 获取自己的 GPU 型号和支持的 CUDA 版本
# (通过去nvidia官网或者其他地方找到这款GPU对cuda版本的要求(至少是多少))
nvidia-smi # nvidia-smi 显示的的 cuda version 是当前驱动支持的最大 cuda toolkit 的版本
uname -m # 系统架构

记住系统此时使用的显卡驱动版本,可以使用nvidia-smi命令查看,可以打开应用程序界面,选择“软件和更新(softwares and updates)”-附加驱动-“使用NVIDIA driver metapackage来自nvidia-driver-版本号(专有)”。

安装

  1. 安装依赖库。

    1
    2
    3
    4
    5
    # 安装相应的依赖库
    sudo apt update # 更新 apt
    sudo apt install build-essential
    sudo apt install cmake gcc g++ make
    sudo apt install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev freeglut3-dev
  2. (可选)降低gcc和g++版本。

    gcc9、g9版本太高,会导致CUDA无法安装,因此要先降低gcc、g版本到7及以下。

    1
    2
    3
    # 查询版本
    gcc -v
    g++ -v

    gcc、g++的安装与版本管理

  3. 下载安装。

    1
    uname -a  # 查询系统架构

    在 CUDA Toolkit 的下载页面选择系统版本和安装方式,得到官网的下载指示。

    主页:https://developer.nvidia.com/cuda-toolkit

    历史版本:https://developer.nvidia.com/cuda-toolkit-archive

    • 使用*.deb安装CUDA,会自动新装显卡驱动,容易出现显卡驱动冲突的问题(当然,可以解决)。
    • 使用runfile进行安装可以在安装前选择不安装显卡驱动。但后续以*.deb形式安装其他框架时(例如TensorRT),会提示需要使用*.deb安装的CUDA。
    • 想要[CUDA多版本共存](# CUDA多版本共存)需要使用runfile进行安装。
    • 所以,使用runfile进行安装更方便、安全;使用*.deb安装更长远?

    如果使用wget命令下载大文件过程中报错 segmentation fault (core dumped),那还不如直接复制网址下。

    • *.deb(local)版本:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      cd DownloadFolder
      # 以下为官网的下载指示
      wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
      sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600

      wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu1804-11-8-local_11.8.0-520.61.05-1_amd64.deb
      sudo dpkg -i cuda-repo-ubuntu1804-11-8-local_11.8.0-520.61.05-1_amd64.deb # 安装本地仓库,使得通过APT包管理器安装cuDNN相关包成为可能
      sudo cp /var/cuda-repo-ubuntu1804-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/ # 通过导入GPG密钥,系统能够验证从本地仓库安装的软件包是经过NVIDIA官方签名的

      sudo apt-get update # 刷新APT的包列表,准备安装新的软件包
      sudo apt-get -y install cuda
    • *.run版本:

      1
      2
      3
      4
      5
      6
      cd DownloadFolder
      wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
      sudo sh cuda_11.8.0_520.61.05_linux.run
      # 官网除了提供主程序可能还有补丁,这些补丁需要安装基本安装程序后再安装
      sudo sh cuda_10.2.1_linux.run # 可选
      sudo sh cuda_10.2.2_linux.run # 可选
      1. 安装显卡驱动会默认安装对应版本的CUDA,此时会提示已经存在CUDA(Error installing Cuda toolkit: Existing package manager installation of the driver found)。继续安装(continue)

      2. 是否接受协议。接受(accept)

      3. 出现一系列安装提示。不安装显卡驱动(在“Driver”选项处按下Enter,取消X号,表示不选择);Kernel Objests-nvidia-fs保持默认不勾选;其它(CUDA Toolkit 11.8、CUDA Demo Suite 11.8和CUDA Documentation 11.8)保持勾选。

      4. 是否生成/更新动态链接/usr/local/cuda(当你已经有该软链接时,会有此提示)。更新(Yes)

        如果出现动态链接库链接不到的情况,手动建立软连接:

        1
        sudo ln -sf /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudnn.so.7.4.2 /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudnn.so.7

      安装好 CUDA Toolkit 后,屏幕上将输出(示例):

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      ===========
      = Summary =
      ===========

      Driver: Not Selected
      Toolkit: Installed in /usr/local/cuda-11.8/
      Samples: Installed in /home/lll25655/

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

      To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.8/bin

      Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-11.8/doc/pdf for detailed information on setting up CUDA.
      ***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 520.00 is required for CUDA 11.8 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

      这表示 NVIDIA Driver 和 CUDA Toolkit 已安装完毕。后半段安装信息提示我们修改环境变量的 PATH 和 LD_LIBRARY_PATH.

  4. 配置。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sudo gedit ~/.bashrc  # 使用gedit文本编辑器打开.bashrc
    # (按照实际提示/本地路径)输入:

    # CUDA
    # add nvcc compiler to path
    export PATH=$PATH:/usr/local/cuda-11.8/bin
    # add cuBLAS, cuSPARSE, cuRAND, cuSOLVER, cuFFT to path
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64
    # export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.8 # CUDA路径前有冒号好像会报错
    export CUDA_HOME=/usr/local/cuda-11.8 # or
    # export CUDA_HOME=/usr/local/cuda

    # 保存,关闭
    source ~/.bashrc

    环境变量 PATH 设置可执行程序的搜索路径,LD_LIBRARY_PATH 设置动态链接库的搜索路径。

  5. 测试。

    1
    2
    3
    4
    5
    6
    # 检查是否安装了CUDA
    ls -l /usr/local | grep cuda
    # 查看自己安装的cuda版本
    nvcc -V
    cat /usr/local/cuda/version.txt # 使用deb安装的好像没有该路径。or
    cat /usr/local/cuda/version.json

    可以在路径/usr/local/cuda-[version]/extras/demo_suite下找到一些样例程序,运行:

    1
    2
    3
    cd /usr/local/cuda-11.8/extras/demo_suite
    ./deviceQuery # 输出结果包含Result = PASS 说明OK
    ./bandwidthTest # 输出结果包含Result = PASS 说明OK

    使用deb安装的CUDA从CUDA-11.6开始cuda toolkit就不自带cuda-samples了,可以自行安装:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    cd yourFloder
    git clone https://github.com/NVIDIA/cuda-samples.git
    cd cuda-samples/Samples/1_Utilities/deviceQuery # cd <sample_dir>
    make clean # (可选)清除之前编译生成的文件(如果有)
    make
    ./deviceQuery # 即可显示GPU信息

    sudo cp deviceQuery /usr/local/bin/ # 你可以将 deviceQuery 文件复制到 /usr/local/bin/ 目录中,这样你就可以在任何地方直接运行它
    # 然后就可以放心删除clone到本地的cuda-samples文件夹了。在任意位置打开terminal,都可以直接运行deviceQuery 命令查看GPU信息
  6. 检查显卡驱动(尤其是使用*.deb方式进行安装的)。

    1
    nvidia-smi

    如果正常,最好。如果报错:Failed to initialize NVML: Driver/library version mismatch,这是因为*.deb自动安装了其它版本号的显卡驱动,而自动卸载了之前的显卡驱动,此时运行:

    1
    2
    sudo dpkg --list | grep nvidia
    # 可以看到既有之前的版本号也有新增的,而且之前的那几个包的状态都变成了rc,这意味着这个包刚被remove卸载了,但是还残留着配置文件configurations,其他新增的的包状态都是ii,意味着这个包刚被install安装,而且已经installed装好了。

    可见目前的驱动软件其实已经变成了新增的,但是为什么nvidia-smi还是会报错呢?这是因为,软件变新增的了,但是系统的配置文件还保持着之前的,执行:

    1
    cat /proc/driver/nvidia/version  # 可以看到输出的驱动版本还是之前的

    所以,下面要做的事就是卸载所有显卡驱动软件包,再重装之前的显卡驱动:

    1
    2
    3
    4
    5
    6
    7
    8
    sudo apt-get --purge remove nvidia-*
    sudo apt-get purge nvidia*
    sudo apt-get purge libnvidia*

    sudo dpkg --list | grep nvidia # 验证一下有没有卸载干净,输出为空,表示全部卸载了
    # (非必要不重启,万一进不了系统了),再打开“软件与更新”,会发现显卡驱动又回到了而nouveau。执行
    cat /proc/driver/nvidia/version # 会发现文件目录不存在,说明真的卸载干净了
    # 残留几个包实在卸载不掉也行?

    最后,打开应用程序界面,选择“软件和更新(softwares and updates)”-附加驱动,在此处选择“使用NVIDIA driver metapackage来自nvidia-driver-版本号(专有)”(之前使用的那个版本号最保险)。

    如果此时运行nvidia-smi还没有结果,重启一下就好了(最好在重启前备份重要文件,以防万一)。

    如果重启后无法进入图形化界面,则强制重启电脑,在BIOS引导界面不直接进入Linux系统,而是进入Advance options for Ubuntu,并选择进入其中一个内核(最好是备用内核),过段时间左上角会出现“_”符号,按住Ctrl+Alt+F2,进入终端,输入用户名和密码,随后卸载所有驱动,清除缓存,重新安装驱动并重启即可。指令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 卸载所有驱动
    sudo apt-get --purge remove nvidia-*
    sudo apt-get purge nvidia*
    sudo apt-get purge libnvidia*

    # 清除缓存(慎用)
    sudo apt-get autoremove

    # 重新安装驱动
    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt-get update
    ubuntu-drivers devices
    # 找到最适合的驱动安装,安装recommended标记的,通常也是数字版本最大的那个
    # 最好安装系统之前的那个
    sudo apt install nvidia-driver-XXX
    # 也可以自动安装系统推荐那个
    sudo ubuntu-drivers autoinstall

    reboot # 重启
  7. 完成。

卸载

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/

*.deb(local)版本安装

1
2
3
4
5
6
7
8
9
10
11
apt list --installed | grep -i cuda  # 模糊查询

# 删除数据库
sudo apt-get --purge remove cuda-repo-ubuntu1804-11-8-local # 当时安装时使用的deb包名的前一部分,也就是在/var文件夹里的cuda*文件夹
sudo apt-get --purge remove cuda-11-8 # 安装的版本号。没有这个包?无伤大雅

sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"

# 上面的命令应该已经卸载了下面的3个文件夹
cd usr/local
sudo rm -rf cuda cuda-11 cuda-11.8

最后,别忘了删除安装CUDA第5步在~/.bashrc增加的3行export语句。

验证:

1
nvcc -V

*.run版本安装

1
2
3
4
5
6
7
8
9
10
11
# cuda10.0及以下的卸载
cd /usr/local/cuda-xx.x/bin/
sudo ./uninstall_cuda_xx.x.pl
cd /usr/local/
sudo rm -rf /usr/local/cuda-xx.x

# cuda10.1及以上的卸载
cd /usr/local/cuda-xx.x/bin/
sudo ./cuda-uninstaller
cd /usr/local/
sudo rm -rf /usr/local/cuda-xx.x

最后,别忘了删除安装CUDA第5步在~/.bashrc增加的3行export语句。

验证:

1
nvcc -V

如果上面的方法不行,再是试试下面的方法:

1
2
3
4
5
6
7
8
9
10
11
# uninstall cuda
# 第一行命令不要忘记要加上perl命令,要不然会报错
sudo perl /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl

# 删除文件夹
sudo rm -rf /usr/local/cuda-X.Y

#uninstall driver
sudo /usr/bin/nvidia-uninstall
sudo apt-get remove --purge nvidia-*
# 记得重装nvidia driver

CUDA多版本共存

需要使用*.run版本安装的CUDA,通过改变软链接的方式切换CUDA版本。

1
2
3
4
sudo rm -rf /usr/local/cuda  # 删除软链接,注意是 /usr/local/cuda 而不是 /usr/local/cuda/,前者仅删除软链接,而后者会删除软链接所指向的目录的所有内容,操作请小心
sudo ln -s cuda_path /usr/local/cuda # 创建名为 /usr/local/cuda 的软链接,其指向 cuda_path 所指定的 cuda 安装目录,比如:/usr/local/cuda-11.8

# 修改安装CUDA第5步在`~/.bashrc`增加的3行`export`语句

cuDNN

查询

1
2
3
4
5
6
apt show libcudnn8  # 通过查询已安装的libcudnn8包来验证cuDNN的版本
# 查看版本(路径可能不一致,有一个命令有输出就行)
cat /usr/include/cudnn_version.h
cat /usr/include/cudnn.h
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

安装

全称:CUDA Deep Neural Network library

https://docs.nvidia.com/deeplearning/cudnn/latest/installation/linux.html

  1. 下载安装。下载地址

    1
    2
    nvcc -V  # 查看自己安装的CUDA版本
    uname -a # 查询系统架构

    注意,cuDNN的下载需要先登录NVIDIA账户,没有则要注册,此步需要耐心。

    • *.deb版本(对应使用*.deb(local)安装的CUDA):

      1
      2
      3
      4
      5
      6
      7
      cd DownloadFolder
      wget https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.7/local_installers/11.x/cudnn-local-repo-ubuntu1804-8.9.7.29_1.0-1_amd64.deb/
      # sudo dpkg -i libcudnn8_8.0.2.39-1+cuda10.2_amd64.deb
      # sudo dpkg -i libcudnn8-dev_8.0.2.39-1+cuda10.2_amd64.deb
      # sudo dpkg -i libcudnn8-doc_8.0.2.39-1+cuda10.2_amd64.deb
      sudo dpkg -i cudnn-local-repo-ubuntu1804-8.9.7.29_1.0-1_amd64.deb # 安装本地仓库,使得通过APT包管理器安装cuDNN相关包成为可能
      sudo cp /var/cudnn-local-repo-ubuntu1804-8.9.7.29/cudnn-local-AE31B5F1-keyring.gpg /usr/share/keyrings/ # 根据安装*.deb时的输出提示来。通过导入GPG密钥,系统能够验证从本地仓库安装的软件包是经过NVIDIA官方签名的

      更新和安装软件包:

      1. 方法一:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        sudo apt update  # 刷新APT的包列表,准备安装新的软件包
        sudo apt install libcudnn8 # 安装cuDNN的运行时库,这是运行基于cuDNN开发的应用程序所必需的
        # 如果需要安装特定版本的cuDNN运行时库,可以指定版本号
        # sudo apt install libcudnn8=8.9.6.50+cuda11.8
        sudo apt install libcudnn8-dev # 为了开发基于cuDNN的应用,还需要安装开发者库
        # 输出:update-alternatives: 使用 /usr/include/x86_64-linux-gnu/cudnn_v8.h 来在自动模式中提供 /usr/include/cudnn.h (libcudnn)
        # 同样,指定版本号安装也是可能的
        # sudo apt install libcudnn8-dev=8.9.6.50+cuda11.8
        sudo apt install libcudnn8-samples # 安装cuDNN代码示例可以帮助开发者快速了解如何使用cuDNN API
        # 示例代码位于/usr/src/cudnn_samples_v8目录下,通过编译和运行这些示例,开发者可以验证cuDNN安装是否成功,同时学习如何在自己的应用中使用cuDNN
      2. 方法二:在启用本地仓库并导入CUDA GPG密钥后,在/var/cudnn-local-repo-ubuntu1804-8.9.6.50有上面三个的*.deb安装文件,直接通过sudo dpkg -i安装即可。

        1
        2
        3
        4
        cd /var/cudnn-local-repo-ubuntu1804-8.9.6.50
        sudo dpkg -i libcudnn8_8.9.7.29-1+cuda11.8_amd64.deb
        sudo dpkg -i libcudnn8-dev 8.9.7.29-1+cuda11.8_amd64.deb
        sudo dpkg -i libcudnn8-samples_8.9.7.29-1+cuda11.8_amd64.deb

        使用方法一中的命令运行安装时,可以发现使用的就是/var/cudnn-local-repo-ubuntu1804-8.9.6.50中的*.deb

    • 压缩包版本(对应使用*.run安装的CUDA):

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      # 下载
      cd DownloadFolder
      wget https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.7/local_installers/11.x/cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz/

      # 解压
      cd DownloadFolder
      # 解压*.tar.xz文件。图形化界面可以直接双击压缩包实现解压
      xz -d -k cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz # 使用 -k 参数来保留被解压缩的文件。
      tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar

      # 复制文件
      cd cudnn-linux-x86_64-8.9.7.29_cuda11-archive
      sudo cp include/* /usr/local/cuda/include/
      sudo cp lib/* /usr/local/cuda/lib64/
      sudo chmod a+r /usr/local/cuda/include/* /usr/local/cuda/lib64/*
  2. 测试。

    1. 查询版本信息:

      1
      2
      3
      4
      5
      6
      apt show libcudnn8  # 通过查询已安装的libcudnn8包来验证cuDNN的版本
      # 查看版本(路径可能不一致,有一个命令有输出就行)
      cat /usr/include/cudnn_version.h
      cat /usr/include/cudnn.h
      cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
      cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
    2. 测试示例代码:

      首先,导航到包含cuDNN示例代码的目录。如果已安装libcudnn8-samples,示例代码通常位于/usr/src/cudnn_samples_v8/目录下。编译示例代码前,需要复制该目录到其它目录下,以避免权限问题:

      使用压缩包进行安装的方法没有cudnn_samples_v8这个文件夹,需要自行上网下载,比如:https://github.com/johnpzh/cudnn_samples_v8

      1
      2
      3
      4
      5
      6
      7
      cp -r /usr/src/cudnn_samples_v8/ yourFloder/cudnn_samples_v8
      # -r 或 --recursive:用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。
      cd yourFloder/cudnn_samples_v8/mnistCUDNN
      make clean # (可选)清除之前编译生成的文件(如果有)
      make
      ./mnistCUDNN # Test passed! 如果cuDNN安装正确,此程序将成功运行,通常会输出识别准确率或其他成功执行的指标
      # 如果报错ERROR: cudnn failure (CUDNN_STATUS_EXECUTION_FAILED) in mnistCUDNN.cpp:637,可能是因为显卡版本太高,CUDA版本太低,不兼容(运行博客PyTorch章节的测试脚本会有相应的warning)。解决:重装高版本的CUDA。

      make报错test.c:1:10: fatal error: FreeImage.h: No such file or directory

      1
      sudo apt-get install libfreeimage3 libfreeimage-dev
  3. 完成。

卸载

  • 卸载通过*.deb文件安装的cuDNN:

    1
    2
    3
    4
    5
    6
    # 删除数据库
    sudo apt-get --purge remove cudnn-local-repo-ubuntu1804-8.9.7.29 # 当时安装时使用的deb包名的前一部分,也就是在/var文件夹里的cudnn*文件夹

    sudo apt-get remove libcudnn8-samples
    sudo apt-get remove libcudnn8-dev
    sudo apt-get remove libcudnn8
  • 通过压缩包安装的cudnn随着CUDA的卸载而卸载。

PyTorch

  1. 下载安装。

    1. 命令行安装。访问链接,根据要安装的PyTorch版本和CUDA版本找到conda安装命令。

    2. *.whl安装。

      1. 下载。下载网址

        每个文件命名都是有规律的:

        使用快捷键Ctrl+F,搜索我们需要安装的版本文件下载,例如:

        • cu101/torch-1.4.0-cp38-cp38-win_amd64.whl
        • cu101/torchyision-0.5.0-cp38-cp38-win_amd64.whl
      2. 安装。

        1
        2
        3
        4
        5
        conda create --copy -n pytorch python=3.8
        conda activate pytorch
        cd DownloadFolder
        pip install cu101/torch-1.4.0-cp38-cp38-win_amd64.whl
        pip install cu101/torchvision-0.5.0-cp38-cp38-win_amd64.whl
  2. 测试。编写并运行python脚本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import torch
    import torchvision
    print(torch.__version__)
    print(torch.version.cuda)
    print(torchvision.__version__)
    print(torchvision.version.cuda)
    print(torch.cuda.is_available())
    if torch.cuda.is_available():
    print("CUDA device:", torch.cuda.get_device_name(torch.cuda.current_device()))

    如果全部输出正常证明版本兼容。

  3. 完成。

参考链接

【Pytorch】pytorch安装(包含cuda详细安装教程)

Linux 下的 CUDA 安装和使用指南

【非常详细】Ubuntu18.04安装显卡驱动和CUDA,CUDNN流程和踩坑记录

Ubuntu 20.04安装CUDA & CUDNN 手把手带你撸

ubuntu安装cuda和cudnn

Ubuntu系统下由于Nvidia驱动问题导致的无法开机的问题小结

CUDA相关 | 如何安装deviceQuery

Ubuntu 18.04上安装cuDNN 8.9.6.50:一站式指南

一种解决pytorch和cuda版本不兼容问题的方法(cuda driver版本:12.0.134)

Ubuntu下CUDA的卸载以及安装(deb方式和run方式)

Linux下CUDA卸载不完全与重装失败


Anaconda、CUDA、cuDNN和PyTorch包的安装
http://zeyulong.com/posts/df5eb46/
作者
龙泽雨
发布于
2024年3月5日
许可协议