Home OneFlow备忘录
Post
Cancel

OneFlow备忘录

OneFlow设计

Compile编译期:构造静态图,静态图编译到执行计划Plan,Plan由Actor构成
Runtime运行时:启动运行Actor节点,Actor的生产、消费数据存储于Register
Actor:静态图节点,消费或生产数据并存储到Register,节点之间通过包含Register地址的轻量数据交互连接,称为消息

Compile-一致性视角

Placement

每个op都有的属性,指定该op的执行设备地址

SBP机制

Split:数据切分,单设备数据切分到多设备上执行
Broadcast:数据复制,单设备数据复制到多设备上执行
PartiaSum:数据和稀疏,单设备数据以和的形式拆分到多设备上执行,多设备数据和为原单设备数据

Boxing机制

调和多个节点间对数据SBP结构有不同需求的冲突,以中继节点的方式对传递的数据做SBP转换,实现不同SBP数据结构的节点间的数据交互

Job构图

master-worker机制启动任务,master上执行Job构图 Job: 用户定义的逻辑上的计算图,由net(op list,可转为DAG,op为点,生产或消费的tensor为边)和placement组成
可定义多个计算图,支持多子图编译

  • userJob: 用户定义的子图Job,可将多个userJob构成JobSet集合
  • sysJob: 系统将对userJob编译期执行生成的Job,sysJob负责userJob的输入输出、加载保存等操作
  • mainJob: 链接多个计算图,负责逻辑交互
  • MergedPlan: JobSet的编译后产物,提交Runtime执行

Runtime-Actor机制

去中心化

静态图无中心调度节点,每个actor节点只关注自己的消费、产出数据,即上下游关联的actor

状态机

actor等待态:未收到上游消息时,挂起,等待上游actor生产后唤醒切到执行态
actor执行态:收到上游消息,唤醒,消费上游发来的register,并生产本节点的register后,向下游发送消息唤醒下游actor
并向上游发送已消费其register的消息。

消息类型

上游消息:本节点所需的register已生产,可以被消费。
下游消息:本节点所产出的register已被消费,可以被回收。
本节点所需的所有register都已生产,且有空闲块可被生产,则进入执行态,消费所需的register,产出本节点的register。
本节点产出的register被所有下游消费,则执行register回收,释放空闲块供下一次生产。

流水线设计

将一个register在物理上分割到多个空闲块上,则可以按块构成执行流水线,生产者生产一块,消费者消费一块,不必等待register完全生产完成。

This post is licensed under CC BY 4.0 by the author.