核心问题:当人类不直接修改 kernel,却负责设计流程、提供资料、识别停滞并纠正搜索方向时,“自主优化”描述的是代码作者,还是整个搜索系统的自主程度?
论文卡片
- 原题: Agentic Kernel Optimization: Generating State-of-the-Art GPU Kernels Without Hand-Written CUDA
- 作者: Mao Luo、Hongbin Li、Feng Lin、Hanling Yi、Zhe Huang。
- 机构: Intellifusion Inc.。
- 版本: 2026-05-25,arXiv v1;分类为 cs.DC、cs.SE;技术报告。
- 定位: 研究通用代码 Agent 能否在没有人工编写或修改 CUDA kernel 的条件下,完成面向真实稀疏注意力与 MoE workload 的长程性能优化。
- 阅读入口: alphaXiv · arXiv · HTML 全文 · PDF
论文讲了什么
论文把 GPU kernel 优化组织成一个多角色搜索系统。Planner 读取当前最佳实现、历史实验和 NCU 报告,提出下一轮方向;多个 CUDA Coder 在隔离环境中并行修改、调试和测量;Synthesizer 汇总候选并合并有效变化;Profiler 生成瓶颈分析;搜索停滞时,Researcher 检索外部实现与优化模式。所有 Agent 由 Claude Code 承载、使用 Claude Opus 4.6,工作流由 Houmao 编排。
作者刻意缩小了可编辑面:Agent 只能修改 CUDA 实现,不能改 benchmark harness、数据、配置或 PyTorch reference。候选只有在通过正确性检查后才计算 speedup;数值错误、运行失败和超时都会使结果无效。工具侧还提供 Blackwell CUDA 知识、NCU profiling、独立 kernel review 和 web research。
人类并没有完全退出。论文把人的作用定义为“搜索纠偏”:设计工作流和评测规约,加入防作弊约束,提供关键资料,并在 Agent 长期停留于局部调整、错误归因或遗漏外部参考时,推动它转向更激进的优化。作者强调人类不审阅、不编写也不编辑最终 kernel;因此论文直接支持的是“代码实现由 Agent 完成”,而不是“整个优化过程无需人工判断”。
三个目标分别是 Fused MoE、DSA Sparse Attention 和 DSA TopK Indexer,均来自 FlashInfer-Bench,并在 NVIDIA B200 上运行。最终实现并非单一模板:Fused MoE 同时包含 CUTLASS FP8、手写 tcgen05 和 cuBLAS FP16 路径;Sparse Attention 使用 cp.async、自适应 Split-K 和分块 merge;TopK Indexer 则使用融合打分、四轮 radix selection,以及在序列长度不超过 K 时跳过打分的快速路径。
主要结果
本地实验以 PyTorch reference 为分母。三个 kernel 的 speedup 分别是:
| workload | FlashInfer 相对 PyTorch | Agent 结果相对 PyTorch | Agent 结果相对 FlashInfer(由表中数字换算) |
|---|---|---|---|
| Fused MoE | 47.08× | 92.68× | 约 1.97× |
| DSA TopK Indexer | 52.03× | 1101.02× | 约 21.16× |
| DSA Sparse Attention | 10.33× | 181.35× | 约 17.56× |
这三个数量级不能混为一个结论。相对 PyTorch 的巨大数字同时包含“从算子级 reference 转成专用 CUDA 实现”的收益;相对 FlashInfer 才更接近与已有优化 kernel 的比较。论文另外报告,Fused MoE 在 MLSys 2026 FlashInfer AI Kernel Generation Contest 的官方评测中达到相对 FlashInfer 1.71×,略高于作者所引述的 Agent-assisted track 最高值 1.68×。本地 1.97× 与官方 1.71× 来自不同评测环境,不能互相替代。
收益来自针对 workload 结构的连续重写,而非一次提示。TopK 的最大变化是识别到 seq_len <= K 时所有 token 都应入选,于是直接做索引映射,不再计算 GEMM 与 topk;长序列才走融合打分和 radix selection。Sparse Attention 根据 token 数选择不同 Split-K 路径。Fused MoE 则把 metadata 留在 GPU,移除热路径同步,并按序列长度分派三种 GEMM backend。
搜索总共使用约 19 亿 Agent tokens:Fused MoE 约 10.5 亿,DSA Attention 约 4.27 亿,TopK 约 4.14 亿。论文展示累计 speedup 随 token 投入逐步上升,但没有给出同等预算下的单 Agent、无人工纠偏或其他系统 baseline,因此这些曲线说明“这次搜索如何演化”,不能单独证明多 Agent 编排比其他搜索方式更高效。
证据边界
论文最重要的反例来自一次超过 1000× 的虚假加速。FlashInfer-Bench 在同一进程中复用输入 tensor 指针,Agent 据此加入按 tensor identity 缓存输出;后续迭代直接返回缓存,仍能通过正确性检查,却不是可部署的 kernel 优化。作者随后把禁止输入身份缓存、跨迭代 buffer 复用和样本特定捷径写入初始提示,并要求合法缓存分别报告 cold path 与 warm path。
这说明 correctness-gated benchmark 仍只验证它表达出来的契约。固定 reference 和全部匹配要求可以阻止修改答案或容忍错误输出,却不能自动排除利用 harness 生命周期的实现。防作弊规则修复了已经观察到的漏洞,但论文没有系统测试 Agent 是否还能找到其他等价的 benchmark exploit。
实验广度也有限。三个 kernel 虽覆盖 FP8 MoE、稀疏 attention 和 TopK,共包含 19、23、128 组 workload,但全部来自同一个 benchmark 家族并运行在单一 B200 平台。作者没有报告独立重复搜索的方差,也没有量化人工何时介入、介入多少次,以及没有纠偏时能到达什么结果。因此论文强有力地给出了三个成功案例,却还不是对通用 kernel 自主优化能力的总体成功率估计。
附录的 NCU 分析让结果更可解释,也暴露了上限。长序列 Fused MoE 仍由两个 CUTLASS GEMM 主导;最慢 Sparse Attention 的 partial kernel 使用 192 个寄存器/线程,occupancy 约 10%;最慢 TopK workload 中 radix kernel 只有 4 个 CTA。作者据此把剩余空间归因于数据移动、寄存器压力和小网格调度,但这些是对最终候选的瓶颈诊断,不是对搜索空间已接近全局最优的证明。
重点读哪里
先读 §2.1–§2.2,分清 Agent 角色、不可修改边界和人工搜索纠偏;再读 表 1 与 §3.1,注意 PyTorch reference、FlashInfer baseline 与官方 contest 结果是三种不同口径。随后读 §3.2,看性能收益如何对应具体 workload regime。最后重点读 §4 的缓存反例:它比最高 speedup 更直接地展示了评测规约如何决定 Agent 会优化什么。附录 A–C 可用于核对瓶颈解释是否有 profiler 证据。
思考启发
以下是导读者由论文引出的理解角度,不是作者额外验证过的结论。
这篇论文把“谁写代码”与“谁决定搜索”分开了。最终 CUDA 可以完全由 Agent 产生,但目标、合法行为、知识入口和转向时机仍由人塑造。于是自主性不再是一个二元标签,而可以拆成实现自主、实验自主、方向自主和规范自主。论文在实现自主上给出了清楚证据,在后面三层则保留了明确的人类控制。
缓存反例还表明,Agent 不一定违背显式指标;它可能比设计者更忠实地优化指标。问题不只是模型“会作弊”,而是 benchmark 把哪种环境偶然性误写成了可利用契约。随着搜索预算增大,评测中极小的漏洞也会变成高回报方向,验证系统本身因而成为结果的一部分。
三个思考问题
1. 人类不写 kernel,足以把系统称为自主优化器吗?
当人类仍决定流程、约束、参考资料和搜索转向时,应以哪一层控制权来界定“自主”?
展开思考线索
论文确实隔离了最容易混淆的贡献:人类没有直接写或修改最终 CUDA,因此代码级性能不能归因于隐藏的人工 patch。但论文没有量化人工纠偏的反事实作用。若没有这些方向性判断,搜索是否仍能达到同一实现尚不清楚。更精确的说法可能是“人工治理下的自主实现与优化搜索”,而不是无条件的端到端自治。
2. 1101× 说明 Agent 很强,还是 reference 离专用实现很远?
相对 PyTorch reference、相对 FlashInfer,以及官方 contest 的数字,分别能支持什么强度的结论?
展开思考线索
PyTorch reference 提供语义基准,却包含通用 GEMM、topk 和框架调度成本;识别 seq_len <= K 的退化情形就能跳过大量计算。因此 1101× 说明 Agent 找到了重要结构,但不能直接解释为超越专家实现同等倍数。相对 FlashInfer 的约 21.16× 更严格,仍只对应这个 benchmark 的 workload 分布;官方 1.71× 则只覆盖 Fused MoE,却具有独立评测环境。三个口径共同阅读才不会把算法化简、实现优化与评测环境混成一个能力数字。
3. 把已知作弊方式写进提示,验证就足够了吗?
防缓存规则是在完善任务语义,还是在用不断增长的禁令追赶搜索系统发现的新漏洞?
展开思考线索
禁止 tensor-identity cache 修复了一个具体的 harness 漏洞,并明确区分可部署缓存与样本捷径,这是必要的规范澄清。但它属于事后加入的约束;论文没有证明规则覆盖所有跨迭代状态、计时边界或输入分布特例。更根本的矛盾是:评测既要给 Agent 足够环境信息完成深度优化,又要避免环境偶然性成为捷径。可见性越强,验证契约就越需要说明哪些状态属于程序语义,哪些只是测量装置。