FutureMLS-Lab/FlashStates
AI 工程基于 vLLM 的混合模型状态缓存方案,减少 Agent 推理中重复预填充的 token。
FlashStates
FlashStates 是一个面向 Agent 式 LLM 推理的研究型服务栈,基于 vLLM v0.33.0 分支和可选的 Mooncake 存储分支。它针对注意力层与线性注意力或状态空间层混合的模型:这类模型的前缀缓存只有连同混合状态一起才可复用,混合状态包括每个 token 的注意力 KV,以及前缀精确结尾处的循环检查点。原版 vLLM 只在 KV 缓存块边界保存循环检查点,因此每一轮 Agent 对话都要重算上一轮的结尾;负载高时甚至会重算整个上下文。
项目做了三件事:在任意 token 位置保存循环检查点;按预填充节省量将循环检查点与其依赖的 KV 块一起准入和淘汰;可选的 Mooncake 主机内存层,在请求结束后写回完整混合状态。它适合在混合模型上服务编码 Agent 或上下文持续增长的场景,不适用于普通模型或非混合架构。
快速使用
需要 NVIDIA B200 或 GB300 GPU、支持 NVIDIA 运行时的 Docker,以及放在主机上的模型权重。先拉取与硬件对应的镜像:
| GPU | 模型 | 镜像 |
|---|---|---|
| B200 | GLM-5.3-Flash、Qwen3.8-Flash-Next、Nemotron 3 Super | ghcr.io/futuremls-lab/flashstates-b200:v0.1.0-b200 |
| GB300 | Kimi-K3.1-Pro | ghcr.io/futuremls-lab/flashstates-gb300:v0.1.0-kimi-k31-gb300 |
在两张 B200 上服务 GLM-5.3-Flash,假设权重位于 /models/glm53flash:
docker run --rm --gpus '"device=0,1"' --ipc=host --network host \
-v /models/glm53flash:/model:ro \
ghcr.io/futuremls-lab/flashstates-b200:v0.1.0-b200 \
vllm serve /model --tensor-parallel-size 2 --enable-prefix-caching \
--mamba-frontier-checkpoint --mamba-prefill-export \
--prefix-cache-eviction gds --prefill-cost-coefficients 1.862e-5 3.33e-6 \
--prefix-cache-leaf-last --prefix-cache-leaf-idle-seconds 60
启动后客户端可原样使用 vLLM 的 OpenAI 兼容 API。预填充成本系数因模型而异,每个模型的参数放在基准配置中,各 FlashStates 参数的含义见改动说明。Kimi-K3.1-Pro 则是在两个 GB300 节点上运行一个引擎,具体见其分支文档。
复现一个基准点,脚本会启动全新服务并回放固定数量的 Agent 会话:
MODEL_DIR=/models/glm53flash HF_HOME=/data/hf GPUS=0,1 PORT=8000 \
benchmarks/run_point.sh glm53flash-nvfp4-gpu flashstate 48 results/glm53flash-nvfp4-gpu/flashstate/48
GLM-5.3-Flash 上每个点约需 50 分钟,其他模型约需 80 分钟。
使用约束
- 硬件受限:三模型镜像只支持 B200,Kimi-K3.1-Pro 镜像只支持 GB300;文档结果使用每服务两张 B200,或用于一个 Kimi 引擎的八张 GB300。其他 GPU 需要手动调整 KV 缓存大小。
- 参数和选项属于研究代码,可能在版本之间变化。
- 预填充成本系数必须与模型匹配;把 GLM-5.3-Flash 的数值用于其他模型会让缓存准入判断失准。
- 从源码构建需要同时编译 vLLM 分支和 Mooncake 分支;回放客户端衍生自 AIPerf 与 agentx-harness,第三方声明已列出。
- 许可证为 Apache 2.0。
HotRepo 点评
FlashStates 在 2026-11-10 进入 HotRepo 新项目榜的 Python 列表,自 2026-11-09 创建起约 23 小时内新增 100 Star 和 3 Fork。只有一次快照,无法判断增长是否持续;但 README 给出的数字很具体:在 GLM-5.3-Flash、48 个并发会话下,解码吞吐最高达 vLLM 的 3.02 倍、预填充吞吐 3.14 倍,请求未缓存 prompt token 中位数减少 96%,p90 首 token 时间降低 88%。这些结论依赖两张 B200 和特定回放配置,描述的是基准条件,而不是普遍加速。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。