算子优化(Operator Optimization)
专题类型:主学习路线 副标题:从计算图、Triton Kernel 到 CUDA 下探与端到端证据
页面导语
算子优化的目标不是孤立地让某个 kernel 更复杂,而是在输入输出语义不变的前提下,减少不必要的数据移动、kernel launch 或硬件空转,并证明收益能传递到真实 workload。它承接性能优化已经定位出的局部瓶颈:性能优化回答“慢在哪里”,本专题回答“图、kernel 或执行路径怎样改,为什么值得改”。
路线从硬件成本与图变换进入 Triton 实现,再经过经典算子与 Attention,最后按需要下探到 CUDA。Part01 提供硬件、执行与编译前置;Part03 是 Triton 主实践;Part04 提供 CUDA、Tensor Core、warp、shared memory 与 runtime 的深层实现。Part00 与 Part02 只承担张量/调试基础和模型组件场景,不构成主路线。
如何开始
- 希望理解“为什么慢”: Task0 → Task1,先用计算/访存和图结构判断候选。
- 希望动手写 Triton: Task0 → Task2 → Task3,再进入 Task5 调优。
- 希望优化 Attention 或推理路径: 回补 Task0/1 后进入 Task4;不要直接把服务级缓存或调度问题写成 kernel 问题。
- 希望下探 CUDA: 完成 Task2/3/5 后进入 Task6,在有明确实现瓶颈时比较 PyTorch、
torch.compile、Triton 与 CUDA。
CPU 可验证语义、边界、reference 与成本估算;真实 kernel 时间、autotune、Tensor Core、occupancy 和 backend 差异需要匹配 GPU。每次对照均固定 shape、layout、dtype、精度阈值、warmup、重复次数、软件版本与 baseline。
Task0–6 主学习路线
Part00–04 对应关系
| 来源 Part | 在算子优化中的定位 | 主要小节 / 资产 | 对应 Task |
|---|---|---|---|
| Part00 · 前置知识 | 最小张量、reference、调试与 profiling 习惯 | 05 Tensor、17 Profiling、19 调试、20 性能账本 | 支撑 Task0 / 2 / 5,不单独形成 kernel 路线 |
| Part01 · 硬件、数学与系统 | 性能模型、存储层次、执行模型、编译与融合的机制前置 | 01–03、08–09、12–19、23–24、30–32 | Task0–5 的原理底座 |
| Part02 · PyTorch 算法实战 | 模型组件和真实 workload 场景 | 04 Attention、05 Block、20 FlashAttention 模拟、40–41 低比特、66–67/73–74 结果证据 | 主要支撑 Task4 / 6;不替代 kernel 实现 |
| Part03 · Triton 算子开发 | 主实践线:从正确 kernel 到项目 | 01–13、设计模式、内存调试、FAQ | Task2–6 的主要实现资产 |
| Part04 · CUDA 与系统优化 | CUDA 下探与实现路径比较 | 15–16、02.1 Bank Conflict、03 MMA、04 Warp、17–18、21 | Task1 / 5 / 6 的深层实现与选型 |
正文与项目证据
专题正文负责从语义、图变换、数据路径、硬件执行到证据的判断链;不逐页复述 Part03 的实现代码。Task1 在正文 01、03–06 中依次处理 graph rewrite、lowering、legalization、schedule 与 backend 约束,不再把它们维护成另一条并列路线。
| 证据层 | 必须回答的问题 | 典型记录 |
|---|---|---|
| 正确性 | 输出是否与 reference 在阈值内一致? | 输入分布、shape、dtype、误差与边界样本 |
| 微基准 | kernel 是否在相同输入下更快或更省? | latency、bandwidth、FLOPs、peak memory、autotune 配置 |
| profiler | 收益或退化来自什么执行路径? | kernel 调用、occupancy、访存、launch、trace |
| workload | 模型或服务是否真正受益? | baseline/candidate、质量、端到端指标、环境与失败记录 |
按需回补与跨专题入口
| 当你遇到的问题 | 应进入的专题 | 算子优化在其中的角色 |
|---|---|---|
| 不知道整体慢在哪里 | 性能优化、性能分析 | 接收已定位的局部 compute / memory 瓶颈 |
| 请求、KV 或服务调度导致变慢 | 推理优化 | 优化明确暴露的 Attention、RoPE、量化或模型组件 kernel |
| 多卡通信、all-to-all 或扩展效率问题 | 通信与并行 | 仅处理确认位于关键路径的本地计算/通信 kernel |
| 低比特表示、artifact 与质量问题 | 量化与压缩 | 实现或分析 quantization kernel,不替代量化策略与部署决策 |
阅读入口
- 想按问题连续推进:查看算子优化问题链。
- 想根据现象查找实现动作:查看算子优化判断手册。
- 需要图变换、IR 或 backend 细节:从03 图级优化、融合与 Kernel 组合进入,并按链接回查 Part01 · 09 与 Part04。
