Fate如何安装?本文续这篇文章。
背景
很多中文网络的FATE的教程都是直接使用DSL的教程,可能【有点老旧】,该换新了。
Fate是一个服务,还原联邦学习联邦学习场景,在联邦里的各个方被FATE分成了client和host两种身份,当然还有个arbiter身份,这个暂时不管。各方都想要共享数据,以获得更大的数据集训练得到更好的模型,但是各方又不相互信任,所以需要一个可信第三方FATE来完成。
FATE把【数据集中带有标签】的用户分类为client,其余不带标签的用户被分类为host。
在 FATE 框架中,横向联邦的场景被称为 homo,纵向的被称为 hetero,比如 纵向安全提升树模型就叫做 hetero secure boost。是什么模型不重要,主要是把这个场景给解释清楚就行。
上传
官方文档:https://fate.readthedocs.io/en/latest/tutorial/pipeline
强烈建议对着官方文档看我这个!
工具
FATE框架可以使用pipeline工具进行上传。
先下载fate_client,因为Pipeline是fate_client里的一个工具。
pip install fate_client
根据文档,想要使用pipeline,需要命令行配合使用
pipeline init --ip=xxx --port=xxx
先terminal里面对pipeline初始化才能使用pipeline,ip和port要跟FATE启动时的ip和port要对应,如果是standalone,那么ip是127.0.0.1,port一般是9380。
如果记不清fate的配置了,使用(暂时还没找到,等着补上
flow
如果记不清pipeleine的配置了,使用pipeline config show
查看
开发
python文件,如下代码即可上传【数据文件】。FATE的上传的数据应当是什么样的?官方文档
这个教程就用这个tabular的文件了,这个可以看文档给出的example,那个路径其实是fate github的路径,打开文档中的hetero_breast_guest
后具体是这样的,文档中的数据集都在这里:https://github.com/FederatedAI/FATE/tree/master/examples/data
你可以直接从github上下载,也可以复制粘贴,但是要注意,检查最后一行是否空行!,如果是空行,删掉,不然FATE会报错。可以具体看我这个亲自踩坑的博客。
每一个上传的数据都会有自己的table_name和namespace,fate用这两个字段来命名区分每一个上传的数据。
pipeline的initiator绑定此pipeline是谁的,set roles标明此任务是由哪些人们一起做。
下面的例子意思是“此pipeline属于guest,他的id号是9999,此任务由id是9999的guest和id是10000的host共同完成”。guest和host参数除了可以是一个数字,也可以是一个list,比如guest=[1,2,3,4]
。
from pipeline.backend.pipeline import PipeLine
pipeline = PipeLine() \
.set_initiator(role='guest', party_id=9999) \
.set_roles(guest=9999, host=10000)
data_path='/root/Downloads/dummy.csv'
table_name='dummy'
namespace='dummy'
pipeline.add_upload_data(file=data_path,table_name=table_name,namespace=namespace)
pipeline.upload(drop=1) # drop表示是否覆盖已经上传的table
成功运行后,terminal会出现类似字样。
从FATE服务中获得数据
官方文档:https://fate.readthedocs.io/en/latest/tutorial/pipeline/pipel...强烈建议对着官方文档看我这个!
另,文档中的sbt
,其实就是Secure Boost Tree,一个决策树模型,因为使用了FATE,所以叫Secure。
工具
FATE中使用Reader
类,从FATE框架中获得数据。
文档中说“load data”,我一开始以为load data是从本地load,汗!文档最好改成load data from FATE service……
使用Reader
类获得数据后,可以使用DataTransform
类进行变换。文档和代码有提,可以参考文档。使用Intersection
可以获得两份数据的PSI,参考Component文档和intersection文档.
Python
Reader
同样也需要绑定party,但是是要绑定数据提供方的身份和id。比如有一份数据A是guest id10提供的,在定义Reader的时候要绑定guest id10才能成功读取。
注意:一般来说,在联邦学习中所谓的“获取数据”是把本方有的数据与联邦方有的数据做“融合”后再用作本次的训练,所以一般会涉及官方文档中的intersection类,而下面的例子是自己获得自己上传过的数据,只是做简单的演示,虽然简单,但是对于理解FATE中的类有帮助。
from pipeline.component import Reader, DataTransform, HeteroSecureBoost, Evaluation
from pipeline.interface import Data
# set pipeline operation party ids.
pipeline = PipeLine() \
.set_initiator(role='guest', party_id=9999) \
.set_roles(guest=9999)#, host=10000) 不需要加入其他host
reader_0 = Reader(name="reader_0")
# bind reader operation tables
reader_0.get_party_instance(role='guest', party_id=9999).component_param(
table={"name": "dummy", "namespace": "dummy"})
data_transform_0 = DataTransform(name="data_transform_0")
# bind transformation operation party
data_transform_0.get_party_instance(role='guest', party_id=9999).component_param(
with_label=True)
# state a boost tree and evaluation
hetero_secureboost_0 = HeteroSecureBoost(name="hetero_secureboost_0",
num_trees=5,
bin_num=16,
task_type="classification",
objective_param={"objective": "cross_entropy"},
encrypt_param={"method": "paillier"},
tree_param={"max_depth": 3})
# add everyone into pipeline and ready for training
pipeline.add_component(reader_0)
pipeline.add_component(data_transform_0,data=Data(train_data=reader_0.output.data))
pipeline.add_component(hetero_secureboost_0, data=Data(train_data=data_transform_0.output.data))
pipeline.compile()
# training
pipeline.fit()
# load another dataset via predict_pipeline
# predict_pipeline.predict()
- 如何查看取出的数据具体是什么?在fate board里面能够看到。怎么使用fate board?。
- 如果训练失败了,怎么处理?python会提示,可以用fate board看日志。怎么使用fate board?。
保存
对于一个pipeline可以通过dump把所有信息保存到pkl中。
# save results
pipeline.dump("pipeline_saved.pkl")
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。