返回课堂

完整深入材料 · 保留原页与全部停点。回到相关主讲

同一张注意力大表,为什么要搬来搬去?

N49/b0 · 重新定位大表与硬件

大容量显存 HBM片上工作区容量较小、访问更快QKV先搬入打分 → 归一 → 汇总位置比较表:T × TT = 序列长度;方格是 query–key 位置关系
重新定位大表与硬件

还记得前面序列从四个位置增加到八个位置时,那张两两比较表怎样变大吗?现在我们回到同一张表,关注的不是模型要学什么,而是硬件怎样把这个计算做完。左边是容量较大的显存,右边是小而快的片上工作区。数据必须先来到计算能使用的位置。

教师备课:指图与模拟问答

指图与推进 · 不朗读先看左侧显存与右侧片上空间,定位Q/K/V。

N49/b1 · 走直接实现的往返

大容量显存 HBM片上工作区Q / K① S = QKᵀ读取 Q/K写回 SS② P = softmax(S)读取 S写回 PP / V③ O = PV读取 P/V写回 O
走直接实现的往返

现在从上到下走三个阶段,每一行都先读蓝线、再读红线。第一行从 HBM 读取 Q 和 K,在片上计算分数 S,再把 S 写回 HBM。第二行读取刚才的 S,做 softmax 得到概率 P,再把 P 写回。第三行读取 P 和 V,进行加权汇总,形成输出 O 并写回。蓝线始终从左到右,红线始终从右到左,每条线上都写明搬的是哪个对象。

这是会物化大中间表的一类直接实现。熟悉的打分、归一、汇总并没有变,但 S 和 P 在阶段之间反复进出显存。序列越长,大表通常越大;相同算术目标可以有不同搬运成本。下一步只在片上放一个块,看看怎样保留完整计算。

进一步解释

三行表示算术阶段与传输对象,不表示每个对象在实际硬件中只发生一次物理访问。不同内核、融合与缓存策略会改变执行细节;本图限定为物化完整 S、P 的直接实现。

教师备课:指图与模拟问答

指图与推进 · 不朗读按①②③三行,逐条指蓝色读取对象、右侧计算、红色写回对象;不以箭头数声称实际内存访问次数。

N49/b2 · 只装一块时留下什么

大容量显存 HBM片上工作区QKV所有允许位置仍须处理当前小块留什么?
只装一块时留下什么

小工作区放不下完整大表,并不意味着只能删除一部分比较。我们还可以一次读一块,在片上完成局部运算,再把真正需要的信息留下来。不过这里有个难点:softmax要对所有允许位置共同归一,第一块结束时还不知道后面有多大分数。要让分块可靠,必须先弄清楚,一个还没算完的加权结果究竟该保留什么。我们用三个数把它算完。

教师备课:指图与模拟问答

指图与推进 · 不朗读左表高亮小tile,右框只容纳此块,保留其余位置。

补充推导、边界与来源

直接分步 attention 实现可能物化完整分数矩阵 S=QKᵀ,再写入 HBM;读出 S 做 softmax 得到概率 P,再写回;之后读取 P 与 V 相乘。蓝色箭头为读入片上、红色为写回。课堂路径代表会物化大中间表的一类直接实现,不表示所有现有库都如此。

T为序列长度。稠密关系按 query 与允许的 key 比较,分块不能随意漏掉本应参与的位置。片上工作区放不下整表时,可分块计算并保留可合并累计;难点是 softmax 仍需跨所有有效位置共同归一。

FlashAttention 的IO模型与范围;论文 §2、§3.1。

本页证据与条件

FlashAttention 机制;教学数值与执行示意,不是性能实测

进入主题正文