fate资料存在着多处版本功能与发布的文档不匹配的情况,各个模块都有独立的文档,功能又有关联,坑比较多,首先要理清楚各概念、模块之间的关系。
1.概念解释:
RollSite是一个grpc通信组件,是eggroll引擎中的一个模块,相当于我们的grpc通信网关。
2.对比解读:
l网状架构相当于我们的一体化版本模式,但没有dop平台来维护网关,每方需要在配置文件里维护其他参与方的网关地址。
l星型架构的好处是只在Exchange方维护所有参与方的网关地址,前提是需要信任Exchange,并且流量全部都需要从Exchange方中转,相当于我们的中心化版本。但不支持证书。
3.Exchange配置
在Exchange上配置路由表:
在各party方配置默认路由指向exchange,不需要再配置每个party的地址。
FATE支持eggroll和spark两种计算引擎,搭配不同的通信组件,共五种组合,不同的通信模块不能兼容。
区别:
lRabbitMQ是一个简单易上手的MQ
lPulsar相比RabbitMQ,可以支持更大规模的集群化部署,也支持exchange模式的网络结构。
lSlimFATE相比其他模式,最大化减少集群所需的组件,可以使用在小规模联邦学习计算,IOT设备等情况。
Eggroll是FATE原生支持的计算存储引擎,包括以下三个组件:
lrollsite负责数据传输,以前的版本里叫Proxy+Federation
lnodemanager负责存储和计算
lclustermanager负责管理nodemanager
支持rabbitMQ替换pulsar
关联项目:
KubeFATEdocker和k8s的部署
FATE-Flow联合学习任务流水线管理模块,注册、管理和调度中心。
EggRoll第一代fate的计算引擎
FATE-Board联合学习过程可视化模块,目前只能查看一些记录
FATE-Cloud联邦学习云服务,类似于我们的dop平台,管理功能。
FedVision联邦学习支持的可视化对象检测平台
FATE-Builderfate编译工具
FedLCM新增的项目:创建FATE联邦并部署FATE实例。目前仅支持部署以Spark和Pulsar作为基础引擎,并使用Exchange实现互相连接的
FATEFlow是调度系统,根据用户提交的作业DSL,调度算法组件执行。
服务能力:
·数据接入
·任务组件注册中心
·多方资源协调
·数据流动追踪
·作业实时监测
·联合模型注册中心
·多方合作权限管理
·系统高可用
·CLI、RESTAPI、PythonAPI
旧版,图比较立体
·DSLParser:是调度的核心,通过DSLparser可以拿到上下游关系、依赖等。
·JobScheduler:是DAG层面的调度,把DAG作为一个Job,把DAG里面的节点run起来,就称为一个task。
·FederatedTaskScheduler:最小调度粒度就是task,需要调度多方运行同一个组件但参数算法不同的task,结束后,继续调度下一个组件,这里就会涉及到协同调度的问题。
·JobController:联邦任务控制器
·Executor:联邦任务执行节点,支持不同的Operator容器,现在支持Python和Script的Operator。Executor,在我们目前的应用中拉起FederatedML定义的一些组件,如dataio数据输入输出,特征选择等模块,每次调起一个组件去run,然后,这些组件会调用基础架构的API,如Storage和FederationService(API的抽象),再经过Proxy就可以和对端的FATE-Flow进行协同调度。
·TrackingManager:任务输入输出的实时追踪,包括每个task输出的data和model。
·ModelManager:联邦模型管理器
Job提交(并运行),停止,查询,更新,配置,列表,task查询
Tracking
Pipeline
Model
Table
1.联邦统计:包括隐私交集计算,并集计算,皮尔逊系数,PSI等
2.联邦特征工程:包括联邦采样,联邦特征分箱,联邦特征选择等。
3.联邦机器学习算法:包括横向和纵向的联邦LR,GBDT,DNN,迁移学习等
4.模型评估:提供对二分类,多分类,回归评估,聚类评估,联邦和单边对比评估
5.安全协议:提供了多种安全协议,以进行更安全的多方交互计算。
Figure1:FederatedMachineLearningFramework
Adatptor:默认的情况使用系统自带的MockAdatptor,仅返回固定数据用于简单测试,实际生产环境中需要使用者需要自行开发并对接自己的业务系统。(这部分可以看看能不能对接咱们自己的在线预测系统。)
l支持使用rollsite/nginx/fateflow作为多方任务协调通信代理
lrollsite支持fateoneggroll的场景,仅支持grpc协议,支持P2P组网及星型组网模式
蓝色为guest集群,灰色代表host集群
1.通过fateflow建模2.分别部署guest方Fate-serving与host方Fate-serving
3.分别配置好guest方Fate-flow与guest方Fate-serving、host方Fate-flow与host方Fate-serving。
4.Fate-flow推送模型
5.Fate-flow将模型绑定serviceId
7.可以在serving-admin页面上测试调用(此步操作非必需)。
FATE-Serving之间的交互可以通过nginx反向代理转发grpc请求,以下几种场景配置如下:
·场景一:双方不配置TLS,通过nginx四层代理转发
·场景二:双方配置TLS,通过nginx四层代理转发,双方分别进行证书校验
·场景三:数据使用方配置Client端证书,Nginx配置Server端证书,Host不配置证书,通过nginx七层代理转发,由Client端和nginx进行证书校验
FATECloud由负责联邦站点管理的云管理端CloudManager和站点客户端管理端FATEManager组成,提供了联邦站点的注册与管理、集群自动化部署与升级、集群监控、集群权限控制等核心功能。
联邦云管理端(CloudManager)
联邦云管理端即联邦数据网络的管理中心,负责统一运营和管理FATEManager及各站点,监控站点的服务与联邦合作建模,执行联邦各权限控制,保证联邦数据合作网络的正常运作;
联邦站点管理端(FATEManager)
联邦站点管理端,负责管理和维护各自的联邦站点,为站点提供加入联邦组织、执行站点服务的自动化部署与升级,监控站点的联邦合作与集群服务,并管理站点用户角色与应用权限;
共有4类部署方式,单机的安装模式是只提供了单机的安装文档,也可以研究怎么扩展成集群模式。
||单机(不推荐生产用)|集群(生产推荐)||非容器|AllinOne|ansible||容器|dockercompose|k8s|
部署时会要求配置机器对应的角色,只能选host,guest和Exchange,其中host和guest并没有区别,实际运行联邦时还是在job的配置中去配置哪一方是guest,哪一方是host,任务只能在guest方提交。
手上没有k8s环境,暂未测试。
不同点如下:
下载镜像较慢,如果大批量部署,可以搭建内网镜像服务。
|Role|party-id|OS|IP|||host|20001|Centos7.6|11.50.52.81|8C64G||guest|20002|Centos7.6|11.50.52.62|8C64G||部署机||Centos7.6|11.50.52.40||
一开始我只部署了一台host,本来打算这2台做一个集群,后来发现文档里没提这种方式,只好先按文档实验一次,于是又部署了guest,这样在guest的配置里已经写好了host的地址,于是手动将配置更新到了host的/data/projects/fate/confs-20001/confs/eggroll/conf/route_table.json
发现不需要重启容器后续步骤也没报错,说明可以动态修改路由信息。
进入容器的时候,容器名包含的平台id需要修改成实际的。
fateflow/examples/lr/test_hetero_lr_job_conf.json中不同点,
修改对应的平台id
"initiator":{"role":"guest","party_id":20002},"role":{"guest":[20002],"host":[20001],"arbiter":[20001]},按文档写资源不够运行不了,需要修改如下
"job_parameters":{"common":{"task_parallelism":1,"computing_partitions":1,"task_cores":1}},不要修改fateflow/examples/lr/test_hetero_lr_job_dsl.json文件,文档中的配置是旧版本的,修改了就不能执行了,里面的DataIO组件已废弃。
运行测试后可以通过board查看,成功的id:202211031508511267810
#flowmodeldeploy--model-idarbiter-20001#guest-20002#host-20001#model--model-version202211031508511267810输出了产生的model_version是202211031811059832400
1.修改加载模型的配置
发送以下信息到"GUEST"方的推理服务"{SERVING_SERVICE_IP}:8059/federation/v1/inference"
本文旨在从宏观的角度分析FATE的源码分布、总体架构、主要功能及核心流程,尚有许多细节和功能未深入研究,欢迎大家留言,互相学习。