RayOrch 用血缘状态把跨父批处理与有序归并拆开,在 64 张 H20 上把 MinerU 端到端时间比 Ray Data 缩短 13.1%
核心概要
RayOrch 提出一种编程模型与基于 Ray 的分布式执行引擎,用编译器校验的 F.expand/F.reduce 配对和运行时维护的结构化血缘状态(子实体集合、直接父节点、不可变序号、终止状态)来支撑多粒度数据流,使 GPU 可以跨父节点批处理子任务而仍能按序重建父结果并做父级失败隔离;在 NVIDIA H20 上,MinerU 从 4 卡扩到 64 卡获得 15.14 倍处理时间加速,64 卡端到端 4295.7 秒、40.6788 页/秒,比 Ray Data 少 13.1%、比 Daft 少 29.0%,Docling 上比 Ray Data 少 16.0%,FIFO 调度把消融墙钟从 634.1 秒降到 579.3 秒(8.6%),失败注入实验中 23514
深度剖析
论文把有限无环的层级数据流形式化为可静态检查的结构模型:程序用 F.expand 声明父到子的有序变基数展开,用 F.reduce 声明匹配的父作用域有序归并,编译器检查 Domain 兼容性与配对关系。 此前 Ray Data 的 flat_map 与 Daft 的 explode 把展开后的父子关系留给应用字段维护,扁平接口不把这些字段当作结构性状态;RayOrch 把展开关系写进程序与运行时契约,使成员关系与重建顺序不再由记录字段或应用标识符重新发现。 论文给出 DSL 四个结构原语(F.expand、F.filter、F.broadcast、F.reduce)的语义表,并说明编译器在检查无环性、Domain 兼容性和每个声明配对后把符号 DSL 降为不可变图,非法跨 Domain 使用在执行前失败。
运行时为每个父实体维护一个 Expansion,记录具体有序子实体集合、每个子实体的直接父节点与不可变零基序号、以及终止结果;每个 Call 拥有自己的 FIFO Ready Queue,物理批次可以混合不同父节点的 Grain,归并只依据声明的成员关系与序号,而不依据批次边界或完成顺序。 论文强调逻辑展开与高效物理批次边界不同:既有系统要么用粗粒度作业隐藏页、片段、帧级并行,要么暴露扁平记录迫使应用自行分组排序并在子阶段后引入 shuffle 或重组屏障;RayOrch 让物理批次保持短暂,而结构血缘状态贯穿执行。 论文给出 Grain 生命周期(waiting/ready/sealed)、输入传播优先级规则,以及语义契约等式,说明在合法物理调度下最终 Item 与血缘顺序不变,其依据是批次无关的 Grain 身份、唯一单调血缘事实、代际围栏重试和按序号归并四条不变量。
提交与恢复被拆成逻辑提交和物理尝试:被接受的报告会封存 Grain 并原子发布终止事实,代际检查拒绝过期或重复报告;类型化的 GroupFailure 为一个 Call 和直接父节点安装抑制屏障,未派发的兄弟被抑制、在途兄弟不能提交,而无关父节点继续运行。 论文把失败范围定义为 Call 与直接父节点,而 Ray Data 与 Daft 的失败处理由应用定义;在失败注入实验中,Ray Data 和 Daft 在计时区外预展开并分区页面、携带父/错误列,只在重组后过滤中毒父节点输出,因此无法在运行时抑制兄弟计算。 失败注入实验使用 4 张 H20、4 个 actor、批上限 48、固定 50 毫秒页面 UDF,向 99 个最大父节点的第 0 页注入失败(占文档 5.25%、占页面 51.9%),每个运行时执行三对干净—中毒运行共 18 次,全部产生预期健康输出。
在 MinerU、Docling 文档流水线和 Qwen2.5-VL-7B 视频流水线上,RayOrch 同时取得较高吞吐与接近线性的强扩展:MinerU 处理时间从 4 卡 15.26 小时降到 64 卡 1.01 小时,64 卡达到理想线性扩展的 94.6%;视频在 8 卡时三方接近持平,到 64 卡时 RayOrch 以 0.42 小时完成。 论文把端到端收益归因于父级局部提交:一旦某个父节点的血缘完整,其结果即可释放给正在运行的装配与上传阶段,无需等待无关父节点;而 Ray Data 与 Daft 先扁平化子项再全局重组,在 OCR 之后留下 shuffle、装配与收集尾巴。 MinerU 使用 3689 个 PDF、174744 个有效页面(每 PDF 1–427 页,排除一个不可读 PDF),视频使用 27091 个视频、104952 个片段,Docling 使用 2000 个 PDF;64 卡 MinerU 端到端对比中 RayOrch 为 4295.7 秒、40.6788 页/秒,吞吐分别比 Ray Data、Daft、原生 MinerU 高 15.1%、40.8%、106.6%。
启示与展望
该工作面向有限、无环的层级数据流,适用于文档(PDF 到页、区域、表格)与视频(视频到片段、帧、音频段)这类反复改变处理粒度、且需要按父节点有序重建与完成判定的准备流水线;受益者是需要跨父节点批处理 GPU 工作、同时保留归属与顺序的数据工程与训练数据团队。论文明确其支持范围是每个源微批内的有序归并,不支持一般连接、跨微批窗口与反馈。实现为 Ray 之上的 Python 层,每个配置的 Call 由持久 Ray actor 池承载,驱动端保留编译计划、血缘元数据与待处理 ObjectRef,负载留在 Ray 对象存储中;适配器覆盖 MinerU 的渲染、页面 OCR(1.2B 参数 VLM)与装配,Docling 的版面、OCR 与表格阶段,以及解码片段、帧或音频后、按源合并前应用 Qwen2.5-VL-7B 的视频流水线。
论文的语义契约保证覆盖结构与终止状态:只有当 UDF 本身对批次形状、输入顺序与随机性不变时,保证才延伸到负载字节,否则仅覆盖结构与终止状态。评测中的强扩展扫描与冷启动分解来自不同的运行序列,阶段窗口相互重叠、不可相加;消融中的原生文档流式行是架构参照,因为完整系统在重批与队列两方面都不同,受控比较是重批与完整 FIFO 之间。失败注入实验使用固定 50 毫秒页面 UDF 与特定注入位置,其抑制比例与时间收益在其它失败模式下的表现仍是开放问题。此外,本次可读文本为论文全文,但图表数值以文字描述形式呈现,若需核对图中曲线细节仍需回到原文。
