读 SGLang direct linker:LOAD 之后,为什么还需要 COMMIT?
沿着 pool、checkpoint key 与 COW 源,追踪 FULL + SWA + MAMBA 的恢复一致性
以 SGLang #41343 的固定 head 为阅读基线:KV 页恢复只是第一步,recurrent checkpoint 还必须对应相同边界,并在 COMMIT 阶段成为请求的正确 COW 状态源。
1. 先划清基础集成与新增范围
SGLang #37381 于 9 月 3 日合并,将 external linker 接入 Unified Radix Cache。树负责分配、插入、组件一致性和节点存活,后端提供共享全局内存访问路径。
#41343 为没有中间 host tier 的 direct L3 Mooncake linker 增加 FULL + SWA + MAMBA 组合。本文以来源链接中的固定 head 为基线;截至 9 月 30 日 06:46 UTC,它仍 open、未合并。基础集成已合并,不能证明这一组合已进入正式版本。
Mamba 在这里是组件与状态槽抽象,作者测试的是缩小的 Inkling checkpoint,不能推广为所有 KDA、GDN、Mamba 均已验证。本文聚焦恢复一致性,通用框架另见关联笔记。
2. 页命中必须收敛到 checkpoint 边界
pool assembler 为三类 pool 建立 DevicePoolGroup,但索引语义不同。FULL/SWA 按 token page 组织,每层 K、V 放入同一页对象;Mamba 按 state slot 组织,每槽一行、page_size=1,包含 temporal 与 conv buffers。
direct transfer 要求行内存连续,启动时拒绝 scaled KV、unified memory、int8 Mamba checkpoint、PLE 等状态。注册 pool 不等于覆盖任意模型。
OFFLOAD 只用 node 最后一页的 hash 为 Mamba checkpoint 建 key;LOOKUP/LOAD 也只查询候选边界最后一个 key,采用 TRAILING_PAGES。前 N 页 KV 齐全,不意味着任意 N 可恢复。新增单测让 KV/SWA 每页齐全,但只在完整前缀尾部保存 state:较短前缀仍不能报可恢复命中。
支持横向滑动查看
3. COMMIT 接上正确的请求状态
LOAD 先分配 Mamba slot。失败会尝试 eviction,仍失败则返回 None,让 wrapper 放弃恢复并重算。数据进入 slot 后,还要确认下一次 forward 从哪里继续:KV 恢复到长度 L,却沿用较短前缀的 recurrent state,会破坏状态对应关系。
COMMIT 的 _cow_node_state_into_req 将 canonical cache node 的 state 设为请求的 COW 源,并保留请求自己的可写 slot。这里设置源指针和标记,并非立即 GPU copy。PR 描述说明 forward 的 COW 会等待对应 load 完成;本文未继续审计既有等待链路。
若 canonical node 已有 Mamba state,多余 slot 由 Mamba 组件释放,避免 wrapper 提前释放后组件继续引用。wrapper 还跳过 Mamba 的 adopted-range page slicing,保留 KV/SWA 的页处理。状态槽不能套用 token 页的裁剪规则。
4. 正确性证据与性能问题分开看
新增 E2E 使用 Inkling 的 test revision、确定性推理和 Mooncake,page/track interval 为 128。两轮之间 flush device tree,第二轮检查外存恢复 token 并比较 logprob KL,阈值 1e-9。测试的 host 统计字段在此报告 external restore,不表示路径增加了 host-cache tier。
以下均为 PR 作者报告,本站未复现:1×H200 上 6/6 请求恢复 1152 tokens,平均 KL=0;故意跳过 COMMIT 中的 Mamba load 后,平均 KL=5.6e-4。负对照支持测试能发现状态错配,但不是吞吐或 TTFT 提升证据。
作者说明整批 Mamba load 完成后才能 forward,尚无 per-layer overlap;已外存 node 后来因分支新增 checkpoint,不会再次 offload,被归为 hit loss。下一步应先检查边界前后、分支与分配压力下的正确性,再测 load 等待、forward 开始和 TTFT。分支热点优先留 checkpoint 仍是假设,可能被写入放大或 load barrier 抵消。
主要结论
- 1.FULL/SWA 页存在,不能替代同一边界的 recurrent checkpoint
- 2.LOAD 恢复数据,COMMIT 建立请求继续执行所需的 COW 状态关系
- 3.作者的正确性报告不能转述为本站复现,也不能替代性能证据
待验证问题
- #41343 最终合并时的实现与 release/tag 包含情况是否变化?
- 更大模型、并发分支与 allocation pressure 下是否补齐正确性证据?
- 新增 checkpoint 的再次 offload 与 load barrier 能否改善,并提供完整性能对照?
来源与核验边界
- [1] SGLang #41343:hybrid direct-linker 实现与作者报告
- [2] SGLang #37381:external linker 基础集成
- [3] 固定 head:linker pool assembler
- [4] 固定 head:Mamba checkpoint 与 COMMIT
- [5] 固定 head:unified cache linker wrapper
- [6] 固定 head:边界与提交单元测试
- [7] 固定 head:Inkling KL E2E 测试
本文由学习与讨论记录经 AI 辅助整理,基于 2026-09-30 06:46 UTC 已核验的 PR 元数据、代码与测试结构。GPU 测试未独立运行,性能收益尚无对照证据;所有实测数值均明确归于 PR 作者,后续实验为设想。