查看原文
其他

FATE 2.0:业内首个开源实现异构系统互联互通的开发指南


1

背景介绍


联邦学习为打破“数据孤岛”而生,然而随着越来越多的机构投身到联邦学习领域,不同架构的联邦学习系统之间逐渐形成了新的“孤岛”现象,互联互通显得越发重要。FATE 2.0版本以全面互通为设计理念,是业内首个采用开源方式对应用层、调度、通信、异构计算(算法)等四个层面进行改造,实现了系统与系统、系统与算法、算法与算法之间异构互通的能力。


FATE 2.0互联互通整体架构示意图如下图所示。从上而下,从不同层次定义了东西向和南北向协议接口规范。方便各个厂商根据自身特点,分层和分阶段接入FATE 2.0实现互联互通。 



本文将从调度层、算法容器及通信层三个方面介绍FATE 2.0版本互联互通接入方案。

2

调度层


2.1 方案


2.1.1 调度架构方案

FATE Flow 2.0版本致力于构建开放标准化的互联互通调度平台,其调度方案图如下:


2.1.2 调度器方案

调度的核心是调度流程,流程定义作业的生命周期。在FATE 1.x版本中调度器与发起方逻辑是绑定的,即多方作业的协调调度是在发起方。这样有个弊处:假设A、B、C三家厂商各自都有发起任务的需求,他们的调度层都需要基于相同的调度逻辑实现调度器,互联互通的成本较高。在2.0版本中,将调度模块中的发起方与调度方逻辑解耦,且调度方可以在作业配置中被指定。在上述的案例中,只要A、B、C厂商中的任意一家实现了调度器,或者直接使用FATE作为调度方,其他厂商只需要实现调度客户端接口,即可满足需求,大大降低互联互通成本。

P代表调度客户端接口,S代表调度器接口


举个例子简单说明下该调度模式:假设A想要和C创建作业,调度方为FATE Flow。首先A请求FATE-FLow S(create-job)接口, FATE FLow收到请求后通过job配置获取参与方信息(A、C),随即分发给参与方各自的P(create-job)接口。


2.2 接入指南


2.2.1调度器(可选)

调度器主要包括两部分:调度逻辑和调度接口。异构的场景下的调度层想要实现互联互通,统一的调度流程和接口是不可或缺的。上述提到若使用FATE Flow作为调度方,与其它厂商互联时,可忽略调度器的实现。


调度逻辑:对作业的生命周期管理,主要包括作业何时启停、任务何时启停、DAG解析、组件运行依赖等等。FATE FLow的调度流程按任务状态获取模式分为两种: callback和poll。其中callback模式是由各参与方主动上报任务状态给调度方,poll模式是调度方定时向各参与方拉取任务状态。两种模式对应的调度流程图如下:

callback模式调度流程图

poll模式调度流程图


调度接口:实现将请求下分发给全部参与方。调度接口包括:

(1) 创建作业;

(2) 停止作业;

(3) 推送任务状态。


2.2.2调度客户端

调度客户端主要用于接收来自调度器下发的请求命令,并实现相关命令所包含的内容。接口主要包括如下:

(1) 创建作业;

(2) 申请资源;

(3) 释放资源;

(4) 启动作业;

(5) 停止作业;

(6) 查询任务状态;

(7) 任务状态同步。


2.3 OFX


OFX(Open Flow Exchange)是互联互通标准定义接口的python SDK,包含客户端、调度器及调度客户端的相关接口调用。其主要内容如下:

用法参考如下:

3

算法容器


在FATE 历史版本中,算法是以调度服务启动的本地进程方式运行,在扩展性方面存在不足,很难满足互联互通的需求。在2.0版本中采用“算法容器”运行算法,通过制定统一的算法镜像构建标准与定义一套规范的镜像加载机制来实现异构算法调度功能。当前阶段可以优先考虑同一个工作流中只包含相同厂商的算法组件,方便快速实现互通。


节点A、B代表两家隐私计算提供商,A-X代表A厂的算法X,B-Y代表B厂算法Y。


3.1 方案

算法需按照相同约定打成镜像,其中一个镜像可以包含一个或者多个算法组件,算法组件的自描述信息需要放入镜像LABEL中。自描述信息主要包括:算法包自描述、算法功能自描述、算法参数自描述、算法输入自描述、算法输出自描述、启动入口等。


算法运行的容器采用即用即销毁形式,将镜像加载为容器的过程即为启动任务。启动任务的参数可以在启动容器时放入到ENV中,包括两部分:运行环境参数和组件运行参数。运行环境参数主要包括支撑系统接口、配置信息等(如存储地址、通信服务地址、计算服务地址等);组件运行参数包括算法名称、算法参数、算法输入数据和模型等内容。


3.2 接入指南

异构算法镜像有两种场景:

(1)使用FATE Flow调用其他厂商的算法镜像;

(2)其他厂商调度平台使用FATE算法镜像。

无论哪一种场景,参与联邦训练各方运行的算法需相同,即使用相同的算法容器。下面将从这两方面介绍如何接入。


3.2.1 算法镜像接入FATE Flow

(1)打镜像

参考算法镜像构建标准打镜像


(2)注册镜像

FATE Flow提供镜像注册接口,注册内容参考如下:

name为镜像提供商;device为加载镜像的服务:FATE Flow支持将镜像加载为docker和k8s,若有其他场景需求,可参考DockerManager、K8sManager实现对应的适配器;version为镜像的版本号;metadata为加载镜像时的配置信息。


(3)加载容器

镜像加载成算法容器主要依赖启动入口、算法输入参数、系统支撑服务三部分。其中启动入口通过镜像LABEL获取;算法输入参数和所依赖的系统支撑服务这两部分可通过开发适配器,将调度层的算法运行参数转换成容器的系统环境变量。

另外容器的运行参数也可以通过适配器做定制化,如日志、数据等内容的磁盘映射,网络模式等。


3.2.2 FATE算法镜像使用

FATE参考算法镜像构建标准打镜像,使用时可以通过镜像LABEL获取自描述信息,启动容器的命令及参数都在自描述信息中定义,启动时需要将动态参数按自描述的定义填充进去。



4

通信OSX


OSX(Open Site Exchange)致力于打造隐私计算通信互联互通基础设施。各个隐私计算平台通过接入OSX,可以实现和OSX生态的所有隐私计算平台进行通信互联。


4.1 OSX通信协议

OSX通信协议参考如下所示:

4.2 OSX接入指南

目前OSX支持同步/流式/消息队列模式传输,同步RPC用于调度组件的命令传输,流式传输目前用在了与FATE eggroll组件的通信中。互联互通数据传输建议使用消息队列模式对接。

消息队列模式包含几个操作:

1)命令通道双方调度组件同步通信,如fateflow与其他厂商调度组件通信。

2)数据通道生产消息并传递到对方。

3)数据通道消费消息。

4)数据通道消费确认。

OSX Python SDK可以参考python/fate/arch/federation/osx模块。

5

通过开源框架打造互联互通开放标准


传统互联互通接入方案需要各个隐私平台之间两两适配,接入N家,就需要适配N次,存在N次接入成本,如图(a)所示。

(a)现有的适配方式


通过FATE 2.0开源框架,用户能降低互联互通接入成本,,如图(b)所示。用户只需实现一次FATE 2.0的接口标准,即可和所有满足FATE 2.0互联互通规范的隐私计算平台进行互通,使得互联互通标准化,大大减低了适配成本。


(b)FATE 2.0的适配方式。

6

结语


FATE v2.0 Alpha版本已正式发布,为异构隐私计算平台提供了一个开源框架来实现互联互通,解决了业内的一个主要痛点。大多数隐私计算平台都可以通过实现开放的互通接口,实现与异构系统的交互和集成。我们欢迎隐私计算行业用户和技术合作伙伴加入FATE开源社区,共同推进数据隐私保护技术的发展。


用户可访问以下网址获取FATE v2.0 Alpha的发布版:

https://github.com/FederatedAI/FATE/tree/v2.0.0-alpha


FATE 2.0架构的实现参考了业内其他规范,例如北京金融科技产业联盟的《隐私计算互联互通规范》等。FATE开源社区计划于今年第二季度和第三季度分别推出FATE 2.0 Beta2.0正式版本。


我们欢迎用户使用基于FATE 2.0的互联互通功能,并加强合作。对互联互通感兴趣的用户和开发者也可参加FATE开发专委会定期的社区例会,参与相关功能的讨论和实施工作。请联系FATE小助手微信号(FATEZS001),参与FATE开发专委会双周社区例会。

END


点击“阅读原文”获取FATE v2.0 Alpha的发布版
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存