
SDCGuard 工具可检查 vLLM 每次请求的 KV 校验覆盖范围
来源标题:Show HN: SDCGuard – Inspect vLLM KV-checksum coverage per request
开发者发布 SDCGuard,用于展示推理服务器自身完整性校验对每次请求的实际覆盖范围。他在 H100 上复现 vLLM bug #61229:8 次未修复运行均返回错误答案且被该工具标记,回移修复 #62065 后 5 次重放全部正确。测试尚未合并的 KV checksum PR #62211 时,153 个请求全部通过校验,但仅 9 个请求的完整 prompt 被比对。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
推理服务器可能返回一个 HTTP 200,却给出错误答案。sdcguard 展示服务器自身的完整性检查对每个请求覆盖了哪些内容,让你在发布引擎升级之前就能看清。
我在 H100 上复现了 vLLM bug #61229。decode 服务器读取了 prefill 服务器已经释放并重新使用的 KV 块,我用延迟强行制造了那个时序。要求重复秘密单词 PLUM 时,有一次运行返回了 "M. Repeat the secret word...",状态码是 200。所有 8 次未修复的运行都返回了错误结果,sdcguard 在每一次中都标记出了陈旧读取。将提议的修复(#62065)backport 后,所有 5 次重放都正确。
保存的结果。
然后我测试了 vLLM 提议的 KV checksum(#62211,尚未合并)。在一个请求共享大部分 prompt 的测试中,checksum 在全部 153 个请求上都通过了,但只有 9 个请求的整个 prompt 被比较过。其余请求复用了缓存,而该缓存只在首次到达时被检查过一次。这是设计使然,SGLang 也是如此。但这意味着通过并不能告诉你 prompt 有多少被检查了。我在该 PR 的两个构建上得到了相同结果,并把数字发在了那里。
git clone https://github.com/hari-kancharla/sdcguard cd sdcguard python3 -m venv .venv . .venv/bin/activate pip install --no-deps . sdcguard gate tests/data/checksum_owner_3a2ad847 --require checksum
这会在你的机器上重放 10 月 30 日的 H100 运行。不需要 GPU,只需要 Python 3.10 或更新版本。
HOLD | required: checksum selected recorded client requests only; no deployment or isolation guarantee 9 / 153 selected requests passed ... sgc-3a2ad847b9af4c76ae55aee4111c0258-0-1-35-d | HOLD | cached prefix not covered by checksum; checksum:cached prefix not covered by checksum Prompt tokens: 1451; transferred tokens checked: 27; decode cache reused unchecked: 1424; prefill cache reused: 1424
HOLD 时退出码为 2,通过时为 0。另外两个命令可以重放已保存的运行:
flowchart LR P[Prefill server] -->|"transfer, compared"| D[Decode server] K[(Decode prefix cache)] -->|"reused, not compared"| D D -.->|"checksum records"| G[sdcguard gate] Loading
一个 vLLM 插件会记录每次 checksum 调用以及它比较了哪些 token。sdcguard gate 将这些记录离线匹配到客户端请求,并且只有在请求的整个 prompt 都被比较过时才判定通过。完整方法、记录设置和限制见 docs/CHECKSUM_GATE.md。
目前它支持一种 vLLM 配置:checksum PR 的两个固定 commit,prefill 和 decode 在同一块 H100 上通过 NIXL 运行,使用 Qwen3-0.6B。记录新的运行仍然需要手动准备好该配置。接下来是故障注入,然后是自助配置,再之后是 SGLang 和 CI 门禁。
sdcguard 最初是一个 GPU 数学检查器。在租用的 H200 上通过 NVIDIA MPS 分区,它捕捉到了已知 cuBLAS bug 导致的错误结果,而 NVIDIA DCGM 和 gpu-burn 都通过了,因为它们的测试从未运行到出错的代码路径(head-to-head)。那个版本在 PyPI 上,安装命令为 pip install sdcguard(0.4.0)。
MIT 许可证。作者 Hari Krishna Kancharla。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。