本页章节
EXACT MECHANICS / ATTENTION KERNELS
分块 Attention:重建概率,累计梯度
前向用少量统计量完成归一化,反向再按块重建概率。先看一行输出如何形成,再追踪多个 query 对同一个 K/V 的梯度贡献。
三个累计状态足够计算一行输出
全行减去同一最大值不会改变 softmax。如果新块含更大的分数,旧 ℓ 和 a 需要乘 e^(m−m′),才能把新旧块放到同一尺度。只对每个块单独 softmax 再平均,通常得不到全行结果。
按块推进,看旧累计值怎样重新缩放
六个分数与二维值向量
双精度在线计算原分数 [1,2,−1,3,0,2.5]。平移会改变运行最大值,不改变数学上的概率与输出。
当前前缀输出:
整行参考输出:
与整行参考的最大绝对差:
| 块 | 本块分数 | 块最大值 | 运行最大值 | 旧状态缩放 | 累计分母 |
|---|
读完所有块后才应与整行结果一致;中间状态只覆盖已读取位置。最大误差反映数值比较,不是模型质量。当前示例不含 mask、dropout、batch 或多 query。
整行的值向量与参考概率
| 位置 | V | 全行概率 |
|---|
FlashAttention 在这个关系上做了哪些工程工作?
分块读取 Q/K/V
把块送到片上存储,计算局部分数,避免把全部分数写回 HBM。
更新各行累计状态
维护最大值、分母与输出,局部块处理完后复用空间。
重算局部概率
反向使用保存的少量统计与 Q/K/V 重建需要的块,计算梯度。
核对数值与成本
比较参考输出与梯度、峰值内存、访存和运行耗时。
FlashAttention 的“精确”描述标准注意力目标;浮点求和顺序不同,结果不必逐位相同。它减少物化的中间矩阵和内存流量,密集全注意力的交互数量仍含序列长度平方项。稀疏 Attention 则还改变可访问的位置集合。
真实实现还需设计块尺寸、线程组织、寄存器占用、Tensor Core 计算、mask 和反向重算。更少 HBM 访问不等于任意形状都同样加速,必须在目标硬件、长度与 batch 下测量。全 mask 行与 dropout 的约定也需与参考实现匹配。
没有保存 P,反向怎样得到 dQ、dK、dV?
前向完成后保留 Q/K/V、输出 O 和每行的 log-sum-exp(LSE)。当前块重新计算分数,再减去整行 LSE,即可重建该块对应的全局概率。下式使用无 dropout 的标准 Attention;上游梯度 G=∂L/∂O 固定。
五个位置的逐块反向
二维 Q/K/V · L=Σ O⊙G · 无 dropout| 块 | Query | Key | 重建的概率行 |
|---|
前向保存的逐行统计与输出
| 行 | LSE | 输出 O | D=G·O |
|---|
目前累计的梯度与完整参考
| 对象 | 累计梯度 | 完整矩阵参考 |
|---|
全部输入矩阵与空行约定
Q = [[.2,-.3],[.5,.1],[-.4,.7],[.6,-.2],[.1,.8]]
K = [[.3,.5],[-.2,.4],[.7,-.1],[.1,-.6],[-.5,.2]]
V = [[1,0],[0,2],[-1,1],[2,-1],[.5,.3]]
G = [[.2,-.1],[.3,.5],[-.4,.2],[.1,-.3],[.6,.4]]全部屏蔽的 query 行在本例显式定义 O=0、相关导数为零,LSE 显示为 −∞。实现单独处理该行,避免计算 −∞−(−∞)。这是一项明确的边界约定,不把无定义的普通 softmax 直接当成零。
省下的保存量,与增加的重算分别记账
本例对比“保留完整 P”与“保留一行一个 LSE”的路径。Q/K/V/O 在两条路径中共同保留;上游 G 和 dQ/dK/dV 另计。临时概率块按 query 块×key 块计容量,但真实反向还会产生分数、导数、矩阵乘 workspace 等临时张量,因此这个容量不是物理内存峰值。
5×5 概率表有 25 个元素,LSE 有 5 个;默认 2×2 概率块最多 4 个。前向对因果可见位置计算 15 次 QK 点积,反向重建再计算 15 次。JavaScript 交互保存的逐步快照和完整参考仅用于展示,未包含在算法账本里。
适用范围与一手资料
入门为一行六分数;反向为五位置二维 Q/K/V、固定上游 G,无 dropout。分块重建与完整参考及 PyTorch autograd 核对;全屏蔽行显式取零。账本排除界面快照,不实现 GPU kernel。
公式与机制的原始依据 · 4 项
- FlashAttention (2022)精确 attention、HBM/SRAM 数据搬运与内存复杂度
- PyTorch · Numerical accuracy浮点精度、非结合性、矩阵运算累加与非有限值
- Attention Is All You Need (2017)Q/K/V、缩放点积、残差与原始 encoder-decoder
- PyTorch 2.9 · Autograd mechanics本项目框架对照固定 PyTorch 2.9.0;冻结、计算图与 no-grad 的语义,2026-10-27 核对