1.联邦学习的网络架构
- P2P网络
- 网络中的每个成员建议通信
- Star网络
- 网络中的每个成员只需要和中心的exchange交换信息
2. FATE中的架构
2.1 EggRoll分布式计算和存储
- Egg Roll分布式计算和存储
- 存储部分 storage service
- 计算部分 processor
- 管理 egg manager
2.2 FateBoard联邦建模可视化看板
2.3 FateFlow联邦任务调度
2.4 FederatedML联邦机器学习
2.5 FateServing联邦模型服务
2.6 PipeLine交互式客户端(重点)
- 类keras的用户建模编程界面,接口简单
- 与旧的通过配置json DSL方式比,对开发者友好,搭建Logistic Regression等经典应用核心代码十行内
2.6.1 导入使用的模块
from pipline.component import DataIO
from pipline.component import HeteroPoisson
from pipline.component import Intersection
from pipline.component import Reader
2.6.2 初始化组件的设置
- Component init:
- name:标记这个组件的别名,如不设置,则由系统自动分配
- Object(param1=,param2=,…)。此类参数代表所有的参与方使用同样的参数配置
- get_party_instance(role,party_id=int or list).component_param,表示单独设置某个参与方的参数
dataio_0 = DataIO(name='dataio_0',data_type='float',output_format='dense')
dataio_0.get_party_instance(role='guest',party_id=9999).component_param(
with_label = True,
label_name = "doctorco",
label_type = "float"
)
dataio_0.get_party_instance(role='host',party_id=10000).component_param(
with_label = False
)
2.6.3 设置任务的驱动
- set_initator(role,party_id):设置任务发起方
- set_roles:设置任务参与方及partyid
from pipeline.backend.pipeline import PipeLine
pipeline = PipeLine().set_initiator(role='guest',party_id=9999).\
set_roles(guest=9999,host=10000,arbiter=10001)
2.6.4 构建运行的DAG图
- DAG图通过Data和Model进行关联,其中Data表示输入数据依赖,Model表示模型依赖
- Pipeline().add_component(component,data=Data(),model=Model()),表示增加组件,数据依赖关系,模型依赖关系
from pipeline.interface import Data
from pipeline.interface import Model
pipeline.add_component(reader_0)
pipeline.add_component(reader_1)
pipeline.add_component(dataio_0,data=Data(data=reader_0.output.data))
pipeline.add_component(dataio_1,data=Data(data=reader_1.output.data),model=Model(dataio_0.output.model))
pipeline.add_component(intersection_0,data=Data(data=dataio_0.output.data))
pipeline.add_component(intersect_1,data=Data(data=dataio_1.output.data))
pipeline.add_component(hetero_poisson_0,data=Data(train_data=intersection_0.output.data,validate_data=intersect_1.output.data,))
2.6.5 编译&运行
- Pipeline.compile():调用pipeline编译接口,构造训练的dsl以及构造任务运行时的参数配置
- JobParameters:设置运行时的环境参数,包括后端执行运行,执行方式(单机、并行)、并发度等
- pipeline.fit():执行训练流程
from pipeline.runtime.entity import JobParameters
pipline.compile()
job_parameters = JobParameters(backend=0, work_mode=1)
pipeline.fit(job_parameters)
2.6.6 获取训练相关信息
- pipeline.get_component(component_name) #获取某个组件的任务信息task_info
- task_info.get_summary()#获取组件的汇总信息
- task_info.get_model_param()#获取组件的模型输出
- task_info.get_output_data()#获取组件的数据输出
summary = pipeline.get_component("hetero_poisson_0").get_summary()
model_param = pipeline.get_component("hetero_poisson_0").get_model_param()
2.6.7 模型部署和保存
- pipeline.deploy_component(component_list)#通过该接口指定参与离线预测的组件
- pipeline.dump(pipeline_model_path)#将训练的pipeline(模型)保存到指定的模型文件
pipeline.deploy_component(["dataio_0","intersection_0","hetero_poisson_0"])
pipeline.dump("pipeline_saved.pkl")
2.6.8 训练模型的恢复和查看
- PipeLine.load_model_file(restore_model_path)#恢复保存的pipeline
- pipeline.describe()#获取pipeline的相关描述,包括阶段、创建时间、构造的dsl等
train_pipeline = PipeLine.load_model_file("pipeline_saved.pkl")
train_pipeline.describe()
2.6.9 模型预测
- add_component#支持将训练pipeline部署后的模型作为一个整体进行增加
- pipeline作为整体输入时,使用predict_input=dict来进行数据传递(可能有多组件需要数据)
- 支持在训练部署模型前后增加新的组件
- pipeline.predict()#执行预测流程
predict_pipeline = PipeLine()
predict_pipeline.add_component(reader_predict)
predict_pipeline.add_component(train_pipeline,data=Data(predict_input={train_pipeline.dataio_0.input.data:reader_predict.output.data}))
predict_pipeline.add_component(evaluation_0,data=Data(data=train_pipeline.hetero_poisson_0.output.data))
predict_pipeline.predict(JobParameters(backend=0,work_mode=1))s
3. FATE Serving Architecture(FATE在线服务架构)
- Serving Server
- 负责模型的加载和缓存
- 在线推理
- Serving Proxy
- 在线服务的网络出口
- 对接业务系统和负载均衡等功能
- zookeeper
- 在线服务的发现和高可用
- FATE Flow
- 负责将模型从Roll中读出来的分发到Serving Server
- Roll
- 分布式计算和存储
参考:
https://docs.qq.com/doc/DU3ZQb1h1ZnZqTUFy
https://www.bilibili.com/video/BV1hf4y1F7yg/?spm_id_from=333.337.search-card.all.click&vd_source=312881934a549c75f4267ec434cf8ea9