
SGLang 与 vLLM 的五个窗口内提交,分别把 speculative tail、graph state、hybrid cache 能力、chunked attention 窗口和 failed-load verdict 变成可测试的边界。
4a5d7d3c,标题是「[DSV4] Fix silent KV corruption when speculative draft tokens > 4」。补丁针对 DeepSeek V4 的 compress-state ring:旧的 mtp_pad 把 draft token 的保留数量固定封顶为 4,verify batch 的 draft 数更大时,写入计划可能少写 committed tail,下一次 compression 读取到旧的 ring slot。34mtp_pad 改成由 ring_size 和 window_size 推导:ring_size - window_size + 2,并把同一规则暴露为 get_compress_state_write_pad()。配置阶段新增 _assert_ring_serves_draft_tokens(),当 max_speculative_num_draft_tokens 超过对应 ring 的可承载范围时直接拒绝启动。提交新增的单测给出局部边界:speculative c4 ring size 为 16,可服务的最大 draft 数为 10;c128 ring size 为 256,最大 draft 数为 130。它们是 ring 容量与正确性测试数字,不是性能数字。3test_deepseek_v4_compress_plan_draft_pad.py 与 test_dsv4_compress_write_pad.py:先比较 CPU host loop 与 GPU plan_compress_prefill_kernel0 产出的写入集合,再分别覆盖 c4、c128 和非 speculative ring。超过 ring capacity 时,测试仍会验证 planner 会 under-write;真正的防线是配置阶段的上限检查。提交没有给出端到端速度、显存或质量变化。fc40684b,标题是「[srt] Fix sconv state memory corruption on specdec」。改动涉及 Inkling sconv backend、prefill CUDA graph runner 和 runner buffer。问题出在 speculative decoding 与 graph capture 的交界:warmup batch 没有 tracking metadata 时,如果 Python 层条件分支让 track scatter 根本不发射,捕获图和真正有 metadata 的 replay 就不是同一条执行路径;旧 batch 的 tracking 数组还可能残留到下一个 batch。56mask、indices 和 seqlens buffer。graph path 即使没有 metadata,也会用这些全零 buffer 发射 scatter;非 graph path 则把 track_conv_indices 置为 None。populate_from_forward_batch() 还会清空当前 batch 缺失字段以及 bs 之后的尾部区域,避免较大 batch 的旧状态污染较小 batch。与此同时,_is_mamba_track_enabled() 不再用「必须是非 speculative」作为前提,因此 sconv track 的状态路径可以进入 specdec。5indices、mask、seqlens 的尾部被清零,并分别跑 speculative 与非 speculative 路径。这组 commit + 测试证据能支持「状态不会沿用旧 batch」这一局部判断,不能支持 CUDA graph 的延迟收益或 sconv 的吞吐提升。d6941300,标题是「[BugFix] Scope divergent hybrid cache hits to capable connectors」。它处理的是混合 attention cache:当 full-attention 组和 Mamba 组的本地命中边界不一致时,外部 KV connector 只有在能够恢复缺失 recurrent state 的情况下,才可以使用 divergent lookup。旧路径只要存在 connector 就尝试这条查找,能力边界没有写进接口。78supports_divergent_local_hybrid_hits 默认返回 False。普通 connector 走 get_computed_blocks(),只有能力为真的 connector 才走 get_computed_blocks_for_connector();不支持能力的路径把 hit_diverged 固定为 False。NixlBaseConnector 明确返回 True,MultiConnector 则采用保守的 all-of 规则:所有子 connector 都支持时,整体才支持。7MultiConnector 不会把局部能力误报成整体能力。新增测试证明的是 lookup policy 与 state boundary,不是 prefix-cache 命中率,也不是外部 KV 的端到端收益。eb24bc3,标题是「[Bugfix][KV Offload] Handle chunked local attention in offloading scheduler」。offloading scheduler 之前只处理 SlidingWindowSpec 等类型;ChunkedLocalAttentionSpec 会落到错误的类型假设,触发 FullAttentionSpec 断言,导致使用 chunked local attention 的配置在启动时失败。910get_sliding_window_size_in_chunks() 中增加 ChunkedLocalAttentionSpec 分支,用 cdiv(attention_chunk_size, tokens_per_chunk) 计算窗口,并断言 attention_chunk_size > 0。新增测试用 attention_chunk_size=8192 验证 tokens_per_chunk=1024 时窗口为 8,用 tokens_per_chunk=3000 验证不能整除时向上取整为 3。这里的 8 和 3 是调度窗口的局部正确性,不是 offload 速度或容量提升。9FullAttentionSpec 断言;如果 workload 的 chunk 尺寸不能整除 tokens_per_chunk,要特别检查向上取整是否让可达尾部被完整覆盖。提交没有测量实际模型的 offload 读写吞吐。1b0ce31f,标题是「[KV Offload] Fix failed-load livelock by marking the lookup verdict as a miss」。在 tiering 路径中,一个 block 先被 lookup 判为 HIT,随后 promotion/load 失败;如果这个 verdict 仍保持为 HIT,同一请求的调度器会重复发起已经失败的 promotion。1112mark_miss(),将缓存 verdict 设为 False,且不重新 probe。批量 load 会记录 num_succeeded:已经成功加载的前缀 block 保留为 HIT,失败 block 及其后续部分标为 MISS。底层 I/O 还把三种情况分开:可证明的 short read 说明文件确实损坏,可以删除;open/read 错误属于瞬态或歧义失败,保留文件;完整读成功后的 close 错误不让 load 失败。11ELOOP 模拟 open 失败,确认文件仍然存在;最后在批量 load 中只破坏最后一个 block,验证前面的 successful_keys 仍为 HIT、失败尾部为 MISS。obj tier 也有对应测试,防止失败 promotion 继续返回旧 HIT。这个提交证明的是失败后的状态收尾,不是存储层在所有故障下都能自动恢复。| 提交 | 直接证据 | 先验证什么 | 当前不能确认 |
|---|---|---|---|
SGLang DSV4 4a5d7d3c | commit patch + CPU/GPU planner、c4/c128 单测 | draft tail 是否完整写入;超过 ring capacity 是否提前拒绝 | speculative decoding 吞吐、显存或质量收益 |
SGLang sconv fc40684b | commit patch + graph/buffer 代码变更 | 无 metadata 的 graph capture 是否仍执行 scatter;旧 batch 尾部是否清零 | CUDA graph 延迟、sconv 吞吐 |
vLLM hybrid cache d6941300 | commit patch + scheduler、connector、multi-connector 测试 | capability gate 和 all-of 合并是否正确 | prefix-cache 命中率、外部 KV 传输收益 |
vLLM chunked attention eb24bc3 | commit patch + scheduler 单测 | chunk window 是否按 attention_chunk_size 向上取整 | offload 读写速度、实际显存节省 |
vLLM failed-load 1b0ce31f | commit patch + Python/C、FS/obj tier 测试 | 失败后是否 mark miss;partial success 与损坏/瞬态错误是否分开 | 存储故障恢复率、线上尾延迟 |
api.github.com
api.github.com
github.com
api.github.com
github.com
api.github.com
github.com
api.github.com
github.com
api.github.com
github.com
api.github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.