FATE:开源联邦学习工业级框架实践

FreeGuideOnline 最新 2026-06-28

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,...}}}'