跳转至

推理加速方法图谱

推理优化的对象不只有计算量。一次请求的时间还包含数据移动、Kernel Launch、同步、排队与自回归依赖。先定位主瓶颈,再选择算法;否则“FLOPs 降低”可能换不来实际延迟。

从瓶颈选择方法

flowchart TB
    P[Profile 证据] --> B{主瓶颈}
    B -->|模型容量 / HBM 流量| Q[量化 / 剪枝 / 权重共享]
    B -->|Attention IO| F[FlashAttention / Tiling / 融合]
    B -->|计算量| S[结构化稀疏 / 蒸馏 / 小模型]
    B -->|自回归串行| SD[Speculative Decoding]
    B -->|Kernel / 中间量| K[算子融合 / Layout / 编译]
    B -->|KV 容量 / 带宽| KV[GQA/MQA / KV 量化 / 窗口化]
    Q --> V[质量 + Kernel + 端到端验收]
    F --> V
    S --> V
    SD --> V
    K --> V
    KV --> V

方法对照

方法 改变什么 主要收益 主要代价/条件
权重/激活量化 数值表示 容量、带宽、低精度算力 量化误差、Scale/Packing、硬件支持
KV Cache 量化 Attention 状态精度 长上下文容量与读取带宽 KV 敏感性、逐步写入与反量化 Kernel
非结构化剪枝 单个 Weight 为零 理论参数/FLOPs 下降 索引开销;无稀疏 Kernel 时难兑现
N:M 结构化稀疏 固定分组内保留 N 个非零 匹配专用稀疏矩阵单元 模型需满足模式,质量与覆盖率
蒸馏 用小模型逼近大模型 直接降低层数/宽度与总计算 训练数据与教师成本,能力迁移边界
算子融合 合并执行边界 减少中间 HBM 读写与 Launch 寄存器压力、动态 Shape、实现复杂度
IO-aware Attention 改变精确算法的分块 减少 HBM 往返,不必近似 Attention Tile/Shared Memory/寄存器调度
Speculative Decoding Draft 提议多个 Token,Target 验证 减少串行 Target Step 接受率、Draft 成本、验证 Kernel
GQA/MQA 减少 KV Head KV 容量和 Decode 带宽下降 通常属于模型架构选择,质量需验证

稀疏为什么容易“纸面加速”

设稀疏率为 50%,并不自动意味着延迟减半:

  • 非零元素需要索引或压缩格式,增加解码与不规则访问;
  • 通用矩阵单元可能仍执行 Dense 计算;
  • 负载不均导致部分线程/PE 空闲;
  • 只有少数 Shape、数据类型和稀疏模式有专用 Kernel;
  • LayerNorm、Attention、Embedding 等未稀疏算子仍占时间。

因此要区分:

  1. 参数稀疏率;
  2. 理论稀疏 FLOPs;
  3. 被稀疏 Kernel 覆盖的端到端时间比例;
  4. 目标硬件实际跳过的乘加与数据读取。

FlashAttention 展示了什么

标准 Attention 的数学 FLOPs 不变,也可以通过减少 HBM 与片上 SRAM 之间的读写显著加速。它揭示一个通用原则:

算法复杂度相同,不代表 IO 复杂度相同;现代加速器上,数据移动经常比乘加更值得优化。

flowchart LR
    subgraph STANDARD[普通实现]
        QK[QKᵀ] --> H1[写 HBM Score]
        H1 --> SM[读回做 Softmax]
        SM --> H2[写 HBM Probability]
        H2 --> PV[读回做 PV]
    end
    subgraph TILED[IO-aware 分块]
        TILE[Q/K/V Tile] --> SRAM[片上 SRAM<br/>在线 Softmax + 累加]
        SRAM --> OUT[只写最终输出]
    end

Speculative Decoding 的收益条件

若 Draft 一次提议多个 Token,Target 用并行方式验证,收益取决于:

  • Draft 模型/Head 的执行成本;
  • Target 对提议 Token 的平均接受长度;
  • 验证阶段能否形成高效矩阵 Shape;
  • 采样策略必须保持目标分布正确;
  • Batch、序列长度与 Runtime 调度带来的额外开销。

接受率高但 Draft 太慢,或验证 kernel 很小,都可能没有端到端收益。必须报告每轮提议数、接受长度分布和 Target Forward 次数,而不只报告单个峰值加速比。

统一收益模型

对只优化一部分执行时间的方法,可先用 Amdahl 视角做上限估计。若目标部分占比为 \(p\),该部分加速 \(s\) 倍,则总体上限:

\[ S_{total}=\frac{1}{(1-p)+\frac{p}{s}} \]

若低精度 GEMM 只占端到端 40%,即便该部分快 2 倍,总体也只有约 1.25×。这能提前识别只优化热点局部却忽略排队、数据转换和其他算子的方案。

一项优化的证据链

flowchart LR
    ALG[算法变化<br/>少算 / 少存 / 少搬] --> IR[图与 IR 发生预期变化]
    IR --> K[命中目标 Kernel / 指令]
    K --> HW[Counter 证明资源变化]
    HW --> E2E[端到端指标改善]
    E2E --> Q[质量仍在边界内]

缺少任一环都不能完成归因:

  • 只有算法论文,没有目标 Kernel:可能无法部署;
  • 只有 kernel microbenchmark,没有端到端占比:收益可能很小;
  • 只有端到端变快,没有质量/输入控制:可能比较了不同工作负载;
  • 只有吞吐提升,没有尾延迟:在线场景可能牺牲了 SLO。

延伸阅读