第 01 章:什么是 GPU 内核,为什么选 Triton
1. 什么是 GPU?什么是 GPU 内核?
- GPU:一种处理器,擅长把同一个计算在大量数据上并行地重复执行。AI、游戏、科学计算之所以能大幅加速,靠的就是它。
- GPU 内核(kernel):一段针对 GPU 结构量身定制的函数——它知道数据怎么切分、怎么搬进片上快内存、怎么并行算——目的是把 GPU 的算力榨干。
一句话:内核 = 算法 + 对硬件结构的利用。同样的数学(比如矩阵乘),写成内核和写成纯 Python 循环,速度可以差成千上万倍。
2. 为什么要学写内核?直接用 PyTorch 不行吗?
大多数时候 PyTorch(背后是 cuBLAS/cuDNN)够用了。但当出现以下情况,你就需要自己写内核:
- 算子融合(fusion):把
softmax → dropout → matmul这种链条揉进一个内核,省掉中间结果在 DRAM 上的反复读写。PyTorch 的torch.compile会尝试做,但定制内核能做得更极致。 - 新算子:Flash Attention 当年就是没人提供高效实现,靠手写内核横空出世的。
- 省显存:大词表的语言模型里,cross-entropy 的 logits 张量巨大,定制内核能避免物化整张 logits。
3. 为什么选 Triton 而不是 CUDA?
| Triton | CUDA | |
|---|---|---|
| 语言 | Python(像写 Python 函数) | C/C++ |
| 平台 | Nvidia + AMD 都支持 | 仅 Nvidia |
| 开源 | 开源 | 闭源 |
| 生态 | 较小众 | 主流、资料多 |
| 速度 | 接近 CUDA 性能(社区经验值) | 速度金标准 |
| 上手 | 要学的少 | 要学的多(线程、共享内存、同步都要手动管) |
| 系统 | 仅 Linux | Linux / Windows |
关键卖点:Triton 用 Python 写,但能拿到接近 CUDA 的性能。它把"线程怎么分组、共享内存怎么分、怎么同步"这些 CUDA 里必须手动的脏活,编译器自动帮你干了——你只需关心"数据怎么切块、每个块做什么"。
⚠️ 注意:Triton 官方只在 Linux 上原生支持。Windows 上通常要装 WSL2,或租用云端 Linux GPU 实例。
4. 学这份教程需要什么基础?
必须:
- Python 编程
- 基本计算机常识:内存 vs 处理器、字节 vs 比特、浮点数
- 线性代数(矩阵乘、点积)
- 微积分(偏导、链式法则——反向传播要用)
- 常见深度学习算子:matmul、softmax、attention、LayerNorm、dropout、cross-entropy
- PyTorch 基本用法
最好有:
- 大 O 记号(分析内存/计算开销时用得到)
- 编译期 vs 运行期的概念(
tl.constexpr就涉及这个) - 一点数据结构与算法基础
不会也没关系,遇到不懂的先跳过,看完代码再回来看概念,会顺畅很多。
5. 这份指南和其它资料比有什么不一样?
原仓库作者踩过的坑(也是市面上多数 Triton 教程的通病):
- 内核跑不过测试(有 bug)
- 比 PyTorch 还慢
- 默认你已经懂 CUDA
- 不解释在干什么
- 故意搞复杂
- 只有文字或只有视频
本教程的目标恰好相反:从零讲、配大量图、每行代码讲为什么、确保你能跟着跑通。
6. 一条最重要的学习原则
看懂 ≠ 会做。 观看和抄代码不算掌握。你必须自己从零动手写一个(最好多个)足够复杂的内核,才能说"我理解了"。
认知地基搭好了。下一章补一点 GPU 硬件常识,然后就开始写第一个内核。→ 第 02 章:GPU 架构基础