架构#
主要架构如下所示。
本开发指南将主要关注缩进点线部分。
Mars 实现了一个轻量级的演员框架,称为 oscar,在此基础上,分布式执行层被解耦为几个服务,包括:
会话服务。管理会话。每个会话都是独立的,一个会话中的数据不能被另一个会话看到。
集群服务. 监控整个集群。
元服务。存储Mars对象的元数据,如张量的形状等。
存储服务。数据可以放入和从存储服务中获取,数据溢出和工作者之间的数据传输等功能也集成在存储服务中。
任务服务。当用户调用
.execute()方法时,任务将被提交到此服务。任务服务将尝试将高层次的粗粒度计算图细分为低层次的细粒度图,其中图中的每个节点都是一个子任务。这个子任务图将被交给调度服务。调度服务。接受一个子任务图,并根据多种高度优化的调度策略,将子任务调度到工作者执行。
子任务服务. 接受一个子任务,执行它们,然后将数据存入存储,记录元数据在元数据服务中,向任务服务报告结果。
生命周期服务。每个Mars对象以及块在生命周期服务中都有一个引用计数,当引用计数达到0时,通知存储服务移除数据,并告诉元数据服务移除元数据。
代码结构#
核心: 内部数据结构,如可铺处理单元、块、操作数、图。
lib: 库,例如文件系统,稀疏。
奥斯卡:演员框架。
部署/oscar: 本地部署。
部署/熊猫:在 Kubernetes 上部署。
deploy/yarn: 在yarn上部署。
服务:所有服务。
优化:高级和低级优化,例如融合。
序列化:基于pickle5协议的序列化。
存储:本地存储后端,例如 plasma、shared_memory、ray。
任务巡览#
一个任务由以下步骤组成:
当
.execute()在客户端被调用时,一个具有可平铺图的任务将被提交到任务服务。任务服务将首先优化可切片图,将应用一些规则,例如列裁剪。然后,可切片图将被切割成块图,块图也将被优化,例如融合。融合块图上的每个节点将被组织为一个子任务,子任务图将交给调度服务。
调度服务根据一些高度优化的调度策略(例如深度优先、局部感知)安排子任务。子任务将被提交给工作节点上的子任务服务以进行执行。
一个任务将在所有子任务完成后才会结束。