CUDA 教程(一) GPU 编程概述和 CUDA 环境搭建
前言 本文将带大家了解 CUDA 编程,学习使用C和Python调用CUDA编程接口,对模型进行推理加速,性能优化。我们将从底层原理开始,带大家了解CUDA的工作机制,一步步掌握CUDA编程。相信大家会受益菲浅。
欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。
本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。
零教程的基本概述
在深度学习蓬勃发展的今天,模型变得越来越深,参数愈加庞大,虽然准确率不断增长,由于硬件受限,对实际场景部署的要求也越来越高,CUDA 编程成为了一门必备的武林绝学。如果你对模型的推理速度有较高要求,如果你有庞大的数据流等待推理,一起跟着教程了解这门技术。
该教程目前暂定有以下章节,如有添加将会另行说明:
![](https://pic1.zhimg.com/80/v2-a19b4a41d787d444a7116fa6824be424_1440w.webp)
通过这些教程,可以说初入了 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 的显卡
lspci | grep -i "nvidia"
请不要在vm虚拟机中安装 CUDA
以笔主的电脑为例,有一张 RTX 3060 的移动显卡
![](https://pic1.zhimg.com/80/v2-daac0c5bd30ea7faa04acb6de6256240_1440w.webp)
之后去 NVIDIA 官网 下载对应发行版的 CUDA Toolkit,这里根据自己的深度学习框架选择版本,在安装 Toolkit 时会自带 CUDA Driver
![](https://pic2.zhimg.com/80/v2-f1d368aa30f52e6d881035eb2e886615_1440w.webp)
下载文件推荐选择 runfile 格式
![](https://pic1.zhimg.com/80/v2-a78c82170a8d8210dfd2353d2bb604f8_1440w.webp)
文件比较大,等待时确保机器上有相应的依赖库,可以运行下面命令安装依赖库
![](https://pic3.zhimg.com/80/v2-46c6214bc24589f138a2186beb64b59e_1440w.webp)
如果系统为图形界面,需要检查系统是否自带开源 NVIDIA Nouveau 驱动
lsmod | grep -i "nouveau"
如果有输出,需要禁用 Nouveau 驱动
sudo vim /etc/modprobe.d/blacklist.conf
在文件中追加如下内容
![](https://pic4.zhimg.com/80/v2-eb1b818f1e496edadadc77b7b96131e3_1440w.webp)
同时卸载 nvidia 相关包
sudo apt purge nvidia-*
重启系统
sudo reboot
重启后使用Ctrl + Alt + F2
进入 tt2,再次检查开源驱动是否启动
lsmod | grep -i "nouveau"
然后关闭显示服务,并修改安装文件权限
sudo service lightdm stop chmod 777 cuda_10.2.89_440.33.01_linux.run
之后运行 CUDA 安装脚本,在安装时
sudo sh cuda_*_linux.run
安装完成后脚本会自动在/usr/local
创建 cuda -> /usr/local/cuda-11.8/
软链接,在 ~/.bashrc
写入
![](https://pic4.zhimg.com/80/v2-e20c382f4e1578e63fe7cec88b323253_1440w.webp)
在终端中输入 nvcc -V
,如有类似下面的输出,则安装成功
![](https://pic2.zhimg.com/80/v2-f80ca02d96abcdf46b70af1879d074f9_1440w.webp)
安装完成后重启图形界面
sudo service lightdm restart
接下来安装 cuDNN
https://developer.nvidia.com/rdp/cudnn-download
![](https://pic1.zhimg.com/80/v2-3189ea064617dceac4a754f09a486ba8_1440w.webp)
下载完成后解压
zip -xf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz
将解压后的文件拷贝到 CUDA 对应的安装目录下,并添加权限
![](https://pic4.zhimg.com/80/v2-02704533ad1a8d79ffb8b5ba8e34bb1b_1440w.webp)
即安装完成
Windows 安装
打开设备管理器,查看当前显卡型号
![](https://pic1.zhimg.com/80/v2-44996e4a286750edeed5862cde1ee0a4_1440w.webp)
以笔主的电脑为例,有一张 RTX 3060 的移动显卡
再在桌面右击或打开系统小托盘,打开 NVIDIA 控制面板
![](https://pic4.zhimg.com/80/v2-ee1195ca7b04622f2946959df9e8d767_1440w.webp)
这里推荐 Studio 驱动程序,不建议 Game Ready 驱动程序,可以在 NVIDIA 驱动程序下载 找到对应显卡的驱动程序。安装完成后如图所示
![](https://pic2.zhimg.com/80/v2-fcbac072a7bb236a3fb8790add696a29_1440w.webp)
之后根据系统驱动程序版本下载 CUDA 安装程序,点击查看系统驱动程序版本和 CUDA 版本对应关系,推荐 exe(local)
![](https://pic4.zhimg.com/80/v2-f22ae71fe115bec6b9f87497d052a6ff_1440w.webp)
下载完成后双击打开,这里使用默认位置
![](https://pic4.zhimg.com/80/v2-bad78815882a78d5eb108327cda9d32f_1440w.webp)
使用自定义安装
![](https://pic4.zhimg.com/80/v2-55b1f0b4aaf585787f5acd29e2fd4113_1440w.webp)
这里要记住安装位置,推荐默认
![](https://pic2.zhimg.com/80/v2-1c0a06e5d78812fa079e6279f1cb4345_1440w.webp)
安装后会自动添加环境变量,打开 Powershell / CMD,输入nvcc -V
如有类似下面的输出,则安装成功
![](https://pic3.zhimg.com/80/v2-188746cb09e8b81fec572fb80b00f57a_1440w.webp)
接下来安装 cuDNN
https://developer.nvidia.com/rdp/cudnn-download
下载完成解压后如何下图
![](https://pic2.zhimg.com/80/v2-09030d8a9a479fd2e33fa6799bd694d9_1440w.webp)
把这三个文件夹拷贝到 CUDA 的安装目录下,同名文件夹会自动合并。
将如下路径添加到系统环境变量中
![](https://pic1.zhimg.com/80/v2-668c8ce85ec121edf205823a4f3e8cb8_1440w.webp)
即安装完成
三 PyCUDA
PyCUDA 是 NVIDIA 针对 python 编写的 CUDA API,底层使用 C++, 使用 PyCUDA 可以更方便地编写代码。同样 CUDA 错误都会自动转换为 Python 异常。
Linux 安装
确保电脑中安装了 python 环境和 pip,安装命令
pip install pycuda
Windows 安装
根据自己的 CUDA 版本 和 Python 版本下载 whl 文件 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pycuda
![](https://pic2.zhimg.com/80/v2-97ca690b4f721d98f0091f5c0e4ea8b1_1440w.webp)
安装命令
pip install pycuda*.whl
四 Nvidia Nsight Systems
简称 nsys
,是一款低开销性能分析工具,旨在为开发人员提供优化软件所需的洞察力。无偏差的活动数据可在工具中可视化,可帮助用户调查瓶颈,避免推断误报,并以更高的性能提升概率实现优化。用户将能够识别问题,例如 GPU 闲置、不必要的 GPU 同步、CPU 并行化不足。
根据系统平台选择合适的安装包
https://developer.nvidia.cn/gameworksdownload#?dn=nsight-systems-2022-4
![](https://pic3.zhimg.com/80/v2-6749d0a6138b6ef533697e7234db2116_1440w.webp)
安装完成后输入命令
nsys --version
如有返回,即安装完成
本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。
欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。
【技术文档】《从零搭建pytorch模型教程》122页PDF下载
QQ交流群:444129970。群内有大佬负责解答大家的日常学习、科研、代码问题。
其它文章
用于超大图像的训练策略:Patch Gradient Descent
CV小知识讨论与分析(5)到底什么是Latent Space?
CVPR 2023 Workshop | 首个大规模视频全景分割比赛
如何更好地应对下游小样本图像数据?不平衡数据集的建模的技巧和策
用少于256KB内存实现边缘训练,开销不到PyTorch千分之一
DAMO-YOLO | 超越所有YOLO,兼顾模型速度与精度
入门必读系列(十六)经典CNN设计演变的关键总结:从VGGNet到EfficientNet