Repository navigation
FAQ.zh
这会取代 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 接入连接器;
配方的热/冷专家拆分完全不受影响。