
24GB 的显卡,上下文却跑到了 512K。不是显存变多了,是把"全部历史驻留显存"这件事给改了。
问题:显存墙
跑长上下文,最直观的墙就是显存。模型权重放进去之后,上下文越长,KV cache 越大,最后总会撞到"显存不够"的天花板。
传统 Full-KV 的做法是:整段历史的 KV 全部长期待在 GPU 里。逻辑上下文能多大,完全由显存容量决定。
KVMem 的思路
KVMem 不要求所有历史 KV 都常驻 GPU。它的核心逻辑是:
- GPU 只维持一个有限大小的 active KV 工作集
- 更大的历史状态放到主机内存(Host RAM)
- 需要时再检索 / 恢复回来
这样逻辑上下文可以远远超过显存容量本身能承载的范围。它解决的问题不是"让模型变快",而是**"用有限的显存,维持远超显存容量的上下文"**。
为什么对 24G 显卡特别有吸引力
7900XTX 算力猛、带宽高,但只有 24GB 显存——"威猛但显存略短"。对这张卡来说,KVMem 方向的价值远大于对 48G/80G 显存的卡:它把显存短板直接绕过去了。
7900XTX 单卡实测(KVMem × daniel-mtp 组合)
把负责快的 daniel-mtp 和负责大的 KVMem 放到一起,单张 24GB 卡的成绩:
| Context | Prefill | Decode |
|---|---|---|
| 64K | 774 t/s | 28.0 t/s |
| 128K | 724 t/s | 27.8 t/s |
| 256K | 706 t/s | 27.9 t/s |
| 512K | 696 t/s | 27.9 t/s |
注意看:从 64K 到 512K,decode 几乎不掉速(28 → 27.9)。传统 Full-KV 在这个跨度上 decode 会明显衰减,因为 KV 越来越大、越来越挤。KVMem 把工作集控制在有限大小,所以 decode 基本不受上下文长度影响——这才是它的真正价值。
关键参数
--kvmem
--kvmem-budget 32768
--kvmem-gen-reserve 16384
--kvmem-block-tokens 128
--kvmem-query-policy user适合谁
- 显卡显存不大(24G 左右),但想跑 200K~512K 长上下文
- 主机内存有 64GB+ 余量(KVMem 把历史放内存,内存要够)
- 跑 agent / 长文档处理,需要超长历史但不想为显存买单