18 Auto-tuning 与性能建模洞察
- 章节编号:18
- 所属层:C 编译与算子层(落实 16 ADR-032;支撑 17 codegen/手写模板)
- 关联 ADR:ADR-062(调优总体策略:PGO + 分析 cost model)、ADR-063(IREE Transform tuning spec 集成)、ADR-064(搜索空间与 ISS/硅反馈)、ADR-065(与 perf-model/roofline 及 AI-Native 闭环)、ADR-066(LLM/Agent 辅助调优层)
- 上游依赖:02(数据流/算力带宽)、03(SRAM 容量)、16(tiling/DMA/codegen)、17(手写模板上界)、Demo
02-perf-model/09-autotune
学习目标
- 前置知识:读过 02 章(数据流/算力带宽)、03 章(SRAM 容量)与 16 章(tiling/DMA/codegen);知道「Roofline 拐点」「算术强度(arithmetic intensity)」两个基础概念;对 IREE / MLIR 的编译流程有初步印象即可。无需写过 autotune 框架的经验。
- 学完 产出:① 能画出「分析 cost model → PGO tuning spec → LLM/Agent escalation」三层调优栈,并说清各层的反馈信号(roofline / ISS timer / 硅 profiler)与触发条件;② 能用 Roofline 亲手判定一个算子到底是「访存受限(memory-bound)」还是「计算受限(compute-bound)」,并解释为什么这个判定直接决定该往哪个方向调 tile;③ 能说清「搜索空间爆炸」的量级根源,以及分析型 cost model 如何做 10–100 倍 剪枝,把搜索从「盲搜」变成「预筛后精搜」;④ 能对比「自动调优结果」与「手写 elite 模板」两种性能口径,理解 ≥95% handwritten 这条回退红线的工程含义;⑤ 能把「算子级 GFLOPS」升维到「任务级 chunk 延迟 / 有效控制频率」,说清具身场景为什么 rollout 才是最终 KPI。
- 阅读姿势:盯住一条主线——「自动调优的本质不是把搜索跑得更快,而是把不该搜的东西提前剪掉」。无论是 Roofline 预筛、PolyBlocks 两阶段 tiling,还是 LLM Agent 生成候选,本质都在解决同一个问题:搜索空间是组合爆炸的(tile × fusion × quant × pipeline),谁能用最少的实测把「明显不可行 / 明显次优」的配置剔除,谁就赢。
1. 范围与目标
本章定义 tile/并行/DMA 等编译参数如何自动搜索,以及 分析性 cost model / roofline 如何减少搜索空间、支撑编译兼容(07)跨代适配。与 16 章 codegen 分工:16 生成候选代码,18 选最优参数。
核心问题
- 静态启发式 vs Profile-Guided vs 搜索/RL 如何组合?
- 如何对接 IREE tuning spec(Transform dialect)?
- TOP 编译栈(PolyBlocks、XLA、昇腾 AOE)的 autotune 做法?
- 反馈信号来自 ISS / cycle-approx / 硅 的哪一级?
- Demo
09-autotune与02-perf-model如何贯通? - 任务级调优(rollout ms/Hz/chunk)如何纳入,而非仅算子 GFLOPS?
- LLM/Agent 辅助调优与 IREE PGO 如何分层(衔接 15 ADR-033)?
2. 需求洞察(具身驱动)
2.1 调优对象(点名)
| 对象 | 参数示例 | 来源模型 |
|---|---|---|
| GEMM/FC | tile M/N/K;parallel;vector width | 全 VLA |
| MHA/KV | head tile;KV block;fusion | OpenVLA/π0 |
| Conv/ViT | spatial tile;winograd | 感知前端 |
| DMA double-buffer | stage depth;slice size | 08/16 章 |
| 流匹配 loop | unroll vs loop;step fusion;1-NFE 快路径 | 21 章 |
| RTC 双缓冲 | chunk overlap;inpainting 开销 | 21 章 π0 |
| 量化+tile 联合 | INT4 block + tile M/N(19 章) | GR00T nvfp4 |
| 多模型 VM | context 分区;DiT vs VLM spec | GR00T/Gemini |
2.2 硬性指标
- batch=1 小 GEMM:autotune 须覆盖 M/N/K ≤256 常见具身 shape。
- 搜索:ISS 上 ≤分钟级/算子;硅后 ≤小时级/模型。
- 相对手写 elite(17):autotune 结果 ≥95% 性能或触发手写路径。
- 任务级:OpenVLA/π0 chunk latency ≤100ms、≥10Hz 有效控制频率(对标 GR00T Thor 92ms);rollout 成功率不降。
- tuning spec 绑定 LeRobot/model manifest 的 shape、quant、n_action_steps(21 ADR-046)。
- 编译兼容:新芯片代际 重跑 tuning spec,非改源码。
3. 技术现状与趋势(点名 + 来源)
3.1 调优方法论光谱
| 方法 | 描述 | 代表 |
|---|---|---|
| 分析 cost model | 屋顶线/带宽-算力闭式估计 | PolyBlocks;roofline |
| 静态启发式 | 目标配置默认 tile | IREE default tuning specs |
| Profile-Guided(PGO) | 跑 benchmark 选最优 #compilation_info | IREE tuning spec |
| 自动搜索 | 网格/贝叶斯/进化 | AutoTVM;Ansor |
| RL/Agent | 学习 pass/tile 序列 | MLIR RL(2024);KernelAgent(15) |
3.2 TOP 级 AI 推理芯片 Auto-tune 方案横向对比
| 公司/栈 | 调优机制 | 反馈信号 | 具身相关 | 优势 | 劣势 |
|---|---|---|---|---|---|
| IREE | Transform dialect tuning spec;PGO dispatch benchmark;--iree-codegen-tuning-spec-path | 真实硬件 timing | SDXL 等已验证;DSA 待建 | 与 15/16 同源;spec 可版本化 | DSA backend 需自研 spec |
| PolyBlocks | 200+ pass + 分析 cost model;两阶段 tiling;无 vendor lib | 分析+JIT 实测 | 通用 DL;可移植新 chip | 分析驱动,搜索少 | 非 IREE 树内 |
| Google XLA | 启发式+fusion cost;AutoJIT | TPU profiler | 云为主 | 成熟 | 封闭 |
| 华为 AOE | AOE 调优引擎(OPAT/SGAT/GDAT/AMCT) | 昇腾 profiler | CANN 一体 | 软硬一体 | 绑昇腾 |
| TVM/Ansor | AutoTVM/MetaSchedule | 硬件 timer | BYOC 常用 | 搜索强 | 与 IREE 分叉 |
| NVIDIA TensorRT | Builder layer fusion/precision/tactic 搜索 | GPU timer | GR00T engine build(49ms DiT) | 极致;闭源黑盒 | 不可复现;与 MLIR 分叉 |
| cutlass/autotune 文化 | 手工+模板枚举 | nvprof | GPU | 性能顶 | 不可直接搬 DSA |
| MLIR RL(研究) | RL 选 Linalg tile/fusion 序 | 编译+运行 reward | 具身长尾 | 探索性强 | 量产成熟度低 |
| 我们(目标) | IREE spec + roofline 预筛 + ISS 反馈 | ISS→FPGA→硅 | π0/OpenVLA P0 ops | 仿真阶梯 | 从零建 DSA spec |
3.3 IREE Tuning 工作流(2025–2026,重点)
IREE Issue #16952 已落地 v0 基础设施。
- 编译带 instrumentation → 运行 trace → 定位 root ops(matmul/conv)。
- 生成 Transform dialect spec(
tuning_spec_entrypoint)→ 注入#iree_codegen.compilation_info(tile、pipeline、MMA schedule)。 - Flags:
--iree-codegen-tuning-spec-path;--iree-codegen-enable-default-tuning-specs。 - CPU 路径已 plumbing(LLVMCPU matmul spec);GPU/DSA 需扩展。
判断:扩展阶段 在 IREE 上调通 DSA tuning spec 架构;具身 shape 集来自 21 章 model manifest。
与 TensorRT Builder 对比(GR00T 参考)
| 维度 | TensorRT Builder | IREE tuning spec(我们) |
|---|---|---|
| 搜索对象 | fusion、tactic、precision | Transform tile/pipeline/DMA |
| 反馈 | GPU timer | ISS→硅;+ rollout ms |
| 可版本化 | engine blob opaque | spec 文本+git |
| 任务目标 | layer latency | E2E chunk + Hz |
| AI 辅助 | 内部启发式 | LLM 生成 spec 候选(3.7) |
TRT 的 precision 搜索(nvfp4/fp8) 启示:19 章 quant 与 18 章 tile 联合搜索,非两阶段割裂。
3.4 任务级调优(E2E,非仅 kernel)
| 层级 | 优化变量 | 反馈信号 | 工具 |
|---|---|---|---|
| 算子 | tile/fusion | ISS timer / roofline | 09-autotune |
| 子图 | loop unroll;1-NFE 切换 | subgraph ms | IREE benchmark |
| 任务 | chunk_size;n_action_steps;RTC overlap | rollout Hz + p99 ms | 21 章验收集 |
| 多模型 | context 分区;DiT vs VLM spec | 并发 latency | 09 MIG + 12 VM |
RTC(21 章)调优要点:chunk 双缓冲使 有效频率 > 1/chunk_ms;autotune 目标函数加 overlap 项,避免仅优化单次 forward 而忽略 pipeline bubble。
Flow-loop 调优:5 步 vs 4 步(GR00T) vs 1-NFE(OFP) —— spec 库须 三套 dispatch;manifest 字段 flow_steps 驱动选择。
3.5 分析 Cost Model / Roofline(衔接 Demo 02-perf-model)
| 层级 | 输入 | 输出 |
|---|---|---|
| Roofline | DSA 峰值 TOPS、LPDDR/SRAM 带宽(03) | compute-bound vs memory-bound |
| DMA model | scratchpad 容量(03);double-buffer | 最小 tile 下界 |
| Latency model | 队列深度;launch overhead(09) | 剔除不可行 config |
| 预筛 | 上面三者 | 搜索空间 10–100× 缩小 |
PolyBlocks 经验:先 tile 目的地 nest 再 fusion(arXiv:2603.06731,编号待核)——与 16 章 two-phase 一致,可写入 heuristic。
搜索空间「预筛漏斗」直观图——下图把「组合爆炸的原始搜索空间」如何被 roofline / DMA / latency 三级分析模型逐层剪枝,最终只剩少量候选进 ISS 实测,画成一个漏斗:
读这张漏斗:关键不在漏斗末端的 ISS 实测跑得多快,而在于前三级分析模型(免费、闭式估算)在不跑一次真实 kernel 的前提下,就把 90% –99% 的配置判死。这正是「startup 算力有限却仍能做 autotune」的根本原因——用分析型 cost model 换实测预算,而非堆机器盲搜。
3.6 量化与 tile 联合调优(衔接 19 章)
| 联合变量 | 搜索策略 | 参考 |
|---|---|---|
| INT4 block size × GEMM tile | roofline 预筛 + PGO | QVLA;GR00T nvfp4 |
| fp8 ViT conv tile | 带宽 bound 优先 | GR00T ViT fp8 |
| per-channel scale 布局 | 与 DMA 对齐 | 19 ADR-042 |
禁止先定 quant 再 blind tile 或反之;manifest 中 quant_scheme + preferred_tiles 一并版本化。
3.7 LLM/Agent 辅助 Auto-tuning(2024–2026 业界,重点)
LLM 不替代 IREE PGO 与 roofline 主线,而是 加速 spec 候选生成、缩小搜索、消化长尾——与 15 章 ADR-033 一致。