最初只是想读一篇论文、写个摘要,结果越读越偏,最后变成了一个我觉得挺根本的问题:当 AI agent 说它在"设计芯片"的时候,它到底在做什么? 这篇笔记记的是过程中的几个转折和几次纠正,不是论文摘要。
起点:一篇试图把"理解"变成可测量的论文
论文是 Microsoft Research 的《Do AI Agents Understand Computer Architecture?》(arXiv:2609.19387)。它指出了一个容易被忽略的问题:现在有大量工作报告"AI agent 改进了硬件设计",但这些结果只能证明设计变好了,证明不了为什么变好。一个改进了加速器的 agent,可能在推理这台机器,也可能只是在无意义的旋钮上做了一次高效的搜索——而只有前者能迁移到下一个架构。
作者的做法我觉得很干净:把同一个 agent、同一个 15 维加速器设计空间、同一个评估器、同一批可达最优解,交给它两次。
- 架构师条件:参数有名字,反馈是带硬件语义的模拟器计数器
- 黑盒条件:同一个空间暴露成匿名变量 ,反馈是同样的计数器但剥掉全部语义,只报
评估器、合法空间、可达最优解、信息含量完全相同,唯一变化的只有"这些参数有没有意义"。两者的差距就是测量结果。
九个 FP16 GEMM kernel,面积预算按 A100 的物理包络,HBM 带宽锁死在 4800 GB/s(把"靠堆带宽赢"这条路堵死),每个条件跑 5–6 次:
| 条件 | 平均最优 (µs) | 评估次数/次 | vs H200 |
|---|---|---|---|
| 架构 + 单 agent | 718.9 | 58 | 低 5.4% |
| 架构 + Actor–Critic | 744.2 | 128 | 低 4.8% |
| 黑盒 + Actor–Critic | 781.0 | 151 | 低 4.1% |
| 黑盒 + 单 agent | 819.9 | 194 | 打平 |
| H200 参考 | 750.1 | — | — |
读出来是一句话:语义值钱,但不是唯一值钱的东西。 把表当 2×2 看——架构框架在"独自搜索"时值 12.3%,批判在"框架被拿掉"时值 4.7%,而两个一起给几乎没有额外收益:两个带 Critic 的条件最好的设计只差 0.8%,Critic 还让架构条件的平均最优倒退了 3.4%。
我原本以为 vs 实际上
这是这次最值钱的部分。
我原本以为:agent 能设计出更好的芯片,说明它懂架构。 实际上:这篇论文的整个设计就是为了说明前者推不出后者。更意外的是,语义带来的优势可以被"有个批判者"补上——架构知识和结构化批判表现成替代品而非互补品。作者的解释是它们提供的是同一种稀缺品:一个"下一步该往哪看"的假设。
我原本以为:机器学习类的设计空间探索方法,就是在整个空间里暴力搜。 实际上:先算个数——一个 470 万点的空间,1000 个样本只覆盖 0.021%。而且 BO / GA / ACO 存在的全部意义就是不要暴力。它们真正的特征是"零先验":把设计空间当成一堆无语义的点,所有知识只能靠采样一点一点买回来。我之前把"采样多"和"没先验"混成一件事了。
我原本以为:既然不做局部爬山,那它们就不算贪心。 实际上:拆成两半看更准确。它们不是空间局部贪心——BO 的采集函数里那个 项就是专门往"均值低但不确定"的地方跑的,GA 的交叉能做非局部跳跃——但它们是时间近视:只优化下一步,从不计算剩余预算里信息的价值。而且每种方法都有一根旋钮(BO 的 、GA 的选择压、ACO 的蒸发率)在"纯随机"和"纯贪心"之间插值。艺术在于事先拧对,而事先拧对需要知道地形。
我原本以为:给 agent 更多信息和更多知识,总不会更差。 实际上:知识源是次模的,甚至会出现负交互。把架构知识和批判当成两个可选项,用论文的实测数据算边际贡献:
| 已有 | 新加入 | 边际收益 |
|---|---|---|
| 无 | 批判 | +38.9 µs |
| 无 | 架构知识 | +101.0 µs |
| 批判 | 架构知识 | +36.8 µs |
| 架构知识 | 批判 | −25.3 µs |
架构知识单独看值 101,但在已经有批判的情况下只值 36.8;批判单独看值 38.9,但在已经有架构知识的情况下是倒扣 25.3。如果两者可加,最终成绩应该是 ,实测是 744.2——比加性预测差了 64.2 µs。
我原本以为:LLM agent 的架构理解是它自己推理出来的。 实际上:翻到论文的提示词附录(B.8),里面逐条列出了全部 15 个旋钮,带范围、默认值、单位和自然语言描述,第一句还是 "You are an expert AI-accelerator architect"。那套"意义"是实验者写进去的,而模型权重里本来就有架构语料——论文没有任何消融能把这两者分开。所以"给了语义就好很多"站得住,"agent 理解架构"站不住。
我原本以为:Critic 是一个"第二意见",应该更可靠。 实际上:Critic 是 Actor 功能的真子集——Actor 能做 Critic 能做的一切(提出方向),还额外能提交设计、拿独立反馈、跨轮修改策略。Critic 唯一多出来的是独立性,不是功能。而且它不可验证:论文里 Actor 靠读过评估器源码驳回了 Critic 那条"提高 hbm_bw"的建议(HBM 带宽根本不是旋钮),而实测它在架构条件下仍是负收益。
两条路线:同一个问题的两种答案
把已有的设计空间探索方法摊开,其实只有两类,而且它们回答的是同一个问题——下一步该评估哪个点?
| 机器学习 | 专家启发式 | |
|---|---|---|
| 答案从哪来 | 从样本里学 | 从人写的规则里读 |
| 机制 | 信念更新 + 采样策略 | 关键路径 → 定位瓶颈 → 沿路径重分配资源 |
| 长处 | 通用、可迁移、不需要专家 | 样本效率极高(每步都带因果信息) |
| 短处 | 从零学习 ⇒ 样本饥渴 | 静态、不可修正、换架构就废 |
| 什么时候够用 | 近最优平台足够宽 ⇒ 方向不值钱 | 平台窄、且有清晰的瓶颈结构 |
专家启发式那条我一开始最不理解,后来在一篇讲 GPU 架构探索的论文(LUMINA,arXiv:2603.05904)里看清了它的谱系:从微体系结构的瓶颈分析继承下来——RpStacks 用代表性停顿事件栈做快速评估,Fields 用交互代价分析瓶颈,ArchExplorer 沿关键路径做 bottleneck-removal。核心认知是:瓶颈不是"利用率最高的部件",而是"依赖链上真正卡住别人的那个部件"。它的每一步方向都由人的因果知识给定,所以信息密度极高,几百次仿真就能收敛;代价是规则写死了,样本再多也无法修正它。
机器学习那一边,我觉得最准的比喻是:穷举是走遍每条街;BO 是边走边画地图、专门往"地图上还空白但看起来有希望"的地方去的人。 真正"没有模型"的其实只有网格搜索和随机游走。
顺便一个有意思的对照:LUMINA 的解法是从模拟器源码里静态解析出"哪个资源影响哪个指标"的因果图,再做敏感性分析量化它。这等于把专家写死的规则,换成了一条从"答案册"里自动抄出来、并且能随样本修正的先验。它样本效率确实高——1000 样本内找到 421 个优于参考的设计,而最好的黑盒基线只有 24 个;在只给 20 次评估的极端预算下,它是唯一找到能超过 A100 的设计的方法。但这恰恰是问题所在:它证明的是"注入知识有效",不是"agent 懂架构"。
一个更尖的反问
顺着"知识"这条线再推一步,会撞上一个很不舒服的问题:
如果 Actor 和 Critic 的改进方向都来自模型权重里的预训练先验,那关键不就变成了"先验怎么注入"——这不还是回到专家经验问题上了吗?
我觉得这个反问比论文自己的 Discussion 还尖锐,因为它指出了 treatment 里混着实验者写的领域知识。但它跨大了一步,有两处要反驳:
第一,名字解锁的不只是权重,还有环境。 论文里最大的一次单步改进(0.464 → 0.410),来自 agent 读评估器的成本模型源码,发现"面积对所有 tile 形状都是平的,因为面积由 tc_macs_per_cycle 驱动,而不是 M/N/K 几何"。关键在于——在匿名条件下这件事根本不可能发生:源码里写的是 l1_kb、l2_mb 这些符号,而黑盒 agent 看到的是 ,它没法把两者对应起来。所以名字是一把能打开环境的钥匙,而 这个数字不在任何预训练语料里,只能从现场读出来。
第二,先验的粒度不同。 专家规则是关于答案的("互连是瓶颈就加互连"),换架构就废;LLM 表现出的很多是关于方法的("先读成本模型看面积由什么驱动"、"设计受控实验区分混淆变量"),这些是可迁移的。
所以我把结论改写成:真正可迁移的从来不是知识,而是获取知识的能力。预训练里的架构先验再好,也是别人在某台机器上学到的东西,遇到新架构就会过期;而"读这台机器的源码、设计受控实验、证伪自己的假设"这个能力,不依赖任何关于这台机器的先验。
不过要诚实标注:论文没能证明这一点。它只测了一个模型,没有跨模型消融,没有语义错配控制,也没有陌生架构测试。所以那条最漂亮的轨迹——自己读成本模型发现面积免费——我们无法判断它是从权重里回忆出来的,还是真的从源码里读出来的。
抽象出来的目标函数
聊到最后,我们把整件事压缩成了一个式子:
- 是地板:什么知识都不注入,只用一个能干的优化器去搜,在预算 和地形 下能拿到什么。
- 是一组知识 的净贡献。注意它以集合为输入,所以行为可以是非线性的。
- 它的性质是次模(越加越不值钱,也就是替代品),且交叉项可以为负。
这个式子的价值在于,它把一场定性争论变成了三个可以分别回答的问题:
- 地板有多高? 论文里黑盒单 agent 打平 H200,说明地板相当高。
- 天花板离地板多远? 也就是 的最大值。宽平台上它很小——论文里三个条件的平均最优挤在 0.8% 以内就是证据。
- 给定预算, 该买哪几件? 次模意味着这本质是最大覆盖问题而不是背包问题:不能孤立评估每个知识源再相加,必须按边际贪心、每加一件重新评估,而且必须做消融来检测负交互。当两个源彼此可替代时,就该选更便宜、更可核查的那个。
还应该补一条关于"利用率"的观察:在这篇论文里,利用率是接口的属性,不是 agent 的属性。匿名条件把同一个模型、同一份权重知识的使用率直接打到接近零——模型没能"更努力地使用"它的知识,它根本没有着力点。
待补
- 论文作者自己说,下一步要上更难的算子(attention、集合通信、稀疏层)、更紧的约束、更小的评估预算。他们的判断是评估预算会最先"咬人",因为预算一紧,错误的假设就再也没法靠采样量补救。如果分离度在那里出现,说明能力是真的;如果不出现,那才是更有意思的结果。值得追。
- 清单上还没读完的:MicroEvo(LLM + MCTS 的微架构多目标探索)、gem5 Co-Pilot、ArchEval(把 agent 当架构师来考的 benchmark)、CAKE。打算用同一把尺子量它们:知识源 是什么?获取成本记了多少? 有没有被消融验证过?换个架构还剩多少?
- 一个我想做但还没做的对照实验:语义错配。把参数名系统性地贴错(把 L2 容量的名字贴到核心数上)。如果 agent 的优势真来自架构先验,它应该被带偏;如果只是"有名字"这个锚定效应,贴错名字就不该有太大影响。这个实验能一刀切开"语义先验"和"命名效应"。
- 强度提醒:上面所有具体数字都来自 5–6 次运行,数值本身噪声很大。可靠的是形状(次模、且至少一个格子为负),不是刻度。论文自己也发现"用同一个 prompt 的不同运行之间的差异,和不同 prompt 版本之间的差异一样大"——未建模的旋钮会主导方差,所以别急着优化,先确认效应量大于噪声。