一篇文章理清GPU、CUDA、CUDA Toolkit、cuDNN的关系
我之前最大的困惑就是CUDA和CUDA Toolkit之间的关系,如果也是一样的小伙伴,建议直接跳转到CUDA Toolkit。
我之前最大的困惑就是CUDA和CUDA Toolkit之间的关系,如果也是一样的小伙伴,建议直接跳转到CUDA Toolkit
GPU&驱动
说明
GPU是一个硬件,只需要在合适的主板位置接口上进行安装即可,在电气层面上,只要GPU接入到主板上,主板就能意识到有一个新的硬件设备加入进来,但是对于计算机操作系统来说,此时,并不能识别到新加入的硬件设备,需要安装GPU驱动,才可以使得OS识别到GPU
所以,显卡驱动的作用就是让计算机操作系统识别到GPU,驱动作为软硬件之间的API
安装
说明:当拿到GPU服务器之后,肯定都已经预安装显卡驱动,只需要运行nvidia-smi
这一命令即可,当出现GPU详细信息,说明已经安装显卡驱动,就不用再安装了
下面的安装针对如何在个人电脑上进行安装GPU驱动,针对Ubuntu系统,其他系统请自行百度
- 查看自己电脑的显卡型号所推荐安装的nvidia驱动
ubuntu-drivers devices
- 有个recommended的就是推荐安装的驱动,如果就想安装推荐驱动,直接运行下面命令,无需进行任何其它设置,就可以安装成功,安装成功之后,需要重启,重启后,查看是否安装成功
sudo ubuntu-drivers autoinstall
sudo reboot
nvidia-smi
- 卸载显卡(当需要更换显卡的时候),首先打开
软件和更新
,选择使用独显来显示,不然直接从硬件换显卡会黑屏
- 选中后,应用更改,等待完成之后,进行重启,重启之后可以进入设置确认一下是否已经更换好,这里不再是nvidia的即可,可继续卸载显卡驱动了
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并安装
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的安装路径,然后配置环境变量
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
CUDA Toolkit(最重要)
说明
Pytorch → CUDA → 显卡:通过CUDA这一平台,可以将指令发送到显卡上进行执行
- 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 未安装或不可用")
安装
- 当激活对应的Python环境之后,去Pytorch官网复制下载命令,即可安装
- CUDA Toolkit中默认包含cuDNN,不需要再单独安装
- 但是系统CUDA是需要单独安装cuDNN
cuDNN
全称是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 可用性
说明: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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)