AIHOT · AI 动态聚合· noreply@aihot.news (LMSYS Blog)·· 1 天前AI 评分70
SGLang 披露并修复 PD 分离服务中的跨请求 KVCache 竞态问题
AI 导读
SGLang 团队与 Cloudflare 协调披露了 2026 年 8 月 27 日至 9 月 9 日影响 Workers AI 上 @cf/zai-org/glm-5.3 的跨请求 KVCache 暴露问题。
深度导读
SGLang 团队与 Cloudflare 协调披露了一起跨请求 KVCache 暴露问题。Cloudflare 于 2026 年 9 月 9 日通知 SGLang,其 Workers AI 上 @cf/zai-org/glm-5.3 在 2026 年 8 月 27 日至 9 月 9 日期间受影响,调查未发现其他 Workers AI 模型受影响。Cloudflare 的部署配置上下文长度为 1,048,576 tokens,但 prefill KV cache 池只能容纳 681,280 tokens,超过池容量的请求可能返回另一用户会话的内容。
问题发生在 PD 分离服务路径上。prefill 与 decode 由不同 worker 处理,KVCache 通过 Mooncake、NIXL、MORI 等传输引擎以单边 RDMA WRITE 异步写入 decode 预分配的槽位。请求在传输中途被中止时,已提交给网卡的写无法取消,而 decode 在终止时就把槽位归还分配器;若分配器在写落地前把槽位分给另一请求,被中止请求的 KVCache 就会写进他人缓存,且传输仍报告成功,没有任何异常或日志。长上下文会放大这一窗口,128K 至 1M token 的请求写入可持续数秒到数分钟。
修复核心是延迟释放。decode 侧中止时向所有 prefill rank 发送 ABORT,各 rank 丢弃软件队列中尚未发出的 chunk,并在已出队写入计数归零后回复 ABORT_ACK;decode 等到全部 ack 或超时(默认 30 秒)后才释放槽位,且不把这类槽位插入 radix tree。相关 PR 包括 #27372、#35049、#35360、#37454、#41023,v0.5.21 起对 Mooncake 和 NIXL 默认开启,MORI 与带 generation tag 的 ack 需 v0.5.22。
配套改动还包括:准入修复 #38935 让被拒请求在进入分离交接前就返回错误;#43719 规定 Mooncake 发送失败时不得回复 drain ack;可选 PD 校验和 #39500 默认关闭,开启后对传输的 KVCache 做 Adler-32 校验;#41128 提供 decode_deferred_kv_release_total 指标用于观察释放结果。性能方面,2×H100 上 21 次测试的吞吐差异均在 ±2% 以内,95% 置信区间均跨零。
影响范围限于启用 PD 分离并使用跨引擎 KVCache 传输后端的部署,单实例部署不受该竞态影响。默认配置从 v0.4.x 起受影响,直至 v0.5.21(MORI 为 v0.5.22)。运维建议升级到 v0.5.21 及以上,使用会成对取消请求的 router,并在上线后观察释放指标;若释放大量落到超时,说明 ack 路径需要排查。
来源:AIHOT · AI 动态聚合 · aihot.news