目录
一、安装显卡驱动
二、安装 CUDA
三、配置 CUDA 的环境变量
四、安装 cuDNN
五、检查 CUDA、cuDNN 是否安装成功
六、卸载 CUDA
首先确认电脑上安装了 NVIDIA 显卡
lspci | grep -i nvidia
一、安装显卡驱动
确认有显卡以后输入下面命令,以检查之前是否安装了驱动。
nvidia-smi
如果返回类似于下面的界面,说明已经安装了显卡驱动:
如果返回类似于下面的界面,则表示显卡驱动还没有安装。
如果发现没有安装过驱动,则可再输入下面命令,以查看显卡型号以及推荐的驱动版本。
ubuntu-drivers devices
如下图,这里推荐我们安装的是 nvidia-driver-530 - distro。
如果我们愿意安装这个版本的驱动,则输入即可安装该驱动:
sudo ubuntu-drivers autoinstall
安装过程中按照提示操作,除非你知道每个提示的真实含义,否则所有的提示都选择默认就可以了,安装完成后重启系统,NVIDIA 显卡就可以正常工作了。
此时,再次输入
nvidia-smi
就可以看到 GPU 的信息了。下面的界面说明已经安装显卡驱动了。
注意,上图中的 CUDA Version 后面写了一个版本号。该版本号并不是你已经安装了该版本的 CUDA 的意思,而是说此显卡最大支持的CUDA版本号。因此我们仍然需要手动从官网下载CUDA,且版本号不能高于这个。
二、安装 CUDA
这一步有大坑!!!即:下载 CUDA 的时候,到底应该选择什么版本的?
安装教程的 NVIDA 官方文档见:NVIDIA CUDA Installation Guide for Linux
下面安装 CUDA。
首先确认你需要安装的 CUDA 版本。
以我要使用的 pytorch 为例。我打开 pytorch 官网:PyTorch 查看其支持哪些版本的 CUDA。
如上图所示,目前最高只支持 11.8 版本的 CUDA,那我就最高安装 11.8 版本的 CUDA,不能安装 12.1 版本的。
为什么我要强调不能安装 12.1 版本呢?
因为当你打开 NVIDIA 官方网站下载 CUDA 的时候,默认就是最新版本,在本文成文时是 12.1 版本。如下图,在最最直接的、没有强调任何版本的情况的网址下面,就是 12.1 版本。
也就是说,在本文成文的时间节点,默认情况下,你就是会下载错版本的。(没错,我第一次就下载错了)
如果想要下载 11.8 版本的 CUDA,需要专门点击右上角的放大镜进行搜索才能找到,而且网址也是特别长的一大串。
CUDA(Compute Unified Device Architecture)是由NVIDIA提供的一种用于GPU并行计算的平台和编程模型。它通过为开发人员提供一套工具、API和库,使得使用GPU进行高性能计算变得更加容易。CUDA支持C/C++、Python、Fortran等多种编程语言,并且可以在Linux、Windows和macOS等操作系统上运行。
访问CUDA Toolkit 11.8 Downloads(一定要注意确认CUDA版本),在页面上选择适合系统的CUDA版本,并下载对应的运行文件(.deb文件)。
另外,NVIDA 在下载页面非常贴心的提供了下载+安装需要的所有代码。
以我的计算机环境为例,我需要依次运行下面命令:
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.1.1/local_installers/cuda-repo-ubuntu2204-12-1-local_12.1.1-530.30.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-1-local_12.1.1-530.30.02-1_amd64.deb
# 安装公共 cuda-repo-ubuntu2204-12-1-local GPG key
sudo cp /var/cuda-repo-ubuntu2204-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
三、配置 CUDA 的环境变量
安装成功后需要配置一下环境变量。这步很关键,如果不配置环境变量,则运行机器学习运算的时候会找不到GPU。
首先跳转到 /usr/local 目录下面,记录自己 CUDA 的文件夹名称
然后打开 .bashrc 文件,准备添加环境变量。
sudo vim ~/.bashrc
注:
~/.bashrc
是一个在bash shell中运行时自动加载的Shell脚本文件。它通常位于用户主目录下,并且是一个隐藏文件(因为文件名以'.'开头)。在Unix/Linux系统中,用户的主目录通常是/home/username
或者/Users/username
。/.bashrc
文件包含了一些环境变量、别名和其他自定义设置,这些设置将在每次启动bash shell时自动加载。它的作用包括但不限于:- 定义环境变量:例如PATH、LD_LIBRARY_PATH等,它们指定了系统在何处查找可执行文件和共享库。
- 创建自定义别名:例如将
ls -l
别名为ll
,可以避免每次都输入完整命令。 - 设定默认的文本编辑器、历史记录长度、提示符等bash shell参数。
- 运行其他的Shell脚本,从而自动化一些操作。
~/.bashrc
文件的内容和格式:~/.bashrc
文件可以使用任何文本编辑器进行编辑,其内容可以根据您的需要进行修改。以下是一些可能会出现在.bashrc
文件中的代码段:
bash
# 设置PATH环境变量
export PATH=$PATH:/usr/local/bin
# 创建别名
alias ll='ls -l'
# 自定义提示符
PS1='\u@\h:\w\$ '
# 运行其他Shell脚本
if [ -f ~/custom_scripts.sh ]; then
. ~/custom_scripts.sh
fi
.bashrc
文件中的语法采用bash shell的语法,因此您可以使用任何bash shell支持的命令和语法。需要注意的是,如果您不小心编写了有误的代码,可能会导致bash shell出现错误或无法启动。
进入 vim 编辑器后,默认处于命令模式。
此时按 j 向下跳行,跳到最后一行。
然后按 o (小写哦)进入插入(编辑)模式,并且向下新开一行,在行首插入
复制下面两行代码,在该行(即最后一行)粘贴或者输入下面代码。
export PATH=/usr/local/cuda-12.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
这里解释一下代码的含义:
export PATH=/usr/local/cuda-12.1/bin${PATH:+:${PATH}}
这是一个设置环境变量的命令,将CUDA 12.1的二进制文件目录添加到系统的PATH环境变量中。
其中:
- export: 这个命令用于设置环境变量,将一个值分配给一个环境变量。
- PATH: 这是一个系统环境变量,包含了一系列用冒号分隔的目录路径。当在终端中输入一个命令时,系统会按照PATH中的顺序在这些目录中查找可执行文件。
- /usr/local/cuda-12.1/bin: 这是CUDA 12.1的二进制文件目录所在的路径。
- ${PATH:+:${PATH}}: 这个语法用于将当前的PATH变量内容添加到新的PATH变量值中。如果PATH已经存在,那么就在它的末尾添加一个冒号和原始PATH变量值。如果PATH不存在,那么就只设置为CUDA 12.1的二进制文件目录。
通过运行上述命令,可以将CUDA 12.1的二进制文件目录添加到PATH环境变量中,使得系统能够找到相关的可执行文件。
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
这个命令是用来设置环境变量LD_LIBRARY_PATH,以便让系统能够正确地找到CUDA库文件的路径。
其中:
- export: 这个指令告诉bash shell将变量导出到子进程中,并在整个会话期间都有效。
- LD_LIBRARY_PATH: 这是一个环境变量,用于指定共享库文件的搜索路径。当程序需要使用共享库时,系统会根据该变量的值在指定的路径下查找所需的共享库文件。
- /usr/local/cuda/lib64: 这是CUDA库文件的默认安装路径。
- ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}: 这段语法表示如果LD_LIBRARY_PATH变量已经定义,则在原有的路径后面添加CUDA库文件的路径;否则,就创建一个新的LD_LIBRARY_PATH变量并将其设置为CUDA库文件的路径。
通过运行该命令,将CUDA库文件路径添加到LD_LIBRARY_PATH环境变量中,可以确保CUDA库文件被正确加载,并且可以被程序访问和使用。 需要注意的是,此命令中${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}的语法可能不是所有shell都支持,通常只能在bash和zsh等主流的Unix shell中使用。
然后按下 Esc 键,从编辑模式返回命令模式。
然后输入英文冒号进入末行模式。
然后输入 wq 并回车,表示保存并退出。
最后,
source ~/.bashrc
四、安装 cuDNN
cuDNN(CUDA Deep Neural Network Library)是一个针对深度学习应用优化的加速库,它使用CUDA技术加速深度神经网络的训练和推断。这个库提供了一些高效的原语,例如卷积、池化、归一化等,可以帮助开发人员快速实现深度神经网络,并且提升训练和推断的速度。
- CUDA和cuDNN是两个相互依赖的软件包,它们之间有以下关系:
- CUDA是必需的:cuDNN需要依赖于CUDA才能够工作。因为cuDNN是使用CUDA技术实现的,所以只有支持CUDA的硬件和系统才能够运行它。在安装cuDNN之前,必须先安装CUDA,并且在环境变量中设置CUDA的路径。
- cuDNN是可选的:尽管cuDNN可以提升深度学习应用的性能和效率,但它并不是必需的。如果不使用cuDNN,仍然可以使用CUDA进行深度学习计算。cuDNN只是一个可选的加速库,可以根据需要选择是否使用它。
- cuDNN提供了深度学习相关的API和方法:为了使开发人员更容易地使用cuDNN,这个库提供了一些专门针对深度学习的API和方法,例如卷积、池化、归一化等。这些方法已经被高度优化,可以在支持CUDA的硬件上快速执行。
总的来说,CUDA提供了基础的GPU并行计算能力,而cuDNN则是在这个基础上为深度学习应用提供的高级的计算加速库。两者结合起来可以大幅提升深度学习应用的性能和效率。
首先在https://developer.nvidia.com/cudnn下载相应版本的cudnn。这一步需要注册或者拥有英伟达账号。
然后,参考 cuDNN 的安装官方文档进行安装:NVIDIA cuDNN Documentation
虽然我是 Ubuntu,但是也按照 「1.3.1. Tar File Installation」部分的讲解进行操作,而不按照「1.3.2. Debian Local Installation」的部分进行操作。
五、检查 CUDA、cuDNN 是否安装成功
我们在终端里面依次输入下面代码:
import torch
然后
print(torch.version.cuda)
如上图,可以正确返回 cuda 版本号,说明 cuda 安装成功。
print(torch.backends.cudnn.version())
如上图所示,可以正确返回 cuDNN 的 版本号,说明 cuDNN 安装成功。
最后输入:
torch.cuda.is_available()
返回是 True,说明 CUDA 和 GPU 驱动的搭配是正确的。
到此,说明 GPU 驱动、CUDA、cuDNN 已经完全安装完成。
六、卸载 CUDA
看这个官方文档: