【FATE联邦学习】【给新手】 FATE hello world我想要一个能运行的程序!

YonggieYonggie -
【FATE联邦学习】【给新手】 FATE hello world我想要一个能运行的程序!

FATE服务的场景是各方上传数据,各方获得数据且能融合数据获得共同训练的模型。

官方文档就是以这个顺序来写的,但是吧upload data和模型获得数据和模型训练分开来写了。

整理下数据集

文档中的file path其实是FATE联邦学习github项目的相对目录,所涉及到的数据集可以从github获得。你可以直接从github上下载,也可以复制粘贴,但是要注意,检查最后一行是否空行!,如果是空行,删掉,不然FATE会报错。可以具体看我这个亲自踩坑的博客。

Python例子

下载处理好数据集后,记得修改下面代码中的路径。代码大部分是复制粘贴人家官方文档的,我只是把改放到一起的地方放到了一起,所以不用担心有错误。【记得改数据集的路径和名字】。

代码是在Linux上运行的。
默认你已经成功启动FATE服务了,如何启动FATE服务?
首先在终端把pipeline下载和初始化好

pip install fate_client

pipeline init --ip=127.0.0.1 --port=9380

另外记得check FATE服务是否正常运行pipeline config check
记得看代码注释,我要更加详细的教程。

from pipeline.backend.pipeline import PipeLine
from pipeline.component import Reader, DataTransform, Intersection, HeteroSecureBoost, Evaluation
from pipeline.interface import Data

# pipeline可以理解为一个任务,这个任务是上传数据
pipeline_upload = PipeLine().set_initiator(role='guest', party_id=9999).set_roles(guest=9999)
partition = 4
dense_data_guest = {"name": "breast_hetero_guest", "namespace": f"experiment"}
dense_data_host = {"name": "breast_hetero_host", "namespace": f"experiment"}
tag_data = {"name": "breast_hetero_host", "namespace": f"experiment"}

import os

data_base = "/root/Downloads/"
pipeline_upload.add_upload_data(file=os.path.join(data_base, "real_guest.csv"),
                                table_name=dense_data_guest["name"],             # table name
                                namespace=dense_data_guest["namespace"],         # namespace
                                head=1, partition=partition)               # 每一个数据集由table name和namespace标识

pipeline_upload.add_upload_data(file=os.path.join(data_base, "real_host.csv"),
                                table_name=dense_data_host["name"],
                                namespace=dense_data_host["namespace"],
                                head=1, partition=partition)

pipeline_upload.add_upload_data(file=os.path.join(data_base, "real_host.csv"),
                                table_name=tag_data["name"],
                                namespace=tag_data["namespace"],
                                head=1, partition=partition)

# drop=1的意思是覆盖掉先前的同名table
pipeline_upload.upload(drop=1)


# 开始获得数据并且训练,新实例化一个pipeline
pipeline = PipeLine() \
        .set_initiator(role='guest', party_id=9999) \
        .set_roles(guest=9999, host=10000)
    
# 想要获得FATe中的数据,必须通过Reader
reader_0 = Reader(name="reader_0")
# set guest parameter
# 注意reader所绑定的身份和id,想要成功获取到数据,
# 要绑定数据来源的身份和id,而非数据需求方的
reader_0.get_party_instance(role='guest', party_id=9999).component_param(
    table={"name": "breast_hetero_guest", "namespace": "experiment"})
# set host parameter
reader_0.get_party_instance(role='host', party_id=10000).component_param(
    table={"name": "breast_hetero_host", "namespace": "experiment"})

# 想要用获得的数据进行训练,必须通过datatransformer。
data_transform_0 = DataTransform(name="data_transform_0")
# set guest parameter
data_transform_0.get_party_instance(role='guest', party_id=9999).component_param(
    with_label=True,missing_fill=True)
data_transform_0.get_party_instance(role='host', party_id=[10000]).component_param(
    with_label=False,missing_fill=True)

# 融合(纵向)数据
intersect_0 = Intersection(name="intersect_0")

# 定义模型,FATE提供了一些模型,当然也可以自己开发模型
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")

pipeline.add_component(reader_0)
pipeline.add_component(data_transform_0, data=Data(data=reader_0.output.data))
pipeline.add_component(intersect_0, data=Data(data=data_transform_0.output.data))
pipeline.add_component(hetero_secureboost_0, data=Data(train_data=intersect_0.output.data))
pipeline.add_component(evaluation_0, data=Data(data=hetero_secureboost_0.output.data))
pipeline.compile()
# 前面的代码其实是构造了一个计算图,fit才算开始真正执行
pipeline.fit()

成功的话,terminal有五颜六色的提示。
在这里插入图片描述如果失败,需要通过Fateboard进行debug,Python 处的代码不会给出具体的提示。怎么使用Fateboard进行debug?

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

linux人工智能机器学习

扩展阅读

加个好友,技术交流

1628738909466805.jpg