forked from FederatedAI/FATE
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: tanmc123 <[email protected]>
- Loading branch information
Showing
5 changed files
with
667 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![CodeStyle](https://img.shields.io/badge/Check%20Style-Google-brightgreen)](https://checkstyle.sourceforge.io/google_style.html) [![Pinpoint Satellite](https://img.shields.io/endpoint?url=https%3A%2F%2Fscan.sbrella.com%2Fadmin%2Fapi%2Fv1%2Fpinpoint%2Fshield%2FFederatedAI%2FFATE)](https://github.com/mmyjona/FATE-Serving/pulls) [![Style](https://img.shields.io/badge/Check%20Style-Black-black)](https://checkstyle.sourceforge.io/google_style.html) | ||
|
||
<div align="center"> | ||
<img src="./doc/images/FATE_logo.png"> | ||
</div> | ||
|
||
[DOC](./doc) | [Quick Start](./examples/federatedml-1.x-examples) | [English](./README.md) | ||
|
||
FATE (Federated AI Technology Enabler) 是微众银行AI部门发起的开源项目,为联邦学习生态系统提供了可靠的安全计算框架。FATE项目使用多方安全计算 (MPC) 以及同态加密 (HE) 技术构建底层安全计算协议,以此支持不同种类的机器学习的安全计算,包括逻辑回归、基于树的算法、深度学习和迁移学习等。 | ||
|
||
FATE官方网站:<https://www.fedai.org/> | ||
|
||
## 参与到FATE开源社区 | ||
|
||
* 加入我们的邮件列表 [Fate-FedAI Group IO](https://groups.io/g/Fate-FedAI),您可以提出问题或参与讨论。 | ||
|
||
* 对于常见问题, 我们为您提供了 [FAQ文档](https://github.com/WeBankFinTech/FATE/wiki)。 | ||
|
||
* 请使用 [issues](https://github.com/WeBankFinTech/FATE/issues) 提交BUG。 | ||
|
||
* 请使用 [pull requests](https://github.com/WeBankFinTech/FATE/pulls) 提交、贡献代码。 | ||
|
||
|
||
## FATE中的联邦学习算法 | ||
|
||
FATE目前支持三种联邦学习算法:横向联邦学习、纵向联邦学习以及迁移学习。算法细节请参考文档 [federatedml](./federatedml) 。 | ||
|
||
|
||
## 安装教程 | ||
|
||
FATE支持Linux或Mac操作系统,并根据不同的应用场景分为单机部署以及集群部署。 | ||
|
||
运行环境: jdk1.8+、Python3.6、python virtualenv、mysql5.6+、redis-5.0.2 | ||
|
||
#### 单机部署 | ||
|
||
FATE为开发人员提供了单机部署架构版本。单机部署版本可以帮助开发人员快速开发以及测试FATE。该版本支持两种类型:1)Docker;2)手动编译。 | ||
|
||
具体细节请参阅单机部署指南:[standalone-deploy](./standalone-deploy/)。 | ||
|
||
#### 集群部署 | ||
|
||
FATE同样为大数据场景提供了分布式运行部署架构版本。从单机部署迁移到集群部署仅需要更改配置文件,不需要更改算法。 | ||
|
||
具体细节请参阅集群部署指南:[cluster-deploy](./cluster-deploy)。 | ||
|
||
## 运行测试 | ||
|
||
./federatedml/test 文件夹中提供了所有单元测试的脚本。 | ||
|
||
安装FATE后,可以使用以下命令运行测试: | ||
|
||
> sh ./federatedml/test/run_test.sh | ||
如果FATE被正确安装,那么所有单元测试都将成功通过。 | ||
|
||
## 示例程序 | ||
|
||
### 快速开始 | ||
|
||
我们提供了一个用于快速搭建训练任务的python脚本作为示例。该脚本位于:["./examples/federatedml-1.0-examples"](./examples/federatedml-1.0-examples) | ||
|
||
#### 单机部署版本 | ||
1. 启动单机部署版本的 hetero-lr 任务 (默认) | ||
> python quick_run.py | ||
|
||
#### 集群版本 | ||
|
||
1. Host party: | ||
> python quick_run.py -r host | ||
2. Guest party: | ||
> python quick_run.py -r guest | ||
生成的配置文件存储在名为 **user_config** 的新创建的文件夹中 | ||
|
||
#### 启动预测任务 | ||
|
||
一旦完成训练任务,就可以开始相应的预测任务。您需要将quick_run.py脚本中的“ TASK”变量修改为“ predict”: | ||
``` | ||
# 定义任务类型 | ||
# TASK = 'train' | ||
TASK = 'predict' | ||
``` | ||
然后,您需要做的就是运行以下命令: | ||
> python quick_run.py | ||
请注意,仅当您完成训练任务后,执行此命令才有效。 | ||
|
||
### 获取模型并检查结果 | ||
FATE提供了名为 fate-flow 的工具用来跟踪组件输出模型或日志。fate-flow的部署和使用可以在 [这里](./fate_flow/README.md) 找到。 | ||
|
||
|
||
## 文档资料 | ||
### API 文档 | ||
FATE在 [doc-api](./doc/api/) 文件夹中提供了API文档,包括 federatedml, eggroll, federation. | ||
### 开发者文档 | ||
如何使用FATE开发联邦学习算法?您可以在 [develop-guide](./doc/develop_guide.md) 中查看FATE开发指南。 | ||
|
||
### 其他文档 | ||
FATE还在 [doc](./doc/) 中提供了许多其他文档。这些文档可以帮助您更好地了解FATE。 | ||
### License | ||
[Apache License 2.0](LICENSE) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,266 @@ | ||
## DSL 配置和运行配置 | ||
|
||
为了让任务模型的构建更加灵活,目前 FATE 使用了一套自定的领域特定语言 (DSL) 来描述任务。在 DSL 中,各种模块(例如数据读写 data_io,特征工程 feature-engineering, 回归 regression,分类 classification)可以通向一个有向无环图 (DAG) 组织起来。通过各种方式,用户可以根据自身的需要,灵活地组合各种算法模块。 | ||
|
||
除此之外,每个模块都有不同的参数需要配置,不同的 party 对于同一个模块的参数也可能有所区别。为了简化这种情况,对于每一个模块,FATE 会将所有 party 的不同参数保存到同一个运行配置文件(Submit Runtime Conf)中,并且所有的 party 都将共用这个配置文件。 | ||
|
||
这个指南将会告诉你如何创建一个 DSL 配置文件。 | ||
|
||
### DSL 配置文件 | ||
|
||
DSL 的配置文件采用 json 格式,实际上,整个配置文件就是一个 json 对象 (dict)。在这个 dict 的第一级是 "components",用来表示这个任务将会使用到的各个模块。 | ||
|
||
``` | ||
{ | ||
"components" : { | ||
... | ||
} | ||
``` | ||
|
||
每个独立的模块定义在 "components" 之下,例如: | ||
|
||
``` | ||
"dataio_0": { | ||
"module": "DataIO", | ||
"input": { | ||
"data": { | ||
"data": [ | ||
"args.train_data" | ||
] | ||
} | ||
}, | ||
"output": { | ||
"data": ["train"], | ||
"model": ["dataio"] | ||
}, | ||
"need_deploy": true | ||
} | ||
``` | ||
|
||
正如这个例子,用户需要使用模块名加数字 `_<num>` 作为对应模块的 key,例如 `dataio_0`,并且数字应从 0 开始计数。 | ||
|
||
#### 参数说明 | ||
|
||
1. module: 用来指定使用的模块。这个参数的内容需要和 `federatedml/conf/setting_conf` 下各个模块的文件名保持一致(不包括 .json 后缀)。 | ||
|
||
2. input: 分为两种输入类型,分别是 data 和 model。 | ||
|
||
1. Data: 有三种可能的输入类型 | ||
|
||
1. data: 一般被用于 data_io 模块, feature_engineering 模块或者 evaluation 模块 | ||
2. train_data: 一般被用于 homo_lr, heero_lr 和 secure_boost 模块。如果出现了 train_data 字段,那么这个任务将会被识别为一个 fit 任务 | ||
3. eval_data: 如果存在 train_data 字段,那么该字段是可选的。如果选择保留该字段,则 eval_data 指向的数据将会作为 validation set。若不存在 train_data 字段,则这个任务将被视作为一个 predict 或 transform 任务。 | ||
|
||
2. Model: 有两种可能的输入类型: | ||
1. model: 用于同种类型组件的模型输入。例如,hetero_binning_0 会对模型进行 fit,然后 hetero_binning_1 将会使用 hetero_binning_0 的输出用于 predict 或 transform。代码示例: | ||
|
||
``` | ||
"hetero_feature_binning_1": { | ||
"module": "HeteroFeatureBinning", | ||
"input": { | ||
"data": { | ||
"data": [ | ||
"dataio_1.eval_data" | ||
] | ||
}, | ||
"model": [ | ||
"hetero_feature_binning_0.fit_model" | ||
] | ||
}, | ||
"output": { | ||
"data": ["eval_data"], | ||
"model": ["eval_model"] | ||
} | ||
} | ||
``` | ||
2. isometric_model: 用于指定继承上游组件的模型输入。 例如,feature selection 的上游组件是 feature binning,它将会用到 feature binning 的信息来作为 feature importance。代码示例: | ||
``` | ||
"hetero_feature_selection_0": { | ||
"module": "HeteroFeatureSelection", | ||
"input": { | ||
"data": { | ||
"data": [ | ||
"hetero_feature_binning_0.train" | ||
] | ||
}, | ||
"isometric_model": [ | ||
"hetero_feature_binning_0.output_model" | ||
] | ||
}, | ||
"output": { | ||
"data": ["train"], | ||
"model": ["output_model"] | ||
} | ||
} | ||
``` | ||
3. output: 和 input 一样,有 data 和 model 两种类型。 | ||
1. Data: 指定输出的 data 名 | ||
2. Model: 指定输出的 model 名 | ||
示例同上 | ||
### 运行配置 Submit Runtime Conf | ||
除了 DSL 的配置文件之外,用户还需要准备一份运行配置(Submit Runtime Conf)用于设置各个组件的参数。 | ||
1. initiator: | ||
在运行配置的开头,用户需要定义 initiator。例如 | ||
``` | ||
"initiator": { | ||
"role": "guest", | ||
"party_id": 10000 | ||
}, | ||
``` | ||
2. role: | ||
所有参与这个任务的 roles 都需要在运行配置中指定。在 role 字段中,每一个元素代表一种角色以及承担这个角色的 party_id。每个角色的 party_id 以列表形式存在,因为一个任务可能涉及到多个 party 担任同一种角色。 | ||
``` | ||
"role": { | ||
"guest": [ | ||
10000 | ||
], | ||
"host": [ | ||
10000 | ||
], | ||
"arbiter": [ | ||
10000 | ||
] | ||
} | ||
``` | ||
3. role_parameters: | ||
这一部分的参数对于不同的 party 都有所区别。同样地,每一个参数也是用列表的方式呈现。 | ||
1. 在 role_parameters 中,party 名被作为每一项元素的 key,而 value 则是具体提的参数内容。例如: | ||
``` | ||
"guest": { | ||
"args": { | ||
"data": { | ||
"train_data": [ | ||
{ | ||
"name": "1ca0d9eea77e11e9a84f5254005e961b", | ||
"namespace": "arbiter-10000#guest-10000#host-10000#train_input#guest#10000" | ||
} | ||
] | ||
} | ||
}, | ||
"dataio_0": { | ||
"with_label": [ | ||
true | ||
], | ||
... | ||
} | ||
}, | ||
"host": { | ||
"args": { | ||
"data": { | ||
"train_data": [ | ||
{ | ||
"name": "3de22bdaa77e11e99c5d5254005e961b", | ||
"namespace": "arbiter-10000#guest-10000#host-10000#train_input#host#10000" | ||
} | ||
] | ||
} | ||
}, | ||
"dataio_0": { | ||
... | ||
} | ||
... | ||
} | ||
``` | ||
就像上面这个例子,对于每一个 party,它们的输入参数 train_data,eval_data 都应该以列表形式存在。name 和 namespace 字段则是用来指定用来上传数据的表格位置。 | ||
用户还可以分别配置每一个组件的参数。组件名需要和 DSL 配置文件中的组件名保持一致。每个组件具体的参数列表可以在 `federatedml/param` 的 `Param` 类中找到。 | ||
4. algorithm_parameters: | ||
如果用户希望定义一些所有 party 都共享的参数,那么可以在 algorithm_parameters 中设置。例如: | ||
``` | ||
"hetero_feature_binning_0": { | ||
... | ||
}, | ||
"hetero_feature_selection_0": { | ||
... | ||
}, | ||
"hetero_lr_0": { | ||
"penalty": "L2", | ||
"optimizer": "rmsprop", | ||
"eps": 1e-5, | ||
"alpha": 0.01, | ||
"max_iter": 10, | ||
"converge_func": "diff", | ||
"batch_size": 320, | ||
"learning_rate": 0.15, | ||
"init_param": { | ||
"init_method": "random_uniform" | ||
}, | ||
"cv_param": { | ||
"n_splits": 5, | ||
"shuffle": false, | ||
"random_seed": 103, | ||
"need_cv": false, | ||
} | ||
}, | ||
``` | ||
和上一个部分一样,在 algorithm_parameters 中,每一个参数的 key 都是在 DSL 配置文件中定义好的组件名。 | ||
在完成这些配置文件并提交任务之后,fate-flow 将会把 role_parameters 和 algorithm_parameters 中的所有参数合并。如果合并之后,仍然存在没有定义的参数,fate-flow 则会使用默认值。fate-flow 会将这些参数分发到对应的 party,并开始联邦建模任务。 | ||
### 多个 Host 情况下的配置 | ||
对于存在多个 Host 的模型,所有 Host 的 party_id 都应该在 role 中列举出来。例如: | ||
``` | ||
"role": { | ||
"guest": [ | ||
10000 | ||
], | ||
"host": [ | ||
10000, 10001, 10002 | ||
], | ||
"arbiter": [ | ||
10000 | ||
] | ||
} | ||
``` | ||
每个针对 Host 的参数都应该以列表的方式储存,列表中组件的个数和 Host 的个数应保持一致。 | ||
``` | ||
"host": { | ||
"args": { | ||
"data": { | ||
"train_data": [ | ||
{ | ||
"name": "hetero_breast_host_1", | ||
"namespace": "hetero_breast_host" | ||
}, | ||
{ | ||
"name": "hetero_breast_host_2", | ||
"namespace": "hetero_breast_host" | ||
}, | ||
{ | ||
"name": "hetero_breast_host_3", | ||
"namespace": "hetero_breast_host" | ||
} | ||
|
||
] | ||
} | ||
}, | ||
"dataio_0": { | ||
"with_label": [false, false, false], | ||
"output_format": ["dense", "dense", "dense"], | ||
"outlier_replace": [true, true, true] | ||
}, | ||
``` | ||
注意 algorithm_parameters 里面的参数不需要额外处理,FATE 会自动把这些参数复制给每一个 party。 |
Oops, something went wrong.