配置: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())