MORI [2606.00866] 处理一个具体问题:agentic program 在 tool-call 间隙让 KV cache 空占 HBM,MORI 用连续相对空闲度 $\iota$ 把 program 排成一条谱线,最忙的留 GPU、最闲的下沉 CPU DRAM,并做双层准入。要把它放进 KB 图里,必须先做一次关键的三方消歧,再沿三条正交轴定位。
KB 里有三个都叫 "MORI / mori" 的实体,它们除了名字之外互不相关,必须显式区分,否则整条 evidence chain 会被污染:
| 名称 | KB 实体 | 是什么 | 与本篇关系 |
|---|---|---|---|
| paper-MORI | 2606.00866(本篇) | "Memory Offloader with Relative Idleness" —— 一个 agent-serving KV 垂直分层 offloader,主动把 KV 在 GPU HBM ↔ CPU DRAM 之间 promote/demote [2606.00866] | — |
| ROCm-mori | ROCm-mori(code) | AMD 的 RDMA / GPU 通信库(IBGDA、MoE dispatch/combine、MORI-IO/EP/SHMEM)[ROCm-mori],解决的是 GPU 间通信而非 KV 分层 [ROCm-mori] | 纯名称碰撞,技术无交集 |
| repo mori-scheduler | ZhaiFeiyue-mori-scheduler(code) | AMD MI355X 上的前缀缓存感知多副本推理 ROUTER(ByteRadixTree + UMBP block-hash + PD 分离)[ZhaiFeiyue-mori-scheduler] | 同名但正交(详见 §1.1) |
结论:paper-MORI 与 ROCm-mori 只共享名字;与 repo mori-scheduler 共享名字且同处 agent-serving 栈,但作用在不同层——不是竞争关系,而是可叠加的互补层。下面 §1.1 把这个正交性讲清楚。
这是本篇在 KB 图里最容易被误接的一条边,必须讲透:
因此两者是同一栈的互补层,而非竞争者:一个真实部署完全可以用 repo mori-scheduler 做跨副本水平放置,同时在每个副本内跑 paper-MORI 做垂直 offload。二者攻击的浪费不同——router 消除的是"同前缀请求散落到不同 worker 导致的重复 prefill"[ZhaiFeiyue-mori-scheduler],MORI 消除的是"空闲 program 的 KV 空占 HBM"[2606.00866]。
一个精确的跨系统对应关系:paper-MORI 的调度单元 program(客户端只需附一个 program_id,subagent 用独立 id)[2606.00866] 与 repo mori-scheduler 的 session_id(从 x-mori-session-id header 提取)[ZhaiFeiyue-mori-scheduler] 是同一粒度——都指"一个跨越多次 LLM call 的 agent 会话"。这与 ThunderAgent 的 program_id 抽象同源 [2602.13692]。区别在于挂载在这个 id 上的状态:paper-MORI 给它挂了时间序列状态(滑窗空闲度),router 只把它当路由亲和 key。这条对应关系让"router 的 session 亲和"与"MORI 的 program 空闲排名"可以共用同一个 id 命名空间,是二者可组合的工程前提。
MORI 相对这条线的定位:这些系统都在回答"attention 怎么在 CPU 上高效算"或"KV 怎么搬",都是 phase-blind + 单副本;MORI 回答的是该把哪个 program 的 KV 放哪一层——把 phase/idleness 信号引入 tier assignment,并加了双层准入 + 多副本亲和。
这两者与 MORI 的世界观相反:MORI 接受空闲窗口并用它 offload(省内存);speculation 派试图填满/消灭空闲窗口(省时间)。互不冲突,但暗含张力(见 §3 攻击 1)。
新颖点(MORI 独有):
增量点(站在前作肩上):
报告结果(可作本篇自述引用): 80 并发 program 时 20–71% 更高输出吞吐、18–43% 更低 TTFT(vs 最强 offloading 基线 TA+O);DP=3 维持 99%+ GPU 利用率,而 phase-oblivious 调度器仅 59–76% [2606.00866]。
矛盾/张力点:
攻击 1 — "空闲窗口可利用"建立在工具不可被投机/加速的假设上。
MORI 论证短 tool call 的 offload 传输成本超过 gap 本身,只有长 idle 才值得 offload [2606.00866]。但 IdleSpec 表明 idle 期可并行做推测 planning [2605.22154],PASTE 表明 55% 的 edit→test、51% 的 search→fetch 等模式可提前投机执行 [2603.18897]。若投机执行普及并把长 idle 窗口普遍压缩,MORI 赖以 offload 的窗口收缩——尤其 human-input / subagent 这类"可提前调度"的窗口。MORI 未讨论与投机执行共存时空闲信号 $\iota$ 会如何被扭曲。
攻击 2 — offload 成本模型只算 PCIe,没算 host CPU 争用。
MORI 假设 CPU→GPU PCIe reload 便宜 [2606.00866]。但 NEO/FastDecode 的整条 insight 恰恰是 CPU 侧带宽与算力都是稀缺资源,offload 收益强正相关于 CPU 内存带宽 [2411.01142][2403.11421]。当同节点 CPU 正被 tool 执行或 CPU-attention 打满时,MORI 的 host 侧 memcpy 会与之争带宽。CLO 展示了"CPU-light"offload 是可能的(4 线程逼近 PCIe 峰值)[2511.14510]——反过来说,MORI 若不采用类似零拷贝路径,其 DRAM offload 的 host 开销在 CPU-bound workload 下可能吞掉净收益。
攻击 3 — "$\iota$ 是未来行为的可靠代理"缺形式化,且缺 competitive 刻度。
MORI 用"phase transition 稀疏 → 近期行为预测未来"为 windowed $\iota$ 辩护,但无形式化证明 [2606.00866]。对比之下,Autellix 明确量化了 non-clairvoyant 相对 clairvoyant SRPT 的固有 gap [2502.13965];SAGA 更进一步给出 WA-LRU 相对 Bélády 离线最优的 competitive ratio 1.31× [2605.00528]。MORI 的 $\iota$-ranking 放置相对"已知每个 tool 时长的 oracle 放置"的 competitive gap 完全没测——SAGA 已经示范了这个刻度怎么给,MORI 没有对应的可诊断标量。
攻击 4 — 5 秒 tick + k=5 窗口对短命程序反应太慢。
MORI 默认 5 s 控制 tick、k=5 循环窗口 [2606.00866]。Continuum 实测 tool call 中位仅 925 ms 且改进随 turn 数放大——per-turn 气泡是累积量 [2511.02230]。对一个只有 6–11 turn 的短 program,5 s tick 可能在其大半生命周期只调度 1–2 次。MORI 在 20 program 低并发下仅 +2%(546 vs 534)[2606.00866] 正是这个副作用的征兆——它承认低并发无优势,但没量化 tick 粒度对短程序尾延迟的伤害。
攻击 5 — 与 repo mori-scheduler 组合时的责任边界未定义。
若 MORI(垂直)与 repo router(水平)叠加,二者都会读/写 program 的驻留状态:MORI 主动 demote 一个 program 到 CPU 后,router 若把它当"cacheless"重新路由到别的副本,就会毁掉 MORI 刚做的 offload——这正是 MORI 论文里 TA+O 的 affinity-break 失败模式 [2606.00866] 在跨系统层面的重演。MORI 论文只在单系统内解决了这个(把 CPU 驻留纳入亲和),但没有定义与一个外部水平 router 协同时的驻留状态共享协议。
范式定位:调度器从"二值 pin"到"连续相对排名"的第三代,且开辟了一条独立的垂直分层轴。
独占生态位一:硬件容量比自适应。 MORI 是本簇里唯一把"GPU:CPU 容量比自适应"作为一等目标的系统——同代码服务 1:1.6 与 1:3.1 节点零重调 [2606.00866]。NEO/FastDecode/APEX/CLO 都假定固定拓扑或需 per-hardware profiling [2411.01142][2511.14510]。
独占生态位二:网关可测量性(值得单独记一笔的综合洞察)。 $\iota$ 只需每步 3 个时间戳即可在 proxy 端重建(forward-to-LLM=Reasoning 起点,stream-end=Acting 起点,next-request=Acting 终点)[2606.00866]。这意味着 MORI 的核心信号可以部署在现有引擎(如 SGLang)之前的网关层,无需侵入 engine——这与 KB 里的路由/网关系统天然对接:repo mori-scheduler 这类前缀感知 router 已经在 proxy 端维护 per-session 时序遥测(load telemetry、健康 EMA)[ZhaiFeiyue-mori-scheduler],加一个 $\iota$ 重建器几乎零边际成本。换言之,MORI 的贡献不仅是一个调度算法,还是一个可在网关落地的可观测信号。
工程可信度与短板。 MORI 建在 ThunderAgent + SGLang v0.5.10 之上,仅 ~3300+500 LoC,client 侧只需一个 program_id [2606.00866]——这个"最小侵入 + 单字段 API"路线与 ThunderAgent 的三改动接入 [2602.13692]、Continuum 的 vLLM 插件 [2511.02230] 同一采用哲学。但 MORI 代码未公开 [2606.00866],而 Continuum 已开源、Pie 已开源 (github.com/pie-project/pie) [2510.24051]——在可复现性上 MORI 落后于最直接的对手。
方向 1 — MORI(垂直)× repo mori-scheduler(水平)的两层协同栈。
最自然的组合:repo router 做跨副本 TTFT-argmin + session 亲和放置 [ZhaiFeiyue-mori-scheduler],MORI 在每副本内做 $\iota$-驱动的垂直 offload [2606.00866]。关键待解问题(正是 §3 攻击 5):需要一个共享驻留状态协议,让 router 知道某 program 的 KV 现在 pin 在哪个副本的 DRAM,避免把 MORI 刚 offload 的 program 当 cacheless 重路由。二者共用的 program_id ≈ session_id 命名空间 [2606.00866][ZhaiFeiyue-mori-scheduler] 是现成的接合键。
方向 2 — MORI × 投机执行的混合调度。
把 IdleSpec/PASTE 的投机信号 [2605.22154][2603.18897] 作为 MORI 的前瞻输入:投机器对"下一个 tool 是短还是长"的预测,可让 $\iota$ 从后验窗口平均升级为带前瞻的估计,缩短 §3 攻击 4 的反应延迟。反过来,MORI 的 tier 状态可告诉投机器"哪些 program 反正要 offload、不值得投机"——把内存决策与计算决策解耦调度。
方向 3 — CPU-light offload 路径移植。
把 CLO 的 head 粒度近似缓存 + GDRCopy 零拷贝传输 [2511.14510] 接进 MORI 的 CPU tier,直接消解 §3 攻击 2 的 host CPU 争用风险。MORI 决定该 offload 谁(policy),CLO 决定怎么低成本 offload(mechanism)——两者天然分工。
方向 4 — 分层放置的形式化 competitive 分析。
借 SAGA 的 Bélády-ratio 框架 [2605.00528] 与 Autellix 的 SRPT-gap 框架 [2502.13965],给 MORI 的 $\iota$-ranking 放置建立相对 clairvoyant oracle(已知每个 tool 时长)的 competitive ratio,填补 §3 攻击 3 的空白。这是整簇(MORI/Continuum/ThunderAgent/SAGA)都值得补的理论方向,其根本难度宜留待 L4/topic 处理。
方向 5 — 网关侧 $\iota$ 作为 programmable 信号。
把 §4 的"网关可测量性"推到极致:在 Pie 式 programmable serving [2510.24051] 中,把 $\iota$ 暴露为一个 inferlet 可读的一等信号,让应用自己决定"高 $\iota$ 时导出 KV / 低 $\iota$ 时 pin"——把 MORI 的基础设施自动排名与 Pie 的应用显式控制两极融合成一个可编程的分层接口。