Agent怎样发现问题,又为什么这样改
这里关心的是解怎样被找到:agent先观察什么,怎样判断原因,选择哪个改动,又怎样用实验修正判断。我们用六套完成同一道题的程序作为材料:五套榜单方案,以及你原来的 50,416分 Astra方案。每套方案都可以选择硬件配置,并决定如何把Transformer计算拆开、搬运和排队。它们的输出必须通过正确性检查,面积和功率也不能超限;在此基础上,用更少周期完成两道题,分数才更高。
直接进入两条完整研究过程: 你的完整更新过程 · 方案三的观察、试验与转向。下面的入门说明供遇到术语时查阅。
一个具体转折:你的方案试过放慢Q/K/V广播,功率峰值却几乎不变。这次试验削弱了“广播节奏就是峰值主因”的猜测。随后改为让K/V直接写到最终位置,去掉中间搬运,才得到合格结果。值得学的是用结果缩小怀疑范围,而非记住某个延迟参数。
先分清两道题:一次处理很多位置,和逐个生成新位置
P1(prefill,处理已有的一段输入):一次有两段输入,每段64个位置。同一层权重会被许多位置使用,因此适合让一次搬来的权重连续服务多行计算。程序还要算出接下来的第一个新位置。
D1(decode,逐个生成):已有128个位置的历史信息,然后连续算8个新位置。后一步的输入要等前一步提交后才释放,不能把这8步当成同时已知的输入一起计算。不过,8步使用的是同一套权重;若第一步把权重装进计算单元附近的小存储,后7步就可以继续使用。
因此,两道题省搬运的方法不同:P1主要争取“一块权重多算几行”,D1主要争取“一次装入跨多步使用”。两题共用同一硬件,所以一个选择可能帮助P1,却拖慢D1。
机器长什么样:用一个矩阵乘法解释名词
以 输入 × 权重 = 输出 为例。完整矩阵太大,程序会取其中一小块计算,再接着取下一块。这个小块叫 tile(分块)。例如 16×32×64 表示:一次更新16行、32列输出,本次沿求和方向处理64项;若完整求和维度更长,还要继续累加后面的块。
| 名词 | 在本题里具体是什么 | 为什么会影响速度 |
|---|---|---|
| SM,计算单元 | 芯片上能并行干活的一组硬件。一个SM包含矩阵、向量、特殊函数等资源 | 多SM需要程序确实拆出多份可并行工作 |
| WG,工作组 | 程序分配给某个SM的一份任务及其私有数据。每SM最多同时驻留4个WG | 决定谁持有哪块权重,谁等谁,以及能留多少数据 |
| RF,寄存器存储 | 每个WG有64 KiB小存储,计算指令直接读取这里 | 很快但小;权重、输入、输出累加值和临时值要一起放得下 |
| TC,矩阵计算单元 | 专门执行小矩阵乘法。MMA.ACC是“乘完加到已有输出上”的指令 | 算得快仍要等RF供数;不能只看TC数量 |
| HBM,外部大内存 | 保存全部权重、输入、输出和较大的临时结果 | 容量大,但访问要搬运、排队;反复往返可能拖慢程序 |
| DMA / NoC | DMA负责搬运请求,NoC是片内传输网络 | 多个WG同时搬数据会争资源;更多并发也可能抬高功率 |
| SFU / REDUCE | SFU计算指数、开方等函数;REDUCE将许多数合成和或最大值 | 注意力、归一化需要它们;没有专用归约硬件也可走其他计算路径 |
| scratch,临时区 | 程序在HBM里自行安排的中间结果地址 | 写入后再读出有代价;修改生产和消费方式,有时能省掉这次往返 |
一条典型路径是:HBM取权重 → DMA搬进WG的RF → TC计算 → 输出留在RF继续用,或写回HBM。看到“RF驻留”,意思就是让后面还要用的数据继续留在RF里。看到“组播”,意思是多个工作组请求相同数据时,硬件在满足合并条件时共用一次外存读取;仅打开开关不能保证所有请求都合并。
软件优化到底改了什么:看两种做FFN的方法
FFN是Transformer中的两次线性变换,中间隔一个GELU激活函数:W1把向量变宽 → GELU逐元素变换 → W2把向量变回原宽度。本题D1的中间宽度为512,最终宽度为128。
普通做法是:各任务算出一部分512维中间结果,写到HBM临时区;W2的任务再把它们读回来。优点是分工清楚,代价是中间结果要写一次、读一次。
另一种做法是:每个任务负责32个中间通道,同时持有W1对应的32列和W2对应的32行。它算完这32个数、做GELU后,直接在RF里乘W2,得到一份128维的部分和。16份部分和最后相加,形成完整输出。这样省掉了完整hidden中间向量的往返,但增加了部分和的写出与汇总。
这就叫“融合FFN”。它是否更快,取决于省下的搬运能否抵消新增加的归并和排队。方案一、二的最终D1采用了这种结构;方案三的一次融合试验反而变慢。后面会分别解释,不能仅凭“融合”两个字判断优劣。
从两条有记录的更新路径开始读
- 你的五万分更新路径:从“权重究竟放不放得下”开始,逐步解释为什么拆注意力、为什么融合、为什么最后宁愿多花117周期。
- Agent方法复盘:读方案三怎样从错误预测、物理分区和失败实验中找到下一步,并与自己的路径对照。
- 五套程序的构造与理由:查阅各成品怎样分工、数据怎样走、这样做解决什么问题、付出什么代价。
我们要提炼的经验:每次试验之前,把“我看见的现象”“我怀疑的原因”“我准备改变的东西”“什么结果会让我改主意”分开写。 例如,融合后变慢,只说明这次布局和调度没有获益;接着要查部分和搬运、通道排队和等待依赖,才能决定修布局还是放弃融合。
只有方案三和你的Astra方案有本次可用的过程材料。另四套可以解释程序的作用与代价,但不能从最终代码倒推出作者实际经历过的搜索过程。页面中的“构造解释”与“记录中的判断”会据此区分。
周期是这套教学模拟器中的耗时。功率上限看最热的1000周期窗口;“平均不忙”也可能有短时超限。下文会明确区分最终报告、局部实验和事后解释。