Day 9·1 KV 也量化——q8 KV 把缓存与 decode 带宽压到一半

发布时间:2026/9/14 2:03:31

Day 9·1 KV 也量化——q8 KV 把缓存与 decode 带宽压到一半 源码精读篇本文为源码/方法论精读无独立实测文中数字均引述仓库 docs 的板端实测记录一句话导读q8 KV把 K、V 从 f16 压到 INT8按每 token 每头定标量化逐字节算清缓存与 decode 扫描带宽省约一半的账并讲清 KV 为何敢量化、f32 为何只是调试探针。8-3 我们把 KV 的布局讲清楚了可一个残酷的事实还在KV 是模型里除权重外最肥的东西。8K 上下文 × 28 层 × 8 KV 头 × 128 维若用 f16 存 K、V 各一份光这一块就约 560MB——decode 每词还要把它们全扫一遍。今天把 KV 也量化成 q8看带宽怎么压到约一半。1. 知识点为什么 KV 敢量化权重能 Q4/Q8第 5 天KV 为什么不能量化 KV 的顾虑是“精度”但注意两个事实decode 只“读”KVK/V 一旦写入就只被乘与累加量化误差只影响当次注意力打分/加权不像权重误差会一层层传播叠加KV 每维都有独立的 scale引擎对每个 (token, head) 单独定标见下128 维共享一个 scale误差被锁在“一行的局部”不会累积。于是引擎默认把内存 KV 压成INT8q8每个元素从 2 字节f16降到 1 字节K、V 各一份直接砍半再配合 8-3 的“decode 扫全 KV”路径每词的 KV 读取带宽同比例减半另有更狠的--kv-q4模式K/V 再压一半约 1.65 倍更密Day 24 思路同源。2. 对应代码q8 KV 的存储与“一 token 一 scale”引擎在分配阶段默认走 q8vllm_safetensors.c 第 8208–8244 行/* Compressed KV cache: INT8 (near-lossless) by default; --kv-q4 switches * to the Q4_0 payload cache (~1.65x denser, decode dot without dequant). */ st-use_kv_q8 g_kv_q4 ? 0 : 1; ... st-k_cache_q8[l] alloc_kv_blocks_i8(n_blocks, bs, kv_dim, ...); st-k_scale[l] cf_calloc_guard((size_t)max_seq * nkv, sizeof(float), ...); /* 每 token 每头一个 scale */写入时按“每 token 每头”做 max-abs INT8 量化第 9466–9476 行if (st-use_kv_q8) { /* Per-token per-head max-abs INT8 K/V quantization (near-lossless). */ int8_t *kdst kv_row_i8(st-k_cache_q8[l], cl, kv_dim, st-kv_bs); int8_t *vdst kv_row_i8(st-v_cache_q8[l], cl, kv_dim, st-kv_bs); kv_quantize_per_head(kdst, vdst, st-k_scale[l] (size_t)cl * nkv, st-v_scale[l] (size_t)cl * nkv, st-k_buf, st-v_buf, nkv, hd); /* Also store in float cache */ /* fp32 镜像仍保留调试/对照用 */ memcpy(... k_buf, kv_dim * sizeof(float)); ... }逐字节算笔账2B 模型参数nkv8、hd128即每个 token 每层 K 与 V 各kv_dim 1024f16 KV K 1024×2B V 1024×2B 4096 B / token / 层 q8 KV K 1024×1B V 1024×1B 2048 B scale8 头 × (K、V 各一) × 4B 64 B 合计 2112 B / token / 层 → 4096 → 2112缓存字节与 decode 全量扫描带宽均 ×0.52省约 48%接近一半scale 的粒度是“每个 (token, 头)”——比“整层一个 scale”细得多这正是 q8 KV 敢自称 near-lossless 的原因9-3 会给实测误差。3. 改动后果关掉 q8 KV 试试--kv-q4 / 全 f32 的代价引擎把 KV 模式做成可切默认 q8near-lossless解码走 INT8 单遍9-2 主角--kv-q4切到 Q4_0 payload 缓存比 q8 再密 ~1.65 倍decode 点积免反量化直接吃 nibble全 f32 的 KV代码注释明确记为DEBUG 用途第 8210–8214 行曾用来排查 K 缓存损坏定位后恢复生产默认——f32 KV 不是给生产用的是调试探针。想亲眼看到“KV 模式影响带宽”连跑--bench-mixed之外的 decode 场景不现实无直接开关计时但可以换位验证——8-3 说过 decode 每词扫全 KVKV 从 4096B/token/层f16降到 2112Bq8后decode 的 KV 扫描带宽需求直接 ×0.52这正是基准报告里 8K decode 引擎能维持 ~137ms/词vs llama f16-KV 全扫 411ms的重要来源之一叠加 Day 10 的稀疏详见 9-2/10 天。4. 学员调试任务A 档板端动手跑引擎--kv-q4与默认模式各一次短生成同一 prompt记录输出 token 是否一致q4 KV 比 q8 更激进肉眼可看的场景值得留个心眼用 5-1 的解析脚本确认模型 KV 相关张量名结合本页算一遍“2B 8K 上下文 q8 KV 约多少 MB”8K×28 层×2112B≈?。B 档纯读源码读alloc_kv_blocks_i8/kv_quantize_per_head在 vllm_safetensors.c 内搜索画出“一个 token 的 K 行 → 1024 int8 8 个 float scale”的落盘/落存图。预期输出你能算清 f16→q8 KV 省多少字节、scale 为什么按“每 token 每头”、以及 f32 KV 为何只是调试探针。收尾本篇源码点名vllm_safetensors.cq8 KV 分配与开关第 8208–8244 行、per-head 量化写入第 9466–9476 行。开源仓库Kestrel-LLM (Gitee)源码可得双许可学习 / 学术研究免费下篇预告q8 KV 存好了decode 怎么读它才最省下一篇 9-2 进flash_attn_single_q_q8_neon——量化 Q、在线 rescale、一条路径扫完全部 KV。关键词q8 KV、KV cache、INT8 量化、带宽、decode上一篇Day 8·3 KV Cache按头存储vs按token存储内存布局下一篇Day 9·2 flash_attn_single_q_q8_neon——单 q 单遍扫全 KV
延伸阅读

更多相关文章

2026/9/14 2:03:31

MATLAB fmincon求解多元非线性目标函数与Simulink仿真实践

简介:一份面向多元非线性目标函数求解的Matlab实现资源,适用于需要处理带约束优化问题的工程、经济学、物理学等领域学习者。内容聚焦如何定义非线性目标函数、设置不等式与等式约束,并讲解梯度下降、拉格朗日乘数法、惩罚函数等常见求解思路…

2026/9/14 2:03:31

提示工程测试规范体系:构建高效AI系统的关键

1. 提示工程测试规范体系概述在人工智能技术快速发展的今天,提示工程(Prompt Engineering)已成为构建高效AI系统的关键环节。作为架构师,我们需要建立一套完整的测试规范体系来确保提示设计的质量和稳定性。这套体系不仅关乎单个提…

2026/9/14 1:58:31

QPSK调制解调链路MATLAB误码率仿真:从原理到工程实现

简介:QPSK调制解调通信链路MATLAB误码率仿真资源,面向通信工程、电子信息类学生及需要快速搭建QPSK仿真的研究者。资料包含可直接运行的MATLAB程序、逐行中文注释和配套操作讲解视频,能够帮助理解正交相移键控的基本原理、发射接收链路结构以…

2026/9/14 2:58:33

PHP原生学生管理系统部署与CRUD实战指南

简介:这是一套基于PHP开发的轻量级学生信息管理系统源码,面向Web开发初学者与课程设计实践者,适用于高校计算机专业PHP入门实训、数据库应用开发练习及小型教务管理原型搭建。资源包含完整的前后端实现:后端以22个PHP文件构成MVC结…

2026/9/14 2:58:33

YOLOv8坐姿矫正实战:从目标检测模型训练到PySide6界面部署

简介:一套基于YOLOv8的智能书桌坐姿矫正提醒项目,主要面向计算机相关专业学生完成毕业设计、课程设计或大作业,也适合目标检测方向的初学者进阶实践。项目针对久坐姿态不规范的问题,利用深度学习目标检测实现实时提醒,…

2026/9/14 2:58:33

kohya_ss LoRA微调完整指南:4步从安装到启动训练

kohya_ss LoRA微调完整指南:4步从安装到启动训练 【免费下载链接】kohya_ss 项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss 你想用自己的角色、画风或物体训练一个 Stable Diffusion LoRA,却被命令行参数劝退?kohya_ss…

2026/9/14 2:58:33

嵌入式自学痛点破解:知识断层、路径模糊与实操脱节

1. 这套“200集嵌入式自学教程”到底在解决什么真实问题? 我带过三十多个嵌入式方向的应届生和转行学员,也给十多家中小硬件公司做过技术顾问。每次聊到“自学嵌入式”,几乎所有人都会先叹一口气——不是不想学,是真不知道从哪下手…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码