关于人工智能:联邦学习FATE数据上传读取训练保存

40次阅读

共计 2998 个字符,预计需要花费 8 分钟才能阅读完成。

fate 如何装置?本文续这篇文章。

背景

fate 是一个服务,还原联邦学习,所以分 client 和 host 两种身份,一般来说用户都是 client,用户想要上传本人的数据,合并别人数据最终取得一个更好的模型,所以要“上传”数据。

在 FATE 框架中,横向联邦的场景被称为 homo,纵向的被称为 hetero,比方 纵向平安晋升树模型就叫做 hetero secure boost。

上传

官网文档:https://fate.readthedocs.io/e…
强烈建议对着官网文档看我这个!

工具

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 开发

python 文件如下代码即可上传 csv 文件。
每一个上传的数据都会有本人的 table_name 和 namespace,fate 用这两个字段来命名辨别每一个上传的数据。

from pipeline.backend.pipeline import PipeLine

pipeline = PipeLine() \
        .set_initiator(role='guest', party_id=9999) \
        .set_roles(guest=9999, host=10000) # what do guest and host stands for?


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) # what does drop=1 or 0 mean?

胜利运行后,terminal 会呈现相似字样。

从 FATE 服务中取得数据

官网文档:https://fate.readthedocs.io/e…强烈建议对着官网文档看我这个!

文档中的 sbt,其实就是 Secure Boost Tree,一个决策树模型,因为应用了 FATE,所以叫 Secure。

工具

FATE 中应用 Reader 类,从 FATE 框架中取得数据。

文档中说“load data”,我一开始认为 load data 是从本地 load,汗!文档最好改成 load data from FATE service……

应用 Reader 类取得数据后,能够应用 DataTransform 类进行变换。文档和代码有提,能够参考文档。应用 Intersection 能够取得两份数据的 PSI 值,依据 Component 文档,PSI 是两份数据中交加水平的指标,FATE 当然还提供了更多的函数,文档的代码只是举了一个 PSI 的例子。

Python

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)

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})
evaluation_0 = Evaluation(name="evaluation_0", eval_type="binary")


# 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.add_component(evaluation_0, data=Data(data=hetero_secureboost_0.output.data))
pipeline.compile()


# training
pipeline.fit()

# load another dataset via predict_pipeline
# predict_pipeline.predict()

# save results
pipeline.dump("pipeline_saved.pkl")

应用 pipeline 确认操作对象;
定义 reader 后绑定 reader 的对象,data_transform 也是一样。
如何查看取出的数据具体是什么?(之后补上

如果训练失败了,python 会提醒,能够用 fate board 或者 fate client 查看。
fate board 和 fate client 怎么应用?(之后补上

对于一个 pipeline 能够通过 dump 把所有信息保留到 pkl 中。

正文完
 0