CUDA编程: GPU编程概述和CUDA环境搭建

摘要

模型变得越来越深,参数愈加庞大,虽然准确率不断增长,由于硬件受限,对实际场景部署的要求也越来越高,CUDA 编程成为了一门必备的武林绝学。

CUDA简介

首先介绍一下 GPU,在计算机中,GPU 相比 CPU,拥有非常多的内核,这意味着 GPU 可以以非常高的吞吐量执行程序,如同一条非常宽阔的道路可以同时让很多车辆同时通行,例如最新的 RTX 3090 的核心数达到了恐怖的 10496 个,而当前的顶级 CPU 通常只有不超过 32 核心。因此我们需要正确地设计并行化加速算法,就可以发挥 GPU 的强大优势。

CUDA 是由英伟达 NVIDIA 于 2007 年所推出针对 NVIDIA GPU 专有系统,通过 CUDA,用户可方便地使用封闭好的 SDK 对 GPU 进行复杂的数值计算,在深度学习领域,CUDA 提供了一套强大的加速并行计算和人工智能相关的代码库,同时,NVIDIA 官方提供了非常完善的安装程序。

CUDA 安装

Linux 安装

首先检查本机是否有 nvidia 的显卡

1
lspci | grep -i "nvidia"

请不要在vm虚拟机中安装 CUDA

以笔主的电脑为例,有一张 RTX 3060 的移动显卡

1
2
01:00.0 VGA compatible controller: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 228e (rev a1)

之后去 NVIDIA 官网 下载对应发行版的 CUDA Toolkit,这里根据自己的深度学习框架选择版本,在安装 Toolkit 时会自带 CUDA Driver

下载文件推荐选择 runfile 格式

文件比较大,等待时确保机器上有相应的依赖库,可以运行下面命令安装依赖库

1
2
3
sudo apt update
sudo apt install gcc g++ make
sudo apt install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev freeglut3-dev

如果系统为图形界面,需要检查系统是否自带开源 NVIDIA Nouveau 驱动

1
lsmod | grep -i "nouveau"

如果有输出,需要禁用 Nouveau 驱动

1
sudo vim /etc/modprobe.d/blacklist.conf

在文件中追加如下内容

1
2
3
4
5
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

同时卸载 nvidia 相关包

1
sudo apt purge nvidia-*

重启系统

1
sudo reboot

重启后使用Ctrl + Alt + F2进入 tt2,再次检查开源驱动是否启动

1
lsmod | grep -i "nouveau"

然后关闭显示服务,并修改安装文件权限

1
2
sudo service lightdm stop
chmod 777 cuda_10.2.89_440.33.01_linux.run

之后运行 CUDA 安装脚本,在安装时

1
sudo sh cuda_*_linux.run

安装完成后脚本会自动在/usr/local创建 cuda -> /usr/local/cuda-11.8/ 软链接,在 ~/.bashrc写入

1
2
3
4
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH

在终端中输入 nvcc -V ,如有类似下面的输出,则安装成功

1
2
3
4
5
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

安装完成后重启图形界面

1
sudo service lightdm restart

接下来安装 cuDNN

https://developer.nvidia.com/rdp/cudnn-download

下载完成后解压

1
tar -xf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz

将解压后的文件拷贝到 CUDA 对应的安装目录下,并添加权限

1
2
3
4
sudo cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/include/cudnn.h /usr/local/cuda/include
sudo cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/lib/libcudnn* /usr/local/cuda/lib64*
sudo chmod a+r /usr/local/cuda-11.7/include/cudnn.h
sudo chmod a+r /usr/local/cuda-11.7/lib64/libcudnn*

即安装完成

Windows 安装

打开设备管理器,查看当前显卡型号

以笔主的电脑为例,有一张 RTX 3060 的移动显卡

再在桌面右击或打开系统小托盘,打开 NVIDIA 控制面板

这里推荐 Studio 驱动程序,不建议 Game Ready 驱动程序,可以在 NVIDIA 驱动程序下载 找到对应显卡的驱动程序。安装完成后如图所示

之后根据系统驱动程序版本下载 CUDA 安装程序点击查看系统驱动程序版本和 CUDA 版本对应关系,推荐 exe(local)

下载完成后双击打开,这里使用默认位置

使用自定义安装

这里要记住安装位置,推荐默认

安装后会自动添加环境变量,打开 Powershell / CMD,输入nvcc -V

如有类似下面的输出,则安装成功

1
2
3
4
5
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:41:10_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

接下来安装 cuDNN

https://developer.nvidia.com/rdp/cudnn-download

下载完成解压后如何下图

把这三个文件夹拷贝到 CUDA 的安装目录下,同名文件夹会自动合并。

将如下路径添加到系统环境变量中

1
2
3
4
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\libnvvp

即安装完成

PyCUDA

PyCUDA 是 NVIDIA 针对 python 编写的 CUDA API,底层使用 C++, 使用 PyCUDA 可以更方便地编写代码。同样 CUDA 错误都会自动转换为 Python 异常。

Linux 安装

确保电脑中安装了 python 环境和 pip,安装命令

1
pip install pycuda

Windows 安装

根据自己的 CUDA 版本 和 Python 版本下载 whl 文件 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pycuda

安装命令

1
pip install pycuda*.whl

Nvidia Nsight Systems

简称 nsys,是一款低开销性能分析工具,旨在为开发人员提供优化软件所需的洞察力。无偏差的活动数据可在工具中可视化,可帮助用户调查瓶颈,避免推断误报,并以更高的性能提升概率实现优化。用户将能够识别问题,例如 GPU 闲置、不必要的 GPU 同步、CPU 并行化不足。

根据系统平台选择合适的安装包

https://developer.nvidia.cn/gameworksdownload#?dn=nsight-systems-2022-4

安装完成后输入命令

1
nsys --version

如有返回,即安装完成

- ETX   Thank you for reading -
  • Copyright: All posts on this blog except otherwise stated, All adopt CC BY-NC-ND 4.0 license agreement. Please indicate the source of reprint!