我之前最大的困惑就是CUDA和CUDA Toolkit之间的关系,如果也是一样的小伙伴,建议直接跳转到CUDA Toolkit

GPU&驱动

说明

GPU是一个硬件,只需要在合适的主板位置接口上进行安装即可,在电气层面上,只要GPU接入到主板上,主板就能意识到有一个新的硬件设备加入进来,但是对于计算机操作系统来说,此时,并不能识别到新加入的硬件设备,需要安装GPU驱动,才可以使得OS识别到GPU

所以,显卡驱动的作用就是让计算机操作系统识别到GPU,驱动作为软硬件之间的API

image

安装

说明:当拿到GPU服务器之后,肯定都已经预安装显卡驱动,只需要运行nvidia-smi 这一命令即可,当出现GPU详细信息,说明已经安装显卡驱动,就不用再安装了

下面的安装针对如何在个人电脑上进行安装GPU驱动,针对Ubuntu系统,其他系统请自行百度

  • 查看自己电脑的显卡型号所推荐安装的nvidia驱动
ubuntu-drivers devices

image

  • 有个recommended的就是推荐安装的驱动,如果就想安装推荐驱动,直接运行下面命令,无需进行任何其它设置,就可以安装成功,安装成功之后,需要重启,重启后,查看是否安装成功
sudo ubuntu-drivers autoinstall
sudo reboot
nvidia-smi

image

  • 卸载显卡(当需要更换显卡的时候),首先打开软件和更新,选择使用独显来显示,不然直接从硬件换显卡会黑屏

image

  • 选中后,应用更改,等待完成之后,进行重启,重启之后可以进入设置确认一下是否已经更换好,这里不再是nvidia的即可,可继续卸载显卡驱动了

image

sudo apt remove nvidia-*
  • 接着就可以关机、拆显卡、装显卡、接好屏幕,开机,应用上述的教程即可安装新显卡对应的驱动

CUDA

说明

通过CUDA来使用显卡,CUDA就是操作系统与GPU之间的API接口

  • 人们可以通过07年推出的CUDA(Compute Unified Device Architecture)用代码来控制GPU进行并行计算
  • CUDA 提供了一套 API,允许开发者通过编写并行代码来高效利用 GPU 的计算资源。
  • CUDA 为开发者提供了基于 C/C++ 的 API,使用户能够直接控制 GPU 中的多线程执行,从而极大地加速计算任务

安装

说明:当拿到GPU服务器之后,系统CUDA大概率也都是预安装,这时,你只需要运行nvcc --version 即可查看是否安装系统CUDA

下面的安装还是针对Ubuntu系统,其他系统请自行百度

  • 前提需要先安装好显卡驱动
  • 进入官方下载网站下载cuda并安装

https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=deb_local

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda-repo-ubuntu2004-12-6-local_12.6.0-560.28.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-12-6-local_12.6.0-560.28.03-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-6
  • 接下来配置环境变量,先去/usr/local/目录下找到cuda的安装路径,然后配置环境变量

image

sudo gedit ~/.bashrc

export PATH=/usr/local/cuda-12/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-12

# 更新系统环境
source ~/.bashrc
sudo ldconfig

# 验证是否成功
nvcc -V

image

CUDA Toolkit(最重要)

说明

Pytorch → CUDA → 显卡:通过CUDA这一平台,可以将指令发送到显卡上进行执行

image

image

  • CUDA Toolkit都是在安装Pytorch时自动安装(必须使用Pytorch官网的安装命令),可以看到,无论是使用conda安装还是pip安装,都会自动将CUDA Toolkit安装到Python环境中去,系统安装CUDA和Pytorch安装的CUDA Toolkit是独立的,两者并不需要相互依赖,仅安装Pytorch和CUDAToolkit即可正常使用GPU
  • 且当Pytorch运行时,会优先使用conda或者pip安装的CUDA Toolkit,而不是系统CUDA,因此,即使系统CUDA版本不同,Pytorch依然会使用其内部的CUDA Toolkit,两者的版本可以不同
  • nvcc --version 命令显示的是系统CUDA的版本,所以在大多数情况下并不是Pytorch使用的CUDA版本,这个时候需要通过代码来查看Pytorch代码使用的CUDA版本,可以看到,Pytorch使用的CUDA版本和系统的CUDA版本是不一致的
  • 对于深度学习炼丹来说,从不严谨的角度来看,可以将系统CUDA和CUDA Toolkit视作两套并行的CUDA ,一般我们不需要理会系统CUDA,因为它在服务器上也是默认安装的,只需要关心在安装Pytorch时,附加安装的CUDA Toolkit即可,没有系统CUDA,对于使用GPU也是没有影响的
  • 如果在安装Pytorch时,没有将CUDA Toolkit安装上,这时候,如果系统CUDA已安装,且与你的Pytorch版本兼容,那么Pytorch就会直接调用系统CUDA运行时库,如果两者不兼容,例如你的 PyTorch 版本需要 CUDA 11.3,但系统安装的是 CUDA 10.2,则运行 PyTorch 的 GPU 加速时会报错,提示找不到 CUDA 相关库,这时需要重新安装Pytorch,并将CUDA Toolkit安装上去
import torch
# 检查 PyTorch 中 CUDA 是否可用
if torch.cuda.is_available():
    print("CUDA 已安装且可用")
    print("PyTorch CUDA 版本:", torch.version.cuda)
    print("当前使用的 GPU 设备:", torch.cuda.get_device_name(0))
else:
    print("CUDA 未安装或不可用")

image

安装

  • 当激活对应的Python环境之后,去Pytorch官网复制下载命令,即可安装
  • CUDA Toolkit中默认包含cuDNN,不需要再单独安装
  • 但是系统CUDA是需要单独安装cuDNN

cuDNN

  1. 说明

全称是CUDA Deep Neural Network Library

  • 是一个专门为深度学习设计的高效GPU加速库,提供了常用的神经网络操作(如卷积、池化、激活等)的高性能实现,对常用的深度学习操作进行了高度优化,通过直接调用cuDNN函数,深度学习框架(Pytorch等)可以利用GPU实现比-框架自带的基础CUDA实现-更加高效
  • cuDNN是CUDA Toolkit的一部分,但独立于CUDA Toolkit发布,因此需要单独安装
  • cuDNN并非强制安装,只是安装之后,可以显著加速许多计算密集的深度学习操作,尤其是CNN中的卷积、池化、激活、归一化等操作,大部分的深度学习框架(Pytorch、Tensorflow)在检测到cuDNN时会自动使用它,以提升GPU的计算效率,无需显式调用cuDNN的接口
  • 通过下面的代码即可检查cuDNN是否安装成功以及是否可用
import torch
import torch.nn
print("cuDNN 是否可用:", torch.backends.cudnn.is_available())  # 检查 cuDNN 可用性

image

  1. 安装(仅限使用系统CUDA时安装)

说明:Python环境中安装Pytorch时会自动包含支持GPU加速的CUDAToolkit和cuDNN,不需要再单独安装

下面安装针对Linux系统,win系统请自行百度查询

https://developer.nvidia.cn/rdp/cudnn-archive

  • 第一步下载对应cuda版本的cudnn的tar.xz文件
  • 解压下载的cudnn.tar.xz文件
  • 使用下面两条指令复制cudnn文件夹下的文件到/usr/local/cuda-xx/lib64//usr/local/cuda-xx/include/
cp cuda/lib/* /usr/local/cuda-xx/lib64/
cp cuda/include/* /usr/local/cuda-xx/include/
  • 拷贝完成后,我们可以使用如下的命令查看cuDNN的信息:
cat /usr/local/cuda-xx/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

image

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐