FATE:开源联邦学习工业级框架实践
bash wget https://raw.githubusercontent.com/FederatedAI/FATE/master/docker-deploy/docker-deploy.sh chmod +x docker-deploy.sh
### 步骤 2:拉取并启动镜像
```bash
# 例如选择 v1.11.0 版本,服务类型选择 standalone
./docker-deploy.sh -v v1.11.0 -t standalone
启动后,会创建 fate_client、fate_flow、fate_board 等容器。
步骤 3:验证环境
访问 FATE Board 可视化界面:http://localhost:8080
默认账号密码:admin / admin
进入容器测试 CLI:
docker exec -it confs-1_client_1 bash
flow init --ip 127.0.0.1 --port 9380
flow table bind # 查看数据表绑定情况
关键组件使用详解
FATE Flow 命令入门
FATE 使用命令行进行作业提交与管理。
提交训练作业
flow job submit -c ./examples/dsl/v2/hetero_logistic_regression/hetero_lr_train_conf.json -d ./examples/dsl/v2/hetero_logistic_regression/hetero_lr_train_dsl.json
-c指定配置文件(参与方角色、算法参数等)-d指定 DSL 文件(数据读取、组件描述)
查询作业状态
flow job query -j $JOB_ID
停止作业
flow job stop -j $JOB_ID
DSL 与 CONF 文件解读
FATE 使用两层编排定义任务:
- DSL(Domain Specific Language)JSON:描述组件拓扑,例如
{
"components": {
"reader_0": {
"module": "Reader",
"output": ["data"]
},
"hetero_lr_0": {
"module": "HeteroLR",
"input": {
"data": {
"data": ["reader_0.data"]
}
}
}
}
}
- CONF JSON:指定每个组件的运行时参数,如学习率、加密密钥长度、参与方角色等。
实战:纵向联邦 Logistic 回归
场景模拟
假设 Guest 方拥有标签 Y,Host 方拥有另一部分特征 X2,两者样本 ID 相同。目标:在不暴露 Host 特征和 Guest 标签的前提下联合训练逻辑回归模型。
数据准备
需要准备两个 UCI 信用卡数据集(或任一表格数据),按列切分。 Guest 数据示例(含 id、x0、x1...、y):
id,x0,x1,...,y
1001,0.1,0.3,...,1
Host 数据示例(含 id、x5、x6...):
id,x5,x6,...
1001,0.7,0.2,...
上传数据到 FATE:
flow data upload -c examples/dsl/v2/upload/upload_guest.json
flow data upload -c examples/dsl/v2/upload/upload_host.json
upload_guest.json 中需指定文件的路径、表名和命名空间。
训练配置
编辑 hetero_lr_train_conf.json,关键配置如下:
{
"dsl_version": 2,
"initiator": {
"role": "guest",
"party_id": 9999
},
"role": {
"guest": [9999],
"host": [10000],
"arbiter": [10000]
},
"component_parameters": {
"common": {
"hetero_lr_0": {
"penalty": "L2",
"optimizer": "nesterov_momentum_sgd",
"alpha": 0.01,
"max_iter": 30,
"batch_size": 500,
"learning_rate": 0.1,
"init_param": {
"init_method": "random_uniform"
}
}
}
}
}
DSL 文件定义组件链路:Reader → DataTransform → Intersect(样本对齐)→ HeteroLR → Evaluation。
提交任务并查看结果
flow job submit -c hetero_lr_train_conf.json -d hetero_lr_train_dsl.json
任务成功后,通过 FATE Board 查看组件输出,如模型精度、损失曲线等。模型文件会保存为 .pkl,后续可用于 Serving 发布。
模型发布与在线推理
在生产中,训练好的模型需要部署为实时服务。
1. 将模型加载到 FATE Serving
flow model deploy --model-id $MODEL_ID --model-version $MODEL_VERSION
2. 启动 Serving 服务 在 FATE Serving 容器中启动 HTTP 或 gRPC 服务。
3. 发起推理请求
curl -X POST http://serving_host:8059/federation/v1/inference \
-d '{"head":{"serviceId":"lr_test"},"body":{"featureData":{"x0":0.5,"x1":0.3,...}}}'