Skip to content

Commit

Permalink
Add Chinese Version documentations
Browse files Browse the repository at this point in the history
Signed-off-by: tanmc123 <[email protected]>
  • Loading branch information
tanmc123 committed Dec 16, 2019
1 parent 9933929 commit 3283739
Show file tree
Hide file tree
Showing 5 changed files with 667 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<img src="./doc/images/FATE_logo.png">
</div>

[DOC](./doc) | [Quick Start](./examples/federatedml-1.x-examples) | [中文](./README_CN.md)

FATE (Federated AI Technology Enabler) is an open-source project initiated by Webank's AI Department to provide a secure computing framework to support the federated AI ecosystem. It implements secure computation protocols based on homomorphic encryption and multi-party computation (MPC). It supports federated learning architectures and secure computation of various machine learning algorithms, including logistic regression, tree-based algorithms, deep learning and transfer learning.

Expand Down
104 changes: 104 additions & 0 deletions README_CN.md
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)
266 changes: 266 additions & 0 deletions doc/dsl及conf配置指南.md
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。
Loading

0 comments on commit 3283739

Please sign in to comment.