本页章节
EXACT MECHANICS / POSITION & CACHE
位置与缓存:两条前向路径,同一组 logits
RoPE 把位置写进 Q/K;KV Cache 保存已经计算的位置。沿旋转、可见范围和缓存写入逐项核对,才能确认增量前向与完整重算使用了相同的计算规则。
每对坐标旋转,点积留下相对位移
相邻两维组成一对,第 i 对使用频率 ωᵢ。不同位置改变角度,同一对 Q/K 使用相同的频率。
改变两个位置,核对旋转关系
固定 Q/K · 两个频率q=[0.8,−0.4,0.2,0.6];k=[−0.3,0.5,0.7,0.1]。先看点积,再保持 n−m 不变移动两者。
| 坐标对 i | ωᵢ | Q 角度 | K 角度 | 旋转后 Q | 旋转后 K |
|---|
相对位置关系针对固定频率和固定输入向量。改变基数并不自动证明模型具有更长上下文能力;实际模型的训练分布和位置缩放配方另行验证。
完整重算与增量缓存,逐位置核对 logits
完整前向一次计算六个位置,使用因果 mask。增量路径先处理前缀,再追加一至三个位置。两条路径使用同一输入、权重、位置频率和可见范围。
展开这次计算的全部输入与权重
矩阵按行列出,X 为行向量,Q=XW_Q、K=XW_K、V=XW_V。前三个矩阵为 4×4,输出矩阵为 4×3。
| 逻辑位置 | 输入 X |
|---|
| 参数 | 按行排列的矩阵 |
|---|
缓存路径的数值对照
固定六输入 · 非采样结果| 逻辑位置 | 实际旋转位置 | 完整前向 logits | 缓存路径 logits | 最大绝对差 |
|---|
本块 query 能看见哪些 key?
逐槽查看已缓存的 K / V
| 存储槽 | 逻辑位置 | 累计旋转位置 | K | V |
|---|
本例左 PAD 占存储槽但始终不可见,有效位置从 0 计数;不计算 PAD query。误差来自实际向量计算,错误开关不会预设误差大小。没有有效 key 的行显示“无定义”。
完整模型中,左右填充与缓存续算还能保持同一条前向吗?
复用自然语言项目训练后的 298,176 参数 Transformer 和三个真实窗口,截取 7、19、41-token 前缀,并用同一份原始后缀续算四次。逐条无填充的原始前向作参考,检查批处理的全部有效 logits、实际读出的下一位置 logits,以及每层全部有效 K/V。
这份完整模型使用保存的固定正弦位置,不是上方的 RoPE 教学配置。原文本接口按右填充使用;本实验在独立适配器中显式指定逻辑位置、有效 key 与读取列,不改写旧实验。续算使用固定真实 token,避免不同预测先改变后续输入。
前向正确,取错列仍会读错分布
右填充的短输入不能一律取张量最后一列;左填充也不能一律拿有效长度减一当物理列号。两种错误都可能在全部有效位置 logits 和 K/V 仍正确时,读出错误的下一位置分布。
只测 prefill,可能漏掉续算故障
右填充的 PAD 起初位于有效前缀之后,因果关系会遮住它们;追加新 token 后,PAD 槽已在该 query 之前。遗漏 key mask 或把缓存槽数当位置,会从续算阶段开始偏离。等长、无填充的对照保留“错误写法也通过”的情况。
完整来源保存原权重、原始窗口与 tokenizer、36 条执行路径和 540 个逐样本阶段观测、每次读出的 logits、实际位置与最终完整缓存。缓存逐步追加且旧槽不被改写;每阶段保存的独立哈希能核对最终缓存的对应前缀。PAD 查询行不作为正确目标,空提示直接拒绝。实验不测自由生成质量、GPU 性能或超出原上下文的能力。
逻辑位置、张量下标和缓存槽分别记录
后缀 query 的行号从 0 开始
已有前缀长度为 P,新块第 j 个位置应看见有效 key 的位置 ≤P+j。直接用 j 裁剪完整 key 轴,会漏掉前缀偏移。每块多于一个位置时,还需阻止块内未来信息。
Padding 改变存储布局
示例用独立的有效标记屏蔽 PAD,并用逻辑位置生成旋转角度。框架的 position_ids、cache_position 与 attention_mask 有各自约定;接入具体模型时分别核验。
固定输入才能比较路径
先固定实际 token 序列,逐层比较数值,再比较 logits。如果先采样,不同随机数会产生不同后续输入,使“输出字符串相同”无法承担数值等价性检查。
频率或权重变化需要更新缓存
本例缓存依赖输入前缀、权重、位置和频率。更换这些条件后,原 K/V 不再代表同一前向路径。共享缓存还要核对模型与 adapter 版本。
适用范围与一手资料
前半页为六个四维输入、单头 Attention、残差与三类输出,无 Norm/FFN/dropout。后半页复用完整 298,176 参数的固定正弦位置 Transformer,CPU float64 核验左右填充、读取列和四次固定后缀续算,比较原始逐条完整前向的 logits 与全部有效 K/V;完整模型不使用 RoPE,不测生成质量、GPU 性能或长上下文。
公式与机制的原始依据 · 5 项
- RoFormer / RoPE (2021)Q/K 旋转与相对位置点积
- Transformers v4.57.1 · Caching2026-10-29 核对固定版本的 K/V 复用、因果可见范围和 cache position;具体缓存类型依架构与实现
- Attention Is All You Need (2017)Q/K/V、缩放点积、残差与原始 encoder-decoder
- PyTorch · Numerical accuracy浮点精度、非结合性、矩阵运算累加与非有限值
- PyTorch 2.9 · scaled_dot_product_attention布尔 True 表示可见、显式缓存因果偏移与独立密集 softmax 对照