OnePiece: A Large-Scale Distributed Inference System with RDMA for Complex AI-Generated Content (AIGC) Workflows

cluster 2601.20655
RDMAdistributed-inferenceAIGCmicroservicesring-buffervideo-generation

§1 TL;DR #

OnePiece 将 AIGC 多阶段推理流水线拆分为微服务,以 one-sided RDMA 传输中间结果,用 double-ring buffer 解决无 CPU 参与的 RDMA 死锁,配合 Node Manager 动态调度 GPU,在 Wan2.1 I2V 场景声称节约 16× GPU 资源。

§2 Q1 / Q2 / Q3 #

Q1 痛点 #

AIGC 工作流(如 Wan2.1 I2V)由多阶段异构模型(T5/CLIP → VAE Encode → Diffusion → VAE Decode)组成,单体部署面临三个问题:

  1. GPU 利用率低:各阶段计算/显存需求差异大,单体部署按最大阶段分配资源,轻负载阶段空转。
  2. 弹性差:静态 provisioning 在动态负载波动下无法自适应,导致排队或浪费。
  3. 显存浪费:中间张量和缓存占用 VRAM,跨阶段共享困难。
  4. 现有通信手段(NCCL)仅支持固定大小张量传输,占用 GPU 资源,且缺乏消息路由上下文,不适合异构微服务间通信。

    Q2 方法 #

    OnePiece 的核心设计:

    1. 微服务拆分:将 AIGC 流水线按阶段拆为独立 Workflow Instance,每个实例可独立伸缩,跨工作流共享公共阶段(如 VAE)。
    2. One-sided RDMA 通信:绕过 NCCL,直接用 RDMA WRITE 在主机内存间传递任意类型消息,零 GPU 占用、零 CPU 远端介入。
    3. Double-ring buffer:buffer region(变长数据)+ size region(定长元数据 + busy bit),CAS spinlock 保护 producer 互斥,timeout + busy bit 实现无 CPU 死锁恢复。
    4. Node Manager 动态调度:Paxos 选主保证 HA,持续监控各阶段 GPU 利用率,超阈值(85%)时从 idle pool 或低负载阶段调拨实例。
    5. 流水线吞吐匹配(Theorem 1):当 $T_X < T_Y$ 时,为慢阶段 $Y$ 配置 $M = \lceil K \cdot T_Y / T_X \rceil$ 个实例使两阶段输出速率对齐;Proxy 以 fast-reject 限流。
    6. 核心技术壁垒:在 one-sided RDMA 约束下(远端无 CPU 参与),为变长消息实现无死锁多 producer 单 consumer ring buffer。现有 ring buffer 方案要么假设定长 slot(不适配异构 AIGC 消息),要么依赖 CPU 做死锁检测(违背 RDMA zero-CPU 目标)。OnePiece 通过分离 size region + busy bit + 短超时重入 + checksum 校验,在仅 CAS 原子操作可用的条件下保证 liveness(Theorem 2),代价是允许极小概率单条数据损坏。

      Q3 结果 #

      • 声称 Wan2.1 I2V 场景 GPU 资源消耗降低 16×(与单体部署对比)。
      • 无正式实验章节:缺少延迟、吞吐量、消息丢失率等量化指标。
      • 结论处文字写作"16% reduction",与摘要/引言的"16× reduction"存在数值不一致(可能为笔误)。

      §3 架构 / 方法图 #

      flowchart TB subgraph Client["Client"] C[User Request] end NM["Node Manager\n(Paxos HA)"] subgraph WS["Workflow Set (RDMA Region)"] direction TB Proxy["Proxy\n(Fast-reject + UID)"] subgraph Pipeline["Workflow Instances"] direction LR S1["Stage 1: T5/CLIP\n(Individual Mode)"] S2["Stage 2: VAE Encode\n(Individual Mode)"] S3["Stage 3: Diffusion × M\n(Collaboration Mode)"] S4["Stage 4: VAE Decode\n(Individual Mode)"] end DB["Database\n(Memory-centric, TTL)"] end C -->|"query NM"| NM NM -->|"proxy addr"| C C -->|"submit"| Proxy Proxy -->|"RDMA ring buffer"| S1 S1 -->|"RDMA ring buffer"| S2 S2 -->|"RDMA ring buffer\n(round-robin to M instances)"| S3 S3 -->|"RDMA ring buffer"| S4 S4 -->|"RDMA"| DB DB -->|"result"| C NM <-->|"heartbeat +\nGPU util report"| Pipeline NM -->|"reschedule"| Pipeline

      数据路径:Client 查询 NM 获取 Proxy 地址 → Proxy 分配 UID 并 fast-reject 限流 → 各 Stage 通过 one-sided RDMA ring buffer 传递 Workflow Message(header + payload)→ 最终结果写入 memory-centric DB → Client 凭 UID 拉取。

      控制面:NM(Paxos 选主)持续收集 GPU 利用率,识别瓶颈阶段后从 idle pool 或低负载阶段调拨实例,通过 TaskManager 下发新路由。

      Ring Buffer 结构

      flowchart LR subgraph RB["Double-Ring Buffer (shared memory)"] direction TB Lock["Lock Region\n(CAS spinlock)"] Header["Header\n(head ptr, tail ptr)"] Buffer["Buffer Region\n(variable-length data)"] Size["Size Region\n(fixed slots: size + busy bit)"] end P1["Producer 1"] -->|"CAS lock → write data → write size+busy → update tail → unlock"| RB P2["Producer N"] -->|"CAS lock → ..."| RB RB -->|"read head → read data → clear busy → advance head"| Consumer["Consumer (RS)"]

      §4 作者证明 #

      符号表 #

      符号含义
      $T_X, T_Y$阶段 X/Y 的单请求执行时间
      $K$阶段 X 的并行 worker 数
      $M$阶段 Y 的实例数,$M = \lceil K \cdot T_Y / T_X \rceil$
      $P_b$buffer region 写指针
      $P_{size}$size region 写指针
      CASCompare-and-Swap 原子操作

      Theorem 1(吞吐匹配) #

      断言:当 $T_X < T_Y$,阶段 X 有 $K$ 个 worker,阶段 Y 有 $M = \lceil K \cdot T_Y / T_X \rceil$ 个实例时,两阶段稳态输出速率相等为 $K / T_X$。

      物理意义:这是一个流水线瓶颈平衡条件——通过为慢阶段配置足够多的并行实例,使其聚合吞吐匹配快阶段的输出速率,消除排队积压。

      证明摘要:X 的产出速率为 $K / T_X$(即每 $T_X / K$ 秒产出 1 个)。Y 有 $M$ 个实例并行处理,每个耗时 $T_Y$,因此 Y 的聚合产出率 $\geq M / T_Y \geq K / T_X$。稳态下每 $T_X / K$ 秒 X 产出 1 个,Y 恰好有 1 个实例完成,输出 1 个。

      Theorem 2(Ring Buffer Liveness) #

      断言:若 sender X 成功将数据写入 buffer region 位置 $P$,receiver Z 最终必定访问 $P$;但 $P$ 处数据不保证有效。

      物理意义:保证消费者不会"跳过"任何已写入位置(liveness),但承认死锁恢复机制可能导致数据被后来者覆盖(safety 的有限放松)。

      证明摘要:假设 Z 跳过 P。Z 跳过只有在 size entry 被篡改的情况下发生。但 X 写入时设置了 busy bit,该 bit 只能由 Z(consumer)清除。故 size entry 保持不变,Z 遍历时必到 P。

      6 项检查 #

      #检查项结果
      1符号定义是否自洽✓ $M, K, T_X, T_Y$ 定义清晰
      2等式量纲一致性✓ Theorem 1 两侧均为 requests/sec
      3边界条件检查⚠ Theorem 1 未讨论 $T_X = T_Y$ 退化情况(应 $M = K$),但公式仍成立
      4假设是否明确声明⚠ Theorem 2 假设"busy bit 只有 consumer 可清"但未形式化为前置条件
      5证明是否覆盖所有情况✓ §6.1 枚举 8 种死锁场景逐一分析,覆盖完整
      6结论是否超出前提⚠ Theorem 2 声称"eventually access P"但依赖消费者持续轮询假设(未形式化)

      Cluster-specific: 带宽预算 #

      论文未提供 RDMA 链路带宽数字(如 IB HDR 200Gbps vs NDR 400Gbps),也未给出 ring buffer 消息典型 payload 大小,因此无法独立验证 $Network(q)$ 项的量级。总延迟公式 $T(q) = T_X + T_Y + Network(q)$ 中 Network 项未量化。

      Cluster-specific: 扩展公式 #

      $M = \lceil K \cdot T_Y / T_X \rceil$ 随阶段数线性增长。多阶段级联($n$ 个阶段)时总实例数 $\sum_{i=1}^{n} M_i$,扩展性取决于 NM 的调度频率和 RDMA region 内可用节点数。论文未分析 $n > 2$ 的级联行为。

      §5 实验与数据 #

      本文无正式实验章节。 §9 Fault Tolerance 直接跳至 §10 Related Work,缺少独立 Evaluation section。

      现有数据点(均为声称,无方法论/基线细节):

      声称来源基线方法论
      GPU 资源消耗降低 16×Abstract, §1"monolithic inference pipelines"未描述
      GPU 资源消耗降低 16%§10.1 Conclusion同上未描述
      2.4× throughput / 20% latency↓ / 50% cost↓§1(引用 Ant Group)非 OnePiece 自身数据第三方报告

      关键缺失

      • 无端到端延迟基准测试
      • 无吞吐量(requests/sec)随并发数的变化曲线
      • 无 RDMA ring buffer 的微基准(写延迟、CAS 竞争率、消息丢失率)
      • 无 Node Manager 调度收敛时间测量
      • 无与 NCCL-based baseline(如 Mooncake)的直接对比
      • 16× vs 16% 的不一致性未解释

      §6 论证链 #

      Step论点支撑依赖
      1AIGC 多阶段流水线的 GPU 利用率低,因为各阶段异构且静态分配§1 问题分解(三条 root cause)+ Ant Group Triton 案例前提假设
      2微服务拆分允许各阶段独立伸缩、共享公共组件§3-§4 设计:WS → Instance → TaskWorker 层次结构Step 1
      3微服务间需要高效通信;NCCL 不满足四条约束(任意类型、变长、不占 GPU、需路由上下文)§2.3 + §6 开头的 L1-L4 分析Step 2
      4选用 one-sided RDMA 替代 NCCL,实现 zero-CPU 远端、zero-GPU 占用的内存直传§2.1 RDMA 背景 + §6 设计选择Step 3
      5Bare-metal RDMA 下变长消息管理需要 ring buffer;但分布式 ring buffer 存在死锁风险§6.1 挑战 C1/C2 + 现有方案局限性Step 4
      6Double-ring buffer(buffer region + size region + busy bit + CAS)保证 liveness;8 种场景覆盖完备§6.1 Theorem 2 + 8-case 枚举证明Step 5
      7Node Manager 通过 GPU 利用率监控 + 动态实例调拨解决负载不均§8.2 六步调度流程 + idle poolStep 2
      8Theorem 1 保证流水线吞吐匹配,Proxy fast-reject 保证不过载§5 形式化证明 + Request MonitorSteps 2, 7
      9整体声称:上述设计在 Wan2.1 I2V 下节约 16× GPU 资源Abstract/§1/§10.1(无实验支撑)Steps 1-8

      薄弱环节:Step 9 从 Step 1-8 的设计到最终量化声称缺乏实验桥梁。论证链的逻辑完整但实证为空。

      §7 实现 cross-reference #

      [实现未公开]

      论文未提供开源代码仓库、代码片段或具体实现细节(如 RDMA verb 调用序列、CAS 操作的具体实现、ring buffer 的 C/C++ 数据结构)。

      关键实现细节(从论文推断) #

      1. CAS spinlock + timeout 重入:producer 用 ibv_post_send 的 CAS 操作获取 lock region。timeout 值需短于 RDMA 往返(论文称"short timeout interval"但未给出数值)。timeout 后 producer 释放并重新尝试 CAS,此时可能覆盖前一 producer 的部分写入——通过 checksum 检测损坏。
      2. Busy bit 在 size region 的编码:每个 size slot 的高位(或专用 bit)作为 busy flag,producer 写入时 set,consumer 消费后 clear。这是 Theorem 2 liveness 的硬件基础——依赖 RDMA CAS 的原子性保证 bit 不被并发篡改。
      3. Buffer region wraparound:$P_b$ 在 $P_b + size(P_{size}) \geq RegionSize$ 时重置为 0(非取模,而是整体跳回起点)。这意味着 buffer 末尾可能产生碎片空间(内部碎片 ≤ 最大单消息大小)。
      4. Software → Hardware reverse implication #

        • 要求 NIC 支持 one-sided RDMA WRITE + CAS atomic(InfiniBand / RoCE v2 with atomic support)
        • 不依赖 in-network compute(SHARP 等),纯端侧逻辑
        • 要求低延迟 CAS round-trip(μs 级),否则 spinlock 竞争会退化
        • 对 PFC / 无损网络有隐式依赖(论文假设 RDMA reliable transmission,即 IB RC 模式)