摘要
模型变得越来越深,参数愈加庞大,虽然准确率不断增长,由于硬件受限,对实际场景部署的要求也越来越高,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 | 01:00.0 VGA compatible controller: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] (rev a1) |
之后去 NVIDIA 官网 下载对应发行版的 CUDA Toolkit,这里根据自己的深度学习框架选择版本,在安装 Toolkit 时会自带 CUDA Driver
下载文件推荐选择 runfile 格式
文件比较大,等待时确保机器上有相应的依赖库,可以运行下面命令安装依赖库
1 | sudo apt update |
如果系统为图形界面,需要检查系统是否自带开源 NVIDIA Nouveau 驱动
1 | lsmod | grep -i "nouveau" |
如果有输出,需要禁用 Nouveau 驱动
1 | sudo vim /etc/modprobe.d/blacklist.conf |
在文件中追加如下内容
1 | blacklist nouveau |
同时卸载 nvidia 相关包
1 | sudo apt purge nvidia-* |
重启系统
1 | sudo reboot |
重启后使用Ctrl + Alt + F2
进入 tt2,再次检查开源驱动是否启动
1 | lsmod | grep -i "nouveau" |
然后关闭显示服务,并修改安装文件权限
1 | sudo service lightdm stop |
之后运行 CUDA 安装脚本,在安装时
1 | sudo sh cuda_*_linux.run |
安装完成后脚本会自动在/usr/local
创建 cuda -> /usr/local/cuda-11.8/
软链接,在 ~/.bashrc
写入
1 | export PATH=/usr/local/cuda/bin:$PATH |
在终端中输入 nvcc -V
,如有类似下面的输出,则安装成功
1 | nvcc: NVIDIA (R) Cuda compiler driver |
安装完成后重启图形界面
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 | sudo cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/include/cudnn.h /usr/local/cuda/include |
即安装完成
Windows 安装
打开设备管理器,查看当前显卡型号
以笔主的电脑为例,有一张 RTX 3060 的移动显卡
再在桌面右击或打开系统小托盘,打开 NVIDIA 控制面板
这里推荐 Studio 驱动程序,不建议 Game Ready 驱动程序,可以在 NVIDIA 驱动程序下载 找到对应显卡的驱动程序。安装完成后如图所示
之后根据系统驱动程序版本下载 CUDA 安装程序,点击查看系统驱动程序版本和 CUDA 版本对应关系,推荐 exe(local)
下载完成后双击打开,这里使用默认位置
使用自定义安装
这里要记住安装位置,推荐默认
安装后会自动添加环境变量,打开 Powershell / CMD,输入nvcc -V
如有类似下面的输出,则安装成功
1 | nvcc: NVIDIA (R) Cuda compiler driver |
接下来安装 cuDNN
https://developer.nvidia.com/rdp/cudnn-download
下载完成解压后如何下图
把这三个文件夹拷贝到 CUDA 的安装目录下,同名文件夹会自动合并。
将如下路径添加到系统环境变量中
1 | C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin |
即安装完成
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 |
如有返回,即安装完成