[Bug]: KV block corruption in base scheduler, Non-deterministic output at temperature=0 without prefix caching #39146 漏洞概述 在 vLLM 的 base scheduler 中发现了一个 KV 块损坏的 bug。当使用 但未进行 fuzz 测试时,在 且无 prefix caching 的情况下,相同的 prompt 会产生完全不同的输出序列。该问题在并发请求下尤为明显,可能导致非确定性输出。 影响范围 触发条件: ,无 prefix caching,并发请求。 影响:相同的输入可能产生不同的输出,影响模型的稳定性和可靠性。 并发请求:在 4-5 个并发请求下即可复现,任何生产部署都可能受到影响。 修复方案 1. TOCTOU 修复:PR #37164 解决了 中的 TOCTOU 竞争条件,但尚未合并。 2. 独立部分: - 无需 : 在 APC 下不会被调用,因此不受影响。 - 无需共享 prefix:所有请求的 prompt 完全唯一,无共享缓存内容。 复现步骤 1. 启动 vLLM: 2. 运行脚本: 相关发现 Primary finding — finding_00450 (cleanest):5 个请求,无共享状态,无取消操作。 Second, finding_01410, same as the above :):21 个并发请求,混合大小,块分配顺序可能是触发因素。 Related finding — finding_00030 (cancel path):5 个请求中途取消,5 次重试,可能涉及相同问题。 隔离测试 Speculative decoding 不是原因:重新运行每个 trace 以完全移除 spec 引擎,结果一致。 假设 V1 scheduler 的块分配器:不通过哈希表跟踪块状态,可能导致块重用问题。 块分配顺序:不同请求的块分配顺序变化,导致输出不同。 相关文件 提交前检查 确保已搜索相关问题,并查看文档页面底部的常见问题解答。