https://www.youtube.com/watch?v=qRLyoP8zOyQ
摘要
一篇介绍如何编写自定义CUDA内核以突破深度学习框架瓶颈的技术文章/书籍摘要,涵盖从基础到优化的完整路径。
暂无内容
查看缓存全文
缓存时间: 2026/05/21 13:59
TL;DR: 本书教你编写自定义CUDA内核,以在深度学习工作负载中突破框架瓶颈,通过控制内存、并行度和硬件特性实现极致性能。
## CUDA在深度学习中的角色
大语言模型消耗着惊人的计算预算。将训练时间从数周缩短至数天,或将推理延迟从数秒压缩到毫秒,往往取决于GPU效率。CUDA是连接PyTorch简洁抽象与执行具体运算的硅片之间的桥梁。
PyTorch让GPU加速变得出奇简单:将模型移到cuda,运行代码,网络便如虎添翼。对于许多任务,这已经足够。但若某个自定义操作成为管道的瓶颈,或者嵌入式系统需要严格的实时推理,框架可能无法提供足够的控制。
CUDA是NVIDIA的编程模型,用于在GPU上运行代码。PyTorch底层就使用了CUDA;本书教你亲自编写底层GPU代码,然后可选地将其集成回熟悉的框架中。
## 何时需要自定义CUDA
大多数情况下,自定义CUDA并不必要。cuBLAS、cuDNN和框架后端已经很好地覆盖了常见场景。当工作负载超出这些路径时,自定义CUDA才变得有价值:
- 新的注意力模式
- 百万token上下文
- 机器人学延迟限制
- 融合操作
- 自定义量化
- 新颖的架构
其共通点在于对操作、硬件、内存、延迟和吞吐量的控制。
## CUDA基础:主机、设备与内存层级
CUDA从两个协作的世界开始。**主机**是CPU和系统内存,主程序在此控制应用程序。**设备**是GPU及其显存,数千个更简单的工作单元在此执行并行算术。
CPU擅长复杂逻辑;GPU擅长跨大量数据元素的吞吐。由于主机和设备内存是分离的,CUDA程序需要显式地移动数据:分配GPU内存,将输入复制到设备,启动内核,并将结果复制回来。
**内核**是一个GPU函数,在众多线程上启动。你编写一个线程处理一份数据的逻辑;CUDA启动数千个副本,每个都有各自的索引。关键模式是“相同操作,不同数据。”
并行工作仍需尊重内存层级:
- **全局内存**容量大但相对较慢
- **L2缓存**缓冲设备范围的流量
- **共享内存**和**L1**在每个流式多处理器内更小更快
- **寄存器**极小且直接存取
快速的CUDA尽可能将数据保留在快速层级中。矩阵乘法展示了这一点的重要性:一个朴素的内核可能反复从全局内存读取相同输入。优化版本在共享内存中缓存重复使用的值,从而大幅减少流量。有时最快的算法拥有最GPU友好的内存模式,而非最少的算术操作。
## 并行计算与深度学习
GPU并非自动获胜。小规模问题、低算术强度和不规则的控制流可能输给CPU执行,因为传输成本、启动开销或线程束分歧压过了收益。知道何时并行化无助于事也是工作的一部分。
深度学习非常适合CUDA,因为它建立在大量数组上的重复操作之上:矩阵乘法、非线性函数、卷积、梯度、和注意力点积。有些互相独立;另一些需要规约。无论如何,深度学习会产生许多可以同时计算的输出元素。
CUDA始于2007年,而2012年的AlexNet证明了神经网络可以围绕GPU并行性来设计。
## 从朴素到优化:性能层次
最初的CUDA内核通常会比PyTorch慢。这在意料之中。框架会调用优化过的库,而一个朴素内核可能从慢速内存读取数据并错过明显的优化机会。朴素的CUDA是起点,而非终点。
后续的层次逐渐构建:
1. **内存与计算优化**:减少全局内存访问,利用共享内存
2. **张量核心**:利用硬件专用单元加速矩阵运算
3. **内核融合**:合并多个操作以减少启动开销和内存带宽
4. **量化**:降低精度以提升吞吐量
5. **分布式计算**:多GPU扩展
每一层都针对一个瓶颈,改进叠加带来更高的吞吐量、更好的内存效率、更低的训练成本和更低的延迟。
单GPU技能是基础。多GPU工作增加了通信层级,其中机器内部的链接比机器之间的链接更快。随着设备增加,低效率会成倍放大,因此单GPU的经验可直接应用于分布式系统。
## CUDA生态系统与前置要求
CUDA是一个生态系统:CUDA C++、cuBLAS、cuDNN、CUTLASS、Thrust、工具套件、驱动,等等。本书聚焦于CUDA C++,因为底层模型能教你性能推理,即使更高级的库执行具体工作。
开始前,你需要:
- 一块NVIDIA GPU
- nvcc
- 用nvidia-smi检查的驱动
- Python
- 基础C语言
- 熟悉PyTorch
- 以及足够进行矩阵乘法的线性代数知识。
## 路线图
全书路线图从第一个内核开始,逐步深入:
- 第一个CUDA内核
- 神经网络构建模块(激活函数、卷积、矩阵乘法)
- 完整的训练流程
- Transformer推理
- 性能剖析与优化
- 张量核心和Flash Attention
- 量化技术
- 多GPU系统
最根本的要求是好奇心和毅力。一旦自定义内核带来第一次真正的加速,CUDA就不再是隐藏的机制,而成为你可塑的工具。
---
Source: https://www.youtube.com/watch?v=qRLyoP8zOyQ
相似文章
@Jolyne_AI: GitHub 开源 CUDA 系统教程:LeetCUDA(从入门到进阶,一站打通) 200+ 个循序渐进的 CUDA Kernel 实战题,配套 HGEMM 库性能可达 cuBLAS 的 98%~100%。另有 100+ 篇高性能计算技术…
LeetCUDA是一个GitHub上开源的CUDA系统教程,包含200多个循序渐进的CUDA Kernel实战题和100多篇高性能计算博客,配套HGEMM库性能可达cuBLAS的98%~100%,适合CUDA初学者和AI工程师系统掌握CUDA优化。
@snowboat84: https://x.com/snowboat84/status/2061962883651731602
本文是AI工程全景系列的上篇,从历史角度梳理了GPU从游戏显卡到AI加速器的演化、CUDA的豪赌、谷歌TPU的独立路径,以及英伟达为何最终胜出,详细剖析了芯片、供应链、网络、电力等AI基础设施的底层逻辑。
@liao_lucas: https://x.com/liao_lucas/status/2097149853499588971
本文介绍了在AI推理和性能工程背景下的GPU内核,解释了它们的定义、使用方法以及自定义内核在优化中的优势。
@shao__meng: https://x.com/shao__meng/status/2101835798316495007
Baseten出版的《Inference Engineering》是一本系统化的书籍,讲解从CUDA到生产部署的AI推理优化技术,帮助工程师在生产环境中高效运行开源模型。
@v0xium: 如果你正在寻找一篇详细介绍CUDA基础的文章,请花一个小时阅读此文。链接到…
一篇更新的CUDA编程初学者友好教程,涵盖如何编写简单的内核在GPU上对数组进行加法运算。