ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Day 9·3 q8 KV 精度对照——量化进注意力,输出差多少

Day 9·3 q8 KV 精度对照——量化进注意力,输出差多少 真机实测通过本文实验已在 RK3588 板端实测完成2026-09方法学与原始记录见仓库 docs 与《实验脚本》目录一句话导读q8 KV 精度对照实验fp32 与 q8 两套 KV 走同一注意力公式板端实测输出分量差约 0.01、端到端 PPL 损失小于 1%讲清误差来自步长而非偏置、这个量级为何划算。9-1 说 q8 KV“near-lossless”9-2 说单遍内核优雅——可这两个词都得用数字说话KV 从 f16 压到 int8 后注意力输出到底差多少今天做对照实验并给出“这个量级意味着什么”的判读。1. 知识点怎么测“量化进注意力”的损失KV 量化误差的传播路径比权重误差更短K 只影响Q·K^T打分V 只影响加权求和两者都在当次注意力内结束。所以对照实验很干净基线K/V 用原始 fp32走标准注意力Q·K^T → 稳定 softmax → 加权 V被测K/V 先按引擎规则量化成 int8每 token 每头 max-abs/127再反量化回 fp32 做同一套注意力指标逐输出维的|Δout|max 与 mean。两者唯一差别就是“KV 先被量化过”——误差即量化贡献不含任何内核差异这是 5-3“对拍只改一个变量”纪律的又一次使用。2. 对应代码量化规则以引擎为准实验用的量化规则照抄 9-1 的引擎写入路径kv_quantize_per_head对每个 (token, 头) 的 128 维求max_absscale max_abs/127q round(v/scale)钳到 [-127,127]反量化v q × scale即KVQ_SCALE 1/127的逆vllm_safetensors.c 第 7358 行。注意力本体用引擎参考实现同一公式score Q·K^T / √128、减 max 稳定 softmax、加权 V。3. 改动后果板端实测 fp32-KV vs q8-KV 注意力输出在板端跑对照RK3588 / gcc 11.4 / fp32 / 2026-09序列 256 token、hd128K/V 取确定性伪随机 ~N(0, 1)L256 hd128 | fp32-KV vs q8-KV attention output: max|d_out| 0.01251 mean|d_out| 0.00856 out_f[0..3] 0.1889 0.0202 -0.2286 -0.1125 out_q[0..3] 0.1945 0.0275 -0.2178 -0.1038 (avg K per-token scale ~ 0.01719 - q8 step ~ 0.01719)怎么读这组数判读比数字本身更重要绝对量级输出分量 ~0.1–0.23q8 引入的分量差 ~0.01——相对输出幅值约几个百分点且方向随机过零附近的分量差看起来占比大但绝对值小误差源是“步长”而非“偏置”平均 scale ~0.017max/127即量化步长约 0.017——每个反量化值的误差 ≤ 半步 ~0.009与 mean|Δ| 0.0086 同量级误差没有放大softmax 的归一化把逐点小误差摊平成权重微扰引擎自己的更大规模背书代码注释记录 8B 档 INT8 KV 在 M4e/M4f 路径PPL≈0.994–0.998vllm_safetensors.c 第 8213 行——即端到端困惑度损失 ~0.5%文本质量几乎无损。合成实验中那 ~0.01 的输出差落进 128 维累加与后续 layer 后就是这个量级。结论q8 KV 的代价是“输出分量级 ~0.01、端到端 PPL 损失 1%”换来缓存与 decode 扫描带宽 ×0.529-1。对边缘推理这是教科书式的划算交易。若你的场景连这 0.5% 都敏感医疗/法务数值场景引擎仍留了 f32 镜像缓存9-1 写入代码里那句“Also store in float cache”——量化与精确两条路共存按场景选这也呼应 Day 23 起“可验证推理”对数值可追溯的要求。更进一步的诚实本实验是合成分布的“单元级”对照真实文本的 K/V 分布更尖long-tail量化误差的 worst-case 会更大但概率更低引擎级验证永远以 PPL/greedy 口径为准报告链接见任务。4. 学员调试任务A 档板端动手复刻第 3 节实验K/V ~N(0,1)L256hd128记录你自己的max|d_out|与mean|d_out|把 K/V 幅度放大 3 倍再跑观察误差是否同步放大预期放大 → scale 变大 → 相对误差基本不变验证“按行定标”的抗幅度特性。B 档纯读源码读kv_quantize_per_head实现确认“一个头 128 维共用一个 scale”再在vllm_safetensors.c第 8213 行注释里找到 PPL≈0.994–0.998 的原始语境复述它验证的是哪条路径。预期输出你能用一组自己的数字说明“q8 KV 的输出差 ~0.01、端到端 PPL 损失 1%”并解释为什么这个量级“划算”。收尾本篇源码点名vllm_safetensors.ckv_quantize_per_head写入路径、KVQ_SCALE第 7358 行、8B PPL 注释第 8213 行。开源仓库Kestrel-LLM (Gitee)源码可得双许可学习 / 学术研究免费下篇预告q8 KV 单遍扫全量O(n) 也是 n——上下文到 8K 后每词仍要扫 8K 的 KV。第 10 天上稀疏注意力能不能只扫“该看的块”把 decode 从 O(n) 再往下压关键词q8 KV、精度对照、量化误差、PPL、RK3588上一篇Day 9·2 flash_attn_single_q_q8_neon——单 q 单遍扫全 KV下一篇等待更新......
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表