Skip to content
sikkatu edited this page Nov 1, 2026 · 4 revisions

English | Русский | 中文

FAQ

这会取代 vLLM 的前缀缓存吗? 不会 —— 这是在其下增加一层持久层。内存中的前缀缓存保持启用; 持久层在重启后重新填充它。

两个不同的会话都能受益吗? 能,前提是它们共享稳定的分词前缀(相同系统消息 + 工具定义): 相同块只存一次,两者共同复用。动态值(时间戳、请求 id)会破坏前缀 —— 见故障排查。

不同模型会共享 KV 块吗? 绝不:命名空间包含模型 id、版本、分词器、dtype 和布局。 「模型无关」指机制适用于多套部署 —— 其 KV 数据并不能互换。

缓存能挺过主机重启吗? NVMe 上的数据文件会保留。重启后先启动缓存服务(start-cache.sh), 再启动 vLLM —— 索引重建是惰性且自动的。

需要修改我的聊天客户端吗? 不需要。集成完全在 vLLM 侧;您的聊天客户端照常访问同样的 /v1/chat/completions 端点。

磁盘写满会怎样? 超出硬预算的写入会被拒绝;服务在没有新缓存写入的情况下继续正确工作。 软阈值(90%)的淘汰机制通常能避免进入这种状态。

我的提示词文本现在到磁盘上了吗? 不是文本形式 —— 但 KV 数据源自提示词,按相同敏感级别对待 (chmod 700、仅回环管理;见安全)。

磁盘上的 KV 是有损压缩的吗? 不是。L2 层只支持无损:块以逐字节精确方式存储(默认)或以无损 zstd/lz4 压缩存储(估算 1.1–1.4x)。有损量化(fp8 / turboquant / lbq)在启动时被 拒绝。每个帧携带 CRC32:损坏的帧被报告为缓存未命中,绝不会作为错误的 KV 返回。

不压缩时需要压缩包吗? 不需要。LMCACHE_L2_SERDE=none(默认)的缓存完全不需要任何压缩包。 zstd 只需要 zstandard,lz4 只需要 lz4:启动前的检查只验证所选的 那一个编解码,绝不要求未使用的那个。

可以在 Grafana 里看吗? 可以 —— bash scripts/start-observability.sh 启动官方 LMCache 可观测性栈 (OTel Collector + Tempo + Prometheus + Grafana),LMCache 仪表盘已自动导入。 Grafana 位于 http://localhost:3000,所有端口仅绑定 127.0.0.1。用 USE_OBSERVABILITY=1 启动缓存以推送指标;缓存不依赖该栈也能完整工作。

什么测过、在哪里测的? 单元测试套件(身份、预算、保留、配置一致性、无损 serde 帧、cache_salt 文件名、 tmp 文件核算)在任何机器可跑;集成测试需要 lmcache CLI; 验收/恢复测试需要 GPU 主机(KVP_HARDWARE=1)。状态标签如实标注 —— 见仓库中的 docs/final-report.md。

为什么缓存「命中」了,TTFT 却几乎没降? 缓存命中省掉的是 prefill 计算,不是解码时间,也不是冷专家的 PCIe 传输 (本场景尾延迟主要来自 hotsplit/MoE 卸载)。TTFT 改善随提示词长度增长; 短提示词绝对收益很小。

能和 hotsplit 配方一起用吗? 能 —— 这正是设计目标:配方启动器中的 KV_PERSIST=1 接入连接器; 配方的热/冷专家拆分完全不受影响。

Clone this wiki locally