大数跨境

权重与 KV Cache 量化,显存、速度和“智商”差多少?

权重与 KV Cache 量化,显存、速度和“智商”差多少? AI大模型智能体前沿
2026-11-07
6
导读:资源收益明显,任务分差较小:两组同条件对照,分别看权重与缓存量化的收益、代价和适用范围。

导读在 RTX 5060 Ti 16GB 上测试 Qwen3.5-4B,本次观察到的是:资源收益明显,数学与长任务的分差较小。权重量化省显存并提升生成速度,缓存量化主要省空间;数学正确率相对各自基线净变 0 到 −1.5 个百分点。但同分也会答错不同题,当前样本不能证明通用无损。下面分别算清两种量化的收益与代价。

本文 3038 字,阅读约 8 分钟先分清:压缩权重,还是压缩上下文缓存怎么测:分别固定权重和缓存权重量化:4K 下显存少约 45%—65%,生成明显提速缓存量化:32K 下整卡省约 6%—11%,生成基本不变数学与预测:解题净少 0—3 道,总分相同也会换错题长输入:Q8 缓存漏了一题,Q4 满分能说明什么?在 llama.cpp 里,两种精度怎样分别设置?本次结论:资源收益明显,数学与长任务分差较小

先分清:压缩权重,还是压缩上下文缓存

量化用更少的位数近似表示数值,减少存储和搬运的数据量。要判断它的收益,先看压缩的是哪一份数据。

权重量化压缩模型参数,KV Cache 量化压缩推理中的上下文缓存。完整注意力层保存历史 token(文本单元)的键和值向量,供后续生成复用。上下文越长、并发请求越多,K/V 缓存就可能越大,甚至超过权重占用。

两项精度可以独立设置。同一个 Q8 模型文件,既能配 F16 缓存,也能配 Q8 或 Q4 缓存,改变缓存设置无需重新下载模型。

运行内存还包含计算缓冲等数据,压缩一项能省多少总空间,要看它的占比及新增开销。有些引擎按设定容量提前分配缓存,上下文从 4K 调到 32K,加载时就可能多占显存。

怎么测:分别固定权重和缓存

这次用一张 RTX 5060 Ti 16GB,llama.cpp build 10877,提交 d4abd573f。模型是 Qwen3.5-4B,仅做文本推理,不加载视觉投影器。

高精度权重基线是固定版本的 Unsloth BF16 文本 GGUF;Q8_0、Q4_K_M 均由这同一份文件、用同一版本的 llama-quantize 生成,未使用重要性矩阵,避免混用不同转换来源。

下文简称 Q8、Q4 时,权重分别指 Q8_0、Q4_K_M,缓存分别指 q8_0、q4_0。权重与缓存的 Q4 是不同格式;Q4_K_M 也不是每个张量都严格采用 4bit。

资源和速度实验分两组:权重组固定 F16 缓存,比较 BF16、Q8、Q4 权重;缓存组固定 Q8 权重,比较 F16、Q8、Q4 缓存。均为单请求、单槽,开启 Flash Attention,关闭自动显存适配;日志确认可卸载层均放到 GPU,仍有 CPU 映射缓冲。

资源和速度测试覆盖 4K、16K、32K,下面选取 4K 权重组与 32K 缓存组展开。实际输入分别为 3584、32256 token,固定生成 128 token;同一长度档使用相同的合成重复文本,禁用提示缓存复用,预热后测三次,速度取中位数。两组的上下文条件不同,节省或提速比例只与各自基线比较。

显存用 nvidia-smi 每 200ms 采样,表中取三次运行采样峰值的中位数,统计全卡使用量;测试前占用 15MiB。这个口径包含模型之外的显存占用,也可能漏掉两次采样间的瞬时峰值。

权重量化:4K 下显存少约 45%—65%,生成明显提速

先看 4K 容量、3584 token 输入,缓存均为 F16:

权重 全卡采样峰值 输入处理 token/s 持续生成 token/s
BF16 8455MiB 3872 45.63
Q8_0 4659MiB 4717 78.20
Q4_K_M 2969MiB 4541 112.51

以 BF16 权重为基线,缓存保持不变:Q8_0 少占 3796MiB,全卡采样峰值降低 44.9%,生成快 71.4%;Q4_K_M 少占 5486MiB,峰值降低 64.9%,生成快 146.6%。这里比较的是整卡占用,不是模型文件压缩率。

输入处理没有按同样比例提速,Q4_K_M 本轮还低于 Q8_0。持续生成的收益不能直接当作整次请求的加速比。

逐 token 生成常受内存带宽约束,权重缩小能减少每步读取的数据;整段输入处理的复用和计算规模不同,还要看低精度内核及反量化开销。低精度存储减少了数据量,却不等于运算次数按位数同比减少,也不意味着全程低精度计算。

AI生成 更紧凑的资料包,隐喻量化后每步需要搬运的权重数据减少

缓存量化:32K 下整卡省约 6%—11%,生成基本不变

缓存本体压缩了不少,整卡却只少一部分,原因要从 Qwen3.5-4B 的架构和运行缓冲看。

Qwen3.5-4B 的文本骨干有 32 层,其中 8 层使用完整注意力、24 层使用线性注意力。前者保留历史 K/V,后者更新循环状态。因此,改变 K/V 精度只影响这部分历史缓存,并未量化全部运行状态。

固定 Q8_0 权重,32K 容量下,分配日志和实际测速如下。实际输入为 32256 token,输出 128 token:

K/V 精度 KV 分配量 全卡采样峰值 生成 token/s
F16 1024MiB 5569MiB 66.28
Q8_0 544MiB 5209MiB 67.20
Q4_0 288MiB 4953MiB 66.46

以 F16 缓存为基线,权重保持不变:Q8 缓存本体减少 46.9%,全卡采样峰值少 360MiB,降低 6.5%;Q4 缓存本体减少 71.9%,整卡少 616MiB,降低 11.1%。缓存没有刚好降到 512、256MiB,因为量化分块还需要保存缩放等元数据。

这里有两层影响。一是 KV 只占总显存的一部分,二是量化路径增加了其他缓冲。三种配置的 GPU 权重缓冲均为 4264.29MiB、循环状态缓冲均为 50.25MiB;GPU 计算缓冲却从 48.01MiB 增至 169.27MiB。

换成 Q8 缓存,KV 分配减少 480MiB,计算缓冲增加约 121MiB;全卡采样峰值最终少了 360MiB。分配日志与整卡采样口径不同,但都提示我们:KV 的压缩比例不能直接当作整卡节省比例。

生成速度从 66.28 变为 67.20、66.46 token/s,本轮观察值分别高约 1.4%、0.3%,仍在约 66—67 token/s。输入处理速度则分别约为 4128、3981、4001 token/s。这组的主要收益是省空间,生成速度变化很小。实验未锁定 GPU 频率,微小差距不宜当作稳定排名。

缓存量化减少读写,也增加量化、反量化等开销;本轮没有明显提速,但如果省下的空间能让任务运行,它仍有价值。

数学与预测:解题净少 0—3 道,总分相同也会换错题

这里把“智商”拆成三项观察:下一 token 预测、数学解题、长输入检索与追踪。它们分别提供证据,不合成通用智商分数。

先用 llama-perplexity 计算 WikiText-2 测试文本的 PPL,困惑度:上下文 2048 token,按官方工具默认方法计分,共 145 个完整块。同模型、同语料下,PPL 越低,下一 token 预测越好。

数学应用题采用 GSM8K 测试集的固定 200 题子集,抽样种子为 20261106。五种配置使用同一提示:非思考模式下写简短计算,最后输出 #### 和数字;不提供示例,贪心解码,输出上限 768 token,按最终数字严格匹配标准答案。

质量生成使用四槽并行、每槽 32K,关闭提示缓存复用;它只用于比较任务结果,不替换前面的单槽测速。以下也不是完整 GSM8K 榜单成绩。

只改权重:缓存固定 F16,对比 BF16 权重。

权重 WikiText-2 PPL ↓ 数学正确数 正确率变化
BF16 8.6220 184/200 基线 92%
Q8_0 8.6350 184/200 0 个百分点
Q4_K_M 9.0997 182/200 −1 个百分点

只改缓存:权重固定 Q8_0,对比 F16 缓存。

K/V 缓存 WikiText-2 PPL ↓ 数学正确数 正确率变化
F16 8.6350 184/200 基线 92%
Q8_0 8.6348 181/200 −1.5 个百分点
Q4_0 8.6570 181/200 −1.5 个百分点

相对各自基线,Q8 权重的正确数持平,Q4 权重少答对 2 道,两种量化缓存均少答对 3 道。对应的正确率净变动为 0、−1、−1.5、−1.5 个百分点。

Q4 权重的 PPL 则上升约 5.5%。它反映同一语料上的预测变化,不能写成“智商下降 5.5%”。

对同题分差做一万次配对重采样,Q4 权重的 95% 区间约为 −4 到 +1.5 个百分点;Q8、Q4 缓存分别为 −4 到 +0.5、−5 到 +1.5 个百分点,均包含零。当前样本的分差较小,尚不足以确定稳定损失幅度。这些区间反映样本差异,不包含重复运行波动。

总分相同,也不等于逐题一致。Q8 权重虽然同样答对 184 道,却错了基线答对的 3 道题,也答对了基线答错的 3 道题。只看总分,会把这些变化抵消掉。

AI生成 错题数量相同,位置却不同;图为同分异题的示意,非实际测试答卷

各配置另有 1—3 道题达到输出上限,截断情况已单列。成绩描述的是固定生成预算下的表现。

长输入:Q8 缓存漏了一题,Q4 满分能说明什么?

数学题没有覆盖接近 32K 的长输入,还需要单独检查缓存量化在长任务中的表现。这部分固定 Q8_0 权重,用 NVIDIA 的长上下文合成评测 RULER 生成三类任务:每个长度档 40 道单目标检索、30 道多键检索、30 道变量追踪。每种缓存都回答相同的 300 题,三种缓存共生成 900 条回答。

三档实际输入约为 3.4K—3.9K、15.9K—16.2K、30.5K—32.5K token,输出上限 128 token,输入与输出之和不超过对应档位。仍采用四槽、非思考模式和贪心解码。

按 RULER 官方的逐目标子串匹配方法计分:一题有多个目标时先计算命中比例,再对本档 100 题平均。下面是三任务子集的目标召回率,不是完整 RULER 总分。

输入长度档 F16 缓存 Q8_0 缓存 Q4_0 缓存
约 4K 100% 100% 100%
约 16K 100% 100% 100%
约 32K 100% 99% 100%

32K 多键检索中,Q8 缓存有一题返回了错误标识,回答完整、没有截断;F16、Q4 缓存在同题返回了正确标识。这一题不足以给两种缓存排优劣,但说明 Q8 也可能改变具体题目的答案。

这批长任务的分差也小,但满分上限限制了区分能力。它没有覆盖复杂自然长文、多文档推理或更长上下文,结果还绑定本模型的混合架构。

在 llama.cpp 里,两种精度怎样分别设置?

下面以本轮 Q8 权重配 Q8 缓存为例。模型文件需预先准备,参数以本次版本为准:

BASH llama-server -m Qwen3.5-4B-Q8_0.gguf \
  -ngl 999 -c 32768 -np 1 -b 512 -ub 256 \
  -fa on -ctk q8_0 -ctv q8_0 \
  --fit off --cache-ram 0 --no-context-shift \
  --jinja --reasoning off --host 127.0.0.1 --port 18765

-m 选择权重文件,-ctk、-ctv 分别选择 K、V 缓存精度。测试缓存时保留同一个文件,只改后两项;测试权重时则固定缓存设置。启动后检查日志中的实际层卸载、上下文容量、KV 与循环状态分配,不只看命令写了什么。

UMA 统一内存平台同样要为系统、权重和运行缓存分配空间;共享内存池也有容量与带宽约束。仍需分别核对权重与缓存的占用、精度支持及收益,速度也要在对应硬件和后端重测,本篇独显数据不直接移植。

本次结论:资源收益明显,数学与长任务分差较小

权重组省显存并加快生成,缓存组主要省空间。4K 权重组的全卡显存少约 45%—65%,生成快约 71%—147%;32K 缓存组的整卡显存少约 6.5%—11.1%,生成基本不变。这是两组不同条件下各自的收益,不能相加或直接排名。

已测任务的分差较小,但具体答案确实会变。200 道数学题中,Q8、Q4 权重的正确率分别净变 0、−1 个百分点,两种量化缓存均为 −1.5 个百分点;32K 长任务中,Q8、Q4 缓存的目标召回率分别少 1、0 个百分点。这是本次样本中的成绩变化,数学分差还不足以确认稳定损失幅度,长任务又接近满分上限,因而不能据此保证换任务后也几乎不变。

实际配置时,先拆清占用:权重占主导,先评估权重量化;上下文缓存成为压力,再评估缓存量化。然后固定长度、并发和生成预算,用同一批实际任务比较原始答案。把省下的资源与实际出现的答案变化放在一起,判断这组配置能否满足任务。

本地大模型跑得快不快,算力和内存分别决定什么?

参考资料 上下滑动

•Qwen3.5-4B 官方模型配置: https://huggingface.co/Qwen/Qwen3.5-4B/blob/main/config.json•本次 BF16 文本 GGUF 来源,固定提交: https://huggingface.co/unsloth/Qwen3.5-4B-GGUF/tree/e87f176479d0855a907a41277aca2f8ee7a09523•llama.cpp 本次提交的 Qwen3.5 实现: https://raw.githubusercontent.com/ggml-org/llama.cpp/d4abd573f/src/models/qwen35.cpp•NVIDIA TensorRT:低精度存储与计算的区别: https://docs.nvidia.com/deeplearning/tensorrt/11.4.1/inference-library/quantized-types-explicit-quantization.html•Hugging Face:KV Cache 量化机制与速度取舍: https://huggingface.co/blog/kv-cache-quantization•llama.cpp:PPL 与量化评测说明: https://github.com/ggml-org/llama.cpp/blob/master/tools/perplexity/README.md•GSM8K:多步数学应用题数据与评测: https://github.com/openai/grade-school-math•RULER:可控长度的长上下文评测: https://github.com/NVIDIA/RULER•MLX:统一内存架构说明: https://ml-explore.github.io/mlx/build/html/usage/unified_memory.html

THE END

文章仅做学术分享,如有侵权请联系删除,非常感谢!

【声明】内容源于网络
0
0
AI大模型智能体前沿
分享AI大模型智能体前沿知识,探寻多元应用,洞察未来趋势,带你一路 “卷” 赢行业!🔥
内容 1183
粉丝 0
AI大模型智能体前沿 分享AI大模型智能体前沿知识,探寻多元应用,洞察未来趋势,带你一路 “卷” 赢行业!🔥
总阅读29.2k
粉丝0
内容1.2k