常见问题 / 用法与提速

为什么刚开始聊得挺快,聊久了就变慢?

因为每生成一个 token 都要把历史 KV 重读一遍,KV 随上下文线性增长。同一台 4090 实测:1K 上下文 145.2 tok/s,64K 掉到 111.3 tok/s。

结论先行:变慢不是「机器老了」,是 KV 越存越多——每生成一个新 token,模型要把全部历史 KV 重读一遍,注意力的工作量随上下文线性增长。

站内有一组同配置实测(第三方单源,C 级)把这条曲线量了出来:NVIDIA RTX 4090 24G + ExLlamaV3 跑 Mimo-9B,单流 decode,1K 上下文 145.2 tok/s,4K 144.1,8K 140.5,16K 137.3,32K 127.2,64K 111.3 tok/s(KV FP16、无投机解码、无 CPU offload,每档都跑了 needle 正确性校验)。

本站自测的 NVIDIA Tesla V100 32G(数据卡) 上下文扫描同向:Qwen3.8-27B Q4_K_M 从 512 token 的 16.47 tok/s 一路掉到 256K 的 4.8 tok/s;Ornith-1.5-35B-A3B Q4_K_M 从 93.4 掉到 22.99。上下文越长,每 token 越贵——这是结构决定的,不是调参能解决的。

三个能立刻做的动作:① 长对话开新会话,别让历史无限累积;② KV 量化(llama.cpp 的 -ctk q8_0 -ctv q8_0 减半、q4_0 减到四分之一);③ 换 KV 便宜的架构(层数少、KV 头少、带滑窗的模型)。注意 KV 量化会略微增加注意力开销,收益主要在「装得下」而不是「跑更快」。

区分两种慢:一种是「越聊越慢」(KV 越来越重,本条讲的),另一种是「越用越慢」(显存碎片、温度墙、后台任务,属于故障排查里的另一条)。别把两者混为一谈。

条目性质:本站依据自身数据模型与公开架构常数撰写。 有错请直接告诉我们,见关于页。

相关问题

KV cache 是什么?为什么上下文那么吃显存?KV cache 是为了不重复计算而存下来的历史注意力数据,它随上下文线性增长,长对话和长文档的显存大户就是它。文档比显存允许的上下文还长怎么办?三条路:换滑窗架构模型、把 KV 量化到 q4、或者分块检索只把相关段落塞进去。别指望把 -c 调到 128K 就解决了。为什么有的模型开长上下文特别便宜?因为层数、KV 头数、每头维度这三个数决定 KV,和参数量不成比例。滑窗架构更把大部分层的 KV 锁死在固定窗口里。温度、top-p、重复惩罚这些参数到底怎么调?温度管随机性(0 = 贪心、最稳)、top-p 管候选范围、重复惩罚管复读。它们只影响输出分布,不影响显存占用和速度——换参数不会让模型跑得更快。

延伸阅读

/troubleshoot/long-run-slow/→

用法与提速 · 其他条目

主要用中文,该选哪个模型?不花钱让本地模型变快的 5 个开关文档比显存允许的上下文还长怎么办?为什么有的模型开长上下文特别便宜?开了投机解码能快多少?为什么别人 40 tok/s,我只有 18?评测里的 tok/s 是单流还是并发?为什么同一张 4090 有人报 30、有人报 400?
← 温度、top-p、重复惩罚这些参数到底怎么调?回到全部 40 条
这条内容有帮助吗?