Pipeline过程记录

配置:Ubuntu 22.04.3,VMware虚拟机(9999/10000)

1、安装FATE客户端:在本机上安装FATE客户端。(通过Python包管理器pip来安装):

pip install fate-client

配置FATE客户端:配置本地FATE客户端以连接到两个虚拟机的FATE-Flow服务。

2、配置服务器

pipeline init --ip=xxx --port=xxx

Pipeline configuration succeeded.

检查:pipeline config show

返回:Pipeline Config: app_key: null

console_display_log: null

ip: fateflow

log_directory: null

port: 9380

secret_key: null

system_setting: {role: null}

3、编写pipeline脚本

官方文档:

# 导入FATE客户端需要的组件
from fate_client.pipeline.components.fate import CoordinatedLR, PSI, Evaluation, Reader
from fate_client.pipeline import FateFlowPipeline

# 初始化一个FateFlowPipeline实例,并设置参与方的角色和ID
pipeline = FateFlowPipeline().set_parties(guest='9999', host='10000', arbiter='10000')

# 创建一个Reader组件来读取训练数据,为guest和host分别设置数据源
reader_0 = Reader("reader_0", runtime_parties=dict(guest='9999', host='10000'))
reader_0.guest.task_parameters(namespace="experiment", name="breast_hetero_guest")  # guest的数据
reader_0.hosts[0].task_parameters(namespace="experiment", name="breast_hetero_host")  # host的数据

# 创建一个PSI(Private Set Intersection)组件,用于数据对齐,确保双方训练的是相同的样本
psi_0 = PSI("psi_0", input_data=reader_0.outputs["output_data"])

# 创建两个CoordinatedLR(协调的逻辑回归)组件,第一个用于训练,第二个用于测试
lr_0 = CoordinatedLR("lr_0", epochs=3,
                     batch_size=None,  # 批量大小,None表示使用默认值
                     optimizer={"method": "rmsprop", "optimizer_params": {"lr": 0.1}, "penalty": "l2", "alpha": 0.001},  # 优化器配置
                     init_param={"fit_intercept": True, "method": "random_uniform", "random_state": 42},  # 初始化参数
                     train_data=psi_0.outputs["output_data"],  # 训练数据来自PSI的输出
                     learning_rate_scheduler={"method": "linear", "scheduler_params": {"start_factor": 0.7,
                                                                                       "total_iters": 100}})  # 学习率调度器
            
lr_1 = CoordinatedLR('lr_1', test_data=psi_0.outputs['output_data'], input_model=lr_0.outputs['output_model'])  # 测试组件,使用lr_0训练的模型

# 创建一个Evaluation(评估)组件,用于评估模型性能
evaluation_0 = Evaluation("evaluation_0",
                          runtime_parties=dict(guest='9999'),  # 指定运行评估的参与方
                          default_eval_setting="binary",  # 评估类型,这里是二分类问题
                          input_data=lr_0.outputs["train_output_data"])  # 评估使用lr_0的输出数据

# 将所有组件添加到pipeline中,并设置数据流动的路径
pipeline.add_tasks([reader_0, psi_0, lr_0, lr_1, evaluation_0])

# 编译pipeline,准备执行
pipeline.compile();

# 执行pipeline,开始训练和评估过程
pipeline.fit()

 

4、在vm启动fateflow,找到fate_flow_server.py,启动

5、执行脚本

在本地机器的终端或命令行界面中,运行Python脚本:

python federated_learning_example.py

有些库可能没安装,我运行好几次都有报错,根据报错去装了缺少的库

6、一旦训练完成,你可以使用pipeline.get_task_info("")方法来获取特定任务的输出数据和模型。

# 获取模型结果

lr_0_model = pipeline.get_task_info("lr_0").get_output_model()

print(lr_0_model)



# 获取训练数据的评估结果

evaluation_data = pipeline.get_task_info("evaluation_0").get_output_data()["train_output_data"]

import pandas as pd

print(pd.DataFrame(evaluation_data).head())

你可能感兴趣的:(机器学习)