Idleness is Relative: Exploiting Tool-Call Idle Windows for Offloading in Agentic Systems with MORI

agent 2606.00866 — Cross-paper Synthesis

L3 Synthesis · MORI (2606.00866) — 相对空闲度驱动的 agentic KV-cache 垂直分层 #

1. 相关论文 #

MORI [2606.00866] 处理一个具体问题:agentic program 在 tool-call 间隙让 KV cache 空占 HBM,MORI 用连续相对空闲度 $\iota$ 把 program 排成一条谱线,最忙的留 GPU、最闲的下沉 CPU DRAM,并做双层准入。要把它放进 KB 图里,必须先做一次关键的三方消歧,再沿三条正交轴定位。

1.0 ⚠ 名称冲突消歧(本篇最重要的图定位前提) #

KB 里有三个都叫 "MORI / mori" 的实体,它们除了名字之外互不相关,必须显式区分,否则整条 evidence chain 会被污染:

名称KB 实体是什么与本篇关系
paper-MORI2606.00866(本篇)"Memory Offloader with Relative Idleness" —— 一个 agent-serving KV 垂直分层 offloader,主动把 KV 在 GPU HBM ↔ CPU DRAM 之间 promote/demote [2606.00866]
ROCm-moriROCm-mori(code)AMD 的 RDMA / GPU 通信库(IBGDA、MoE dispatch/combine、MORI-IO/EP/SHMEM)[ROCm-mori],解决的是 GPU 间通信而非 KV 分层 [ROCm-mori]纯名称碰撞,技术无交集
repo mori-schedulerZhaiFeiyue-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 把这个正交性讲清楚。

1.1 正交轴一:垂直分层 vs 水平路由(本篇 vs repo mori-scheduler) #

这是本篇在 KB 图里最容易被误接的一条边,必须讲透:

因此两者是同一栈的互补层,而非竞争者:一个真实部署完全可以用 repo mori-scheduler 做跨副本水平放置,同时在每个副本内跑 paper-MORI 做垂直 offload。二者攻击的浪费不同——router 消除的是"同前缀请求散落到不同 worker 导致的重复 prefill"[ZhaiFeiyue-mori-scheduler],MORI 消除的是"空闲 program 的 KV 空占 HBM"[2606.00866]

1.2 正交轴二:粒度对应 —— program_id ≈ session_id #

一个精确的跨系统对应关系: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 命名空间,是二者可组合的工程前提。

1.3 直接血统:program-aware 调度谱系 #

1.4 offloading / KV-tiering 血统(垂直层的技术前身) #

MORI 相对这条线的定位:这些系统都在回答"attention 怎么在 CPU 上高效算"或"KV 怎么搬",都是 phase-blind + 单副本;MORI 回答的是该把哪个 program 的 KV 放哪一层——把 phase/idleness 信号引入 tier assignment,并加了双层准入 + 多副本亲和。

1.5 同赛道不同刀法:利用 idle window 的另一种范式(speculation) #

这两者与 MORI 的世界观相反:MORI 接受空闲窗口并用它 offload(省内存);speculation 派试图填满/消灭空闲窗口(省时间)。互不冲突,但暗含张力(见 §3 攻击 1)。

1.6 相邻上下文 #


2. 本篇 vs 相关论文的 delta #

新颖点(MORI 独有):

  1. 把空闲度从"二值/阈值"重构为"连续、相对"的排名。 这是本质 delta [2606.00866]。ThunderAgent 用二值 phase + 衰减权重 $f(t)$ [2602.13692],Continuum 用 per-request TTL 定时器 [2511.02230],Autellix 用累计 attained service [2502.13965]——三者的决策量都是绝对/离散的。MORI 的连续 $\iota = T_{acting}/(T_{reasoning}+T_{acting})$(滑窗 $k{=}5$)让 GPU:CPU 分界线自动滑到任意硬件容量比(1:1.6 vs 1:3.1 零重调)[2606.00866]。这正是所有 CPU-offloading 前身(NEO/FastDecode/APEX)所缺的:它们把 KV 怎么搬做到极致,却对该搬谁 phase-blind [2411.01142]
    1. 垂直分层(本篇)而非水平路由(repo mori-scheduler),且二者可叠加。MORI 主动驱动 GPU↔CPU 升降级 [2606.00866];repo router 把 KV 层级当只读信号做跨副本打分 [ZhaiFeiyue-mori-scheduler]。这不是同一维度的两种方案,而是同一栈的两层——delta 在于 MORI 把"层内该 offload 谁"补上了 router 不碰的那块。
      1. 单一 sort-and-fill 同时充当两层 admission control。 "从最忙一端填满每个 tier"这个动作本身就是 GPU 和 CPU 双层准入 [2606.00866]。相比之下 NEO/FastDecode 根本没有 CPU 侧准入(过度 offload 会让 idle program 在 DRAM 里互相驱逐)[2411.01142];Continuum 只管 GPU 侧(TTL 是显存上界)[2511.02230]
        1. 多 replica affinity 覆盖到 CPU tier。 MORI 追踪 program KV 在 GPU CPU 的驻留并路由回原 replica,把 churn 从 14–15% 降到 0.3–2.9% [2606.00866]。这一点与 repo mori-scheduler 的 session 亲和路由 [ZhaiFeiyue-mori-scheduler]同一亲和思想的不同层实现(router 的亲和只到 GPU 前缀命中;MORI 的亲和延伸到 DRAM 驻留)。Autellix 的 locality-aware 路由也只到 primary engine 级、multi-engine 收益仅 ~1.5× [2502.13965]
        2. 增量点(站在前作肩上):

          1. coordinated 两层放置 vs 前作的单层/uncoordinated。 MORI 的直接基线 TA+O 正是"scheduler 管 GPU + HiCache 独立 LRU 管 CPU"的非协调版本;MORI 证明协调 CPU tier 能把额外 DRAM 真正用起来(2× CPU 让 MORI TTFT 38→33 s 而 TA+O 56→58 s 不动)[2606.00866]。CLO 从另一端佐证:CPU 侧 offload 管理开销可压到近零 [2511.14510]——MORI 的协调只要不引入重 CPU 开销就成立。
          2. 报告结果(可作本篇自述引用): 80 并发 program 时 20–71% 更高输出吞吐、18–43% 更低 TTFT(vs 最强 offloading 基线 TA+O);DP=3 维持 99%+ GPU 利用率,而 phase-oblivious 调度器仅 59–76% [2606.00866]

            矛盾/张力点:

            1. "空闲窗口是资源"vs"空闲窗口是敌人"。 MORI 的整个前提是 idle window 值得利用来 offload [2606.00866];IdleSpec 用它做推测 planning [2605.22154]、PASTE 用它做投机工具执行 [2603.18897]。三者不直接冲突,但若 speculation 普遍缩短长 idle 窗口,MORI 可 offload 的窗口就变少(详见 §3)。

            2. 3. 可攻击面 #

              攻击 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 协同时的驻留状态共享协议


              4. 生态位 #

              范式定位:调度器从"二值 pin"到"连续相对排名"的第三代,且开辟了一条独立的垂直分层轴。

              • 第一代:program-aware 但只管 GPU 队列优先级(Autellix PLAS/ATLAS)[2502.13965]
              • 第二代:引入 KV 保留 + CPU offloading,但决策是绝对/二值量(Continuum TTL [2511.02230];ThunderAgent 二值 phase + $f(t)$ [2602.13692]);同期 CPU-offloading 工程线(NEO/FastDecode/APEX)把怎么搬做深但 phase-blind [2506.03296]
              • 第三代 = MORI:连续相对排名统一放置决策,分界线随硬件自适应,两层准入折叠进 sort-and-fill [2606.00866]

              独占生态位一:硬件容量比自适应。 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 落后于最直接的对手。


              5. 未探索方向 #

              方向 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 的应用显式控制两极融合成一个可编程的分层接口。