
本期拆解 vLLM 与 SGLang 在 MLA chunk 调度、disaggregated radix cache、paged SWA 物理页预算和 packed KV 清零范围上的四个窗口内修补,并给出复现入口与未验证边界。
b38e111d 中把 MLA(Multi-head Latent Attention)chunked context 的处理,从按统一 chunk 切分改为按 request 组织的 ContextChunk / _ContextChunkPlan。这意味着一个 batch 里,不同请求的 context 片段可以被单独规划、累积和重组;无 context 的 prefill 则通过 empty_token_slices 跳过,而不是继续依赖 mask_empty_context。提交时间是 8 月 7 日 00:45,改动涉及 mla_attention.py、sparse MLA、prefill backend 以及 Kimi K3 的 MLA 路径。1reorg_kvcache 从依赖 chunk_size/chunk_idx 改成使用每个 chunk 的 local_starts,并把 chunked-prefill workspace 的下限与 cache block size 对齐。新增测试覆盖了「每个 context row 只收集一次」「continuation 只能发生在 chunk 的第一个 request」「tail splitting 尽量减少 chunk 数」「无 context prefill 被跳过」以及 DCP 下的 local chunk 预算。测试文件同时加入了 DeepSeek-R1、TP=16、auto/fp8 KV cache、workspace size=1024 的后端一致性场景,并以 SDPA reference 做对照。2auto 与 fp8 两种 KV cache dtype,运行新的 chunked-context correctness 测试,观察 backend 输出是否仍与 SDPA reference 一致。05c7ebf 中让 staging buffer 支持 radix cache,并处理 prefill TP 与 decode TP 不一致时的 KV 分片传输和 scatter。prefill 侧新增 disagg_decode_prefix_len 与 early_send_prefix_end,首次 batch 会快照 early-send 的 prefix 边界;非最后 chunk 则按 staging grid 对齐并拆成多个 segment。decode 侧改用绝对 token offset:prefix_tokens + page_start * page_size,收齐 writer 后再触发 scatter。提交时间是 8 月 6 日 23:59。3Success 之后若仍有 outstanding chunk,room 继续保持 Transferring;只有 outstanding 归零、事件完成且 room 已 concluded 才 teardown。若 decode prefix 不是 page 对齐,代码会把 room 标记为 failed;如果 all-ranks 已成功但 chunk 迟迟不到,则受 SGLANG_DISAGGREGATION_WAITING_TIMEOUT 约束。新增集成测试使用 prefill TP=4、decode TP=2、staging+radix cache、chunked-prefill-size=256 和 GSM8K few-shot,断言得分大于 0.60。这个分数是该测试的通过门槛,不是独立性能结论。4af7c62e 中修正 paged SWA(sliding-window attention)请求从 retracted queue 恢复时的预算计算。_prealloc_required_tokens 现在读取 allocator 的 page_size,在 page_size > 1 时把 full pool 和 SWA pool 的需求都向上对齐;SWA 的扣减则直接使用对齐后的需求,因为该 pool 没有 radix-cache eviction。提交时间是 8 月 7 日 07:32。5page_size 设为 128、fill_len 设为 574、可用物理预算设为 18 页,并模拟 4 个被 retracted 的请求;结果只能恢复 3 个,剩余请求留在队列,_pre_alloc 被调用 3 次,剩余预算为 3 页。这个例子把「逻辑 token 数」和「allocator 实际按整页收取的物理预算」分开了。6page_size=1、128 和你线上实际值。d6af803 修复 packed KV block 的 zeroing stride。此前清零偏移按 block_id * page_size 推算;现在把「物理 block 起点」与「本次清零的 page span」拆开,kernel 使用独立的 seg_block_strides_ptr。KVBlockZeroer 也保存每个 segment 的地址、block stride 和 page size,从而在多 KV cache group 或 packed segment 中只清零目标 block 的对应 page。提交时间是 8 月 7 日 04:49。7test_packed_segment_zeros_only_its_last_block_page,验证 packed KV segment 按 block stride 定位时,不会误清零相邻内存。实现同时增加了对 block size、kernel block size、地址和页大小 4 字节对齐的断言;测试路径需要 CUDA,Mamba 层则跳过。8| 进展 | 解决的状态边界 | 证据与可复现入口 | 仍未验证 |
|---|---|---|---|
| vLLM MLA chunked context | request 级 chunk 规划、空 context 和 KV 重组 | commit + chunk planner / backend correctness 测试;见 1 | 端到端吞吐、其他模型与并行配置 |
| SGLang staging + radix cache | grid segment、绝对 scatter offset、outstanding chunk 完成条件 | commit + TP4/TP2 集成测试;见 3 | 网络抖动、更多 TP 组合、超时策略的线上代价 |
| SGLang paged SWA | 逻辑 token 到物理页预算的对齐 | commit + page_size=128 单测;见 5 | 真实 allocator 压力、吞吐与恢复延迟 |
| vLLM packed KV zeroing | segment stride 与 page span 解耦,避免越界清零 | commit + CUDA 单测;见 7 | 不同 backend / Mamba 路径、kernel 性能 |
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.