README_cn.md 11.6 KB
Newer Older
G
guru4elephant 已提交
1 2
# PaddleFL

D
Dong Daxiang 已提交
3
PaddleFL是一个基于PaddlePaddle的开源联邦学习框架。研究人员可以很轻松地用PaddleFL复制和比较不同的联邦学习算法。开发人员也可以从padderFL中获益,因为用PaddleFL在大规模分布式集群中部署联邦学习系统很容易。PaddleFL提供很多联邦学习策略及其在计算机视觉、自然语言处理、推荐算法等领域的应用。此外,PaddleFL还将提供传统机器学习训练策略的应用,例如多任务学习、联邦学习环境下的迁移学习。依靠着PaddlePaddle的大规模分布式训练和Kubernetes对训练任务的弹性调度能力,PaddleFL可以基于全栈开源软件轻松地部署。
G
guru4elephant 已提交
4 5 6 7 8

## 联邦学习

如今,数据变得越来越昂贵,而且跨组织共享原始数据非常困难。联合学习旨在解决组织间数据隔离和数据知识安全共享的问题。联邦学习的概念是由谷歌的研究人员提出的[1,2,3]。

J
jingqinghe 已提交
9 10 11 12 13 14 15 16 17 18
## PaddleFL概述

### 横向联邦方案

<img src='images/FL-framework-zh.png' width = "1300" height = "310" align="middle"/>

在PaddleFL中,横向和纵向联邦学习策略将根据[4]中给出的分类来实现。PaddleFL也将提供在自然语言处理,计算机视觉和推荐算法等领域的应用示例。

#### A. 联邦学习策略

J
jingqinghe 已提交
19
- **纵向联邦学习**: 带privc的逻辑回归,带ABY3[11]的神经网络
J
jingqinghe 已提交
20 21 22 23 24 25 26 27 28 29 30

- **横向联邦学习**: 联邦平均 [2],差分隐私 [6],安全聚合

#### B. 训练策略

- **多任务学习** [7]

- **迁移学习** [8]

- **主动学习**

J
jingqinghe 已提交
31
### Federated Learning with MPC
J
jingqinghe 已提交
32

J
jingqinghe 已提交
33 34
<img src='images/PFM-overview.png' width = "1000" height = "446" align="middle"/>

J
jingqinghe 已提交
35
Paddle FL MPC(PFM) 是一个基于PaddlePaddle的隐私保护深度学习框架。Paddle Encrypted基于多方计算(MPC)实现安全训练及预测,拥有与PaddlePaddle相同的运行机制及编程范式。
J
jingqinghe 已提交
36

J
jingqinghe 已提交
37
PFM 设计与PaddlePaddle相似,没有密码学相关背景的用户亦可简单的对加密的数据进行训练和预测。同时,PaddlePaddle中丰富的模型和算法可以轻易地迁移到PFM中。
J
jingqinghe 已提交
38

J
jingqinghe 已提交
39
作为PaddleFL的一个重要组成部分,PFM可以很好地支持联邦学习,包括横向、纵向及联邦迁移学习等多个场景。既提供了可靠的安全性,也拥有可观的性能。
J
jingqinghe 已提交
40

J
jingqinghe 已提交
41 42
## 编译与安装

J
jingqinghe 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55
### 使用docker安装

```sh
#Pull and run the docker
docker pull hub.baidubce.com/paddlefl/paddle_fl:latest
docker run --name <docker_name> --net=host -it -v $PWD:/root <image id> /bin/bash

#Install paddle_fl
pip install paddle_fl
```

### 从源码编译

J
jingqinghe 已提交
56
#### A. 环境准备
J
jingqinghe 已提交
57 58 59 60

* CentOS 6 or CentOS 7 (64 bit)
* Python 2.7.15+/3.5.1+/3.6/3.7 ( 64 bit) or above
* pip or pip3 9.0.1+ (64 bit)
J
jingqinghe 已提交
61
* PaddlePaddle release 1.8
J
jingqinghe 已提交
62 63 64 65
* Redis 5.0.8 (64 bit)
* GCC or G++ 4.8.3+
* cmake 3.15+

J
jingqinghe 已提交
66
#### B. 克隆源代码并编译安装
J
jingqinghe 已提交
67 68 69 70 71 72 73 74 75 76

获取源代码
```sh
git clone https://github.com/PaddlePaddle/PaddleFL
cd /path/to/PaddleFL

# Checkout stable release
mkdir build && cd build
```

J
jingqinghe 已提交
77
执行编译指令, `PYTHON_EXECUTABLE` 为安装了PaddlePaddle的可执行python路径, `CMAKE_CXX_COMPILER` 为指定的g++路径。 `PYTHON_INCLUDE_DIRS` 是相应的include路径,可以用如下指令获得:
J
jingqinghe 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

```sh
${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_inc;print(get_python_inc())"
```
之后就可以执行编译和安装的指令
```sh
cmake ../ -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DPYTHON_INCLUDE_DIRS=${python_include_dir} -DCMAKE_CXX_COMPILER=${g++_path}
make -j$(nproc)
```
安装对应的安装包

```sh
make install
cd /path/to/PaddleFL/python
${PYTHON_EXECUTABLE} setup.py sdist bdist_wheel
pip or pip3 install dist/***.whl -U
```

J
jingqinghe 已提交
96 97 98 99 100 101 102 103
我们也提供了稳定的redis安装包, 可供下载。

```sh
wget --no-check-certificate https://paddlefl.bj.bcebos.com/redis-stable.tar
tar -xf redis-stable.tar
cd redis-stable &&  make
```

G
guru4elephant 已提交
104 105
## PaddleFL框架设计

J
jingqinghe 已提交
106 107
### 横向联邦方案

Q
qjing666 已提交
108
<img src='images/FL-training.png' width = "1300" height = "450" align="middle"/>
G
guru4elephant 已提交
109

D
Dong Daxiang 已提交
110
在PaddeFL中,用于定义联邦学习任务和联邦学习训练工作的组件如下:
G
guru4elephant 已提交
111

J
jingqinghe 已提交
112
#### A. 编译时
G
guru4elephant 已提交
113

J
jingqinghe 已提交
114
- **FL-Strategy**: 用户可以使用FL-Strategy定义联邦学习策略,例如Fed-Avg[2]。
G
guru4elephant 已提交
115 116 117

- **User-Defined-Program**: PaddlePaddle的程序定义了机器学习模型结构和训练策略,如多任务学习。

D
Dong Daxiang 已提交
118
- **Distributed-Config**: 在联邦学习中,系统会部署在分布式环境中。分布式训练配置定义分布式训练节点信息。
G
guru4elephant 已提交
119

D
Dong Daxiang 已提交
120
- **FL-Job-Generator**: 给定FL-Strategy, User-Defined Program 和 Distributed Training Config,联邦参数的Server端和Worker端的FL-Job将通过FL Job Generator生成。FL-Jobs 被发送到组织和联邦参数服务器以进行联合训练。
G
guru4elephant 已提交
121

J
jingqinghe 已提交
122
#### B. 运行时
G
guru4elephant 已提交
123 124 125

- **FL-Server**: 在云或第三方集群中运行的联邦参数服务器。

D
Dong Daxiang 已提交
126
- **FL-Worker**: 参与联合学习的每个组织都将有一个或多个与联合参数服务器通信的Worker。
G
guru4elephant 已提交
127

Q
qjing666 已提交
128 129
- **FL-Scheduler**: 训练过程中起到调度Worker的作用,在每个更新周期前,决定哪些Worker可以参与训练。

J
jingqinghe 已提交
130
请参考更多的[例子](./python/paddle_fl/paddle_fl/examples), 获取更多的信息。
J
jingqinghe 已提交
131

J
jingqinghe 已提交
132
### Federated Learning with MPC
J
jingqinghe 已提交
133

J
jingqinghe 已提交
134
Paddle FL MPC 中的安全训练和推理任务是基于高效的多方计算协议实现的,如ABY3[11]
J
jingqinghe 已提交
135

J
jingqinghe 已提交
136 137 138
在ABY3[11]中,参与方可分为:输入方、计算方和结果方。输入方为训练数据及模型的持有方,负责加密数据和模型,并将其发送到计算方。计算方为训练的执行方,基于特定的多方安全计算协议完成训练任务。计算方只能得到加密后的数据及模型,以保证数据隐私。计算结束后,结果方会拿到计算结果并恢复出明文数据。每个参与方可充当多个角色,如一个数据拥有方也可以作为计算方参与训练。

PFM的整个训练及推理过程主要由三个部分组成:数据准备,训练/推理,结果解析。
J
jingqinghe 已提交
139

J
jingqinghe 已提交
140
#### A. 数据准备
J
jingqinghe 已提交
141

J
jingqinghe 已提交
142
##### 1. 私有数据对齐
J
jingqinghe 已提交
143

J
jingqinghe 已提交
144
PFM允许数据拥有方(数据方)在不泄露自己数据的情况下,找出多方共有的样本集合。此功能在纵向联邦学习中非常必要,因为其要求多个数据方在训练前进行数据对齐,并且保护用户的数据隐私。凭借PSI算法,PFM可以在一秒内完成6万条数据的对齐。
J
jingqinghe 已提交
145

J
jingqinghe 已提交
146
##### 2. 数据加密及分发
J
jingqinghe 已提交
147

J
jingqinghe 已提交
148
在PFM中,数据方将数据和模型用秘密共享[10]的方法加密,然后用直接传输或者数据库存储的方式传到计算方。每个计算方只会拿到数据的一部分,因此计算方无法还原真实数据。
J
jingqinghe 已提交
149

J
jingqinghe 已提交
150
#### B. 训练及推理
J
jingqinghe 已提交
151

J
jingqinghe 已提交
152 153
<img src='images/PFM-design.png' width = "1000" height = "622" align="middle"/>

J
jingqinghe 已提交
154
像PaddlePaddle一样,训练和推理任务可以分为编译阶段和运行阶段。
J
jingqinghe 已提交
155

J
jingqinghe 已提交
156
##### 1. 编译时
J
jingqinghe 已提交
157

J
jingqinghe 已提交
158
* **确定MPC环境**:用户需要指定用到的MPC协议,并配置网络环境。现有版本的Paddle Encrypted只支持"ABY3"协议。更多的协议将在后续版本中支持。
J
jingqinghe 已提交
159
* **用户定义训练任务**:用户可以根据PFM提供的安全接口,定义集齐学习网络以及训练策略。
J
jingqinghe 已提交
160
##### 2. 运行时
J
jingqinghe 已提交
161

J
jingqinghe 已提交
162 163 164
一个Paddle Encrypted程序实际上就是一个PaddlePaddle程序。在运行时,PFM的程序将会转变为PaddlePaddle中的ProgramDesc,并交给Executor运行。以下是运行阶段的主要概念:
* **运算节点**:计算节点是与计算方相对应的实体。在实际部署中,它可以是裸机、云虚拟机、docker甚至进程。PFM在每次运行中只需要三个计算节点,这由底层ABY3协议决定。Paddle Encrypted程序将在所有三个计算节点上并行部署和运行。
* **基于MPC的算子**:PFM 为操作加密数据提供了特殊的算子,这些算子在PaddlePaddle框架中实现,基于像ABY3一样的MPC协议。像PaddlePaddle中一样,在运行时PFM的算子将被创建并按照顺序执行。
J
jingqinghe 已提交
165
#### C. 结果重构
G
guru4elephant 已提交
166

J
jingqinghe 已提交
167
安全训练和推理工作完成后,模型(或预测结果)将由计算方以加密形式输出。结果方可以收集加密的结果,使用PFM中的工具对其进行解密,并将明文结果传递给用户。
J
jingqinghe 已提交
168 169

请参考[MPC的例子](./python/paddle_fl/mpc/examples),以获取更多的信息。
Q
qjing666 已提交
170
## Kubernetes简单部署
Q
qjing666 已提交
171

J
jingqinghe 已提交
172
### 横向联邦方案
Q
qjing666 已提交
173 174
```sh
 
J
jingqinghe 已提交
175
kubectl apply -f ./python/paddle_fl/paddle_fl/examples/k8s_deployment/master.yaml
Q
qjing666 已提交
176 177

```
J
jingqinghe 已提交
178 179 180
请参考[K8S部署实例](./python/paddle_fl/paddle_fl/examples/k8s_deployment/README.md)

也可以参考[K8S集群申请及kubectl安装](./python/paddle_fl/paddle_fl/examples/k8s_deployment/deploy_instruction.md) 配置自己的K8S集群
J
jingqinghe 已提交
181

J
jingqinghe 已提交
182
### Federated Learning with MPC 
J
jingqinghe 已提交
183 184

会在后续版本中发布。
G
guru4elephant 已提交
185 186
## 性能测试

J
jingqinghe 已提交
187
### 横向联邦方案
D
Dong Daxiang 已提交
188 189
Gru4Rec [9] 在基于会话的推荐中引入了递归神经网络模型。PaddlePaddle的GRU4RC实现代码在 https://github.com/PaddlePaddle/models/tree/develop/PaddleRec/gru4rec. 一个基于联邦学习训练Gru4Rec模型的示例请参考[Gru4Rec in Federated Learning](https://paddlefl.readthedocs.io/en/latest/examples/gru4rec_examples.html)

J
jingqinghe 已提交
190
### Federated Learning with MPC 
J
jingqinghe 已提交
191

J
jingqinghe 已提交
192
#### A. 精度测试
J
jingqinghe 已提交
193

J
jingqinghe 已提交
194
##### 1. 训练参数
J
jingqinghe 已提交
195 196 197 198 199

- 数据集:波士顿房价预测。
- 训练轮数: 20
- Batch Size:10

J
jingqinghe 已提交
200
##### 2. 实验结果
J
jingqinghe 已提交
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224

| Epoch/Step | paddle_fl.mpc | Paddle |
| ---------- | ------------- | ------ |
| Epoch=0, Step=0  | 738.39491 | 738.46204 |
| Epoch=1, Step=0  | 630.68834 | 629.9071 |
| Epoch=2, Step=0  | 539.54683 | 538.1757 |
| Epoch=3, Step=0  | 462.41159 | 460.64722 |
| Epoch=4, Step=0  | 397.11516 | 395.11017 |
| Epoch=5, Step=0  | 341.83102 | 339.69815 |
| Epoch=6, Step=0  | 295.01114 | 292.83597 |
| Epoch=7, Step=0  | 255.35141 | 253.19429 |
| Epoch=8, Step=0  | 221.74739 | 219.65132 |
| Epoch=9, Step=0  | 193.26459 | 191.25981 |
| Epoch=10, Step=0  | 169.11423 | 167.2204 |
| Epoch=11, Step=0  | 148.63138 | 146.85835 |
| Epoch=12, Step=0  | 131.25081 | 129.60391 |
| Epoch=13, Step=0  | 116.49708 | 114.97599 |
| Epoch=14, Step=0  | 103.96669 | 102.56854 |
| Epoch=15, Step=0  | 93.31706 | 92.03858 |
| Epoch=16, Step=0  | 84.26219 | 83.09653 |
| Epoch=17, Step=0  | 76.55664 | 75.49785 |
| Epoch=18, Step=0  | 69.99673 | 69.03561 |
| Epoch=19, Step=0  | 64.40562 | 63.53539 |

D
Dong Daxiang 已提交
225
## 正在进行的工作
G
guru4elephant 已提交
226

J
jingqinghe 已提交
227 228
- 纵向联合学习支持更多的模型。
- 发布纵向联邦学习K8S部署方案。
G
guru4elephant 已提交
229 230 231 232 233 234 235 236 237 238 239

## 参考文献

[1]. Jakub Konečný, H. Brendan McMahan, Daniel Ramage, Peter Richtárik. **Federated Optimization: Distributed Machine Learning for On-Device Intelligence.** 2016

[2]. H. Brendan McMahan, Eider Moore, Daniel Ramage, Blaise Agüera y Arcas. **Federated Learning of Deep Networks using Model Averaging.** 2017

[3]. Jakub Konečný, H. Brendan McMahan, Felix X. Yu, Peter Richtárik, Ananda Theertha Suresh, Dave Bacon. **Federated Learning: Strategies for Improving Communication Efficiency.** 2016

[4]. Qiang Yang, Yang Liu, Tianjian Chen, Yongxin Tong. **Federated Machine Learning: Concept and Applications.** 2019

J
jingqinghe 已提交
240
[5]. Kai He, Liu Yang, Jue Hong, Jinghua Jiang, Jieming Wu, Xu Dong et al. **PrivC  - A framework for efficient Secure Two-Party Computation.** In Proc. of SecureComm 2019
G
guru4elephant 已提交
241 242 243 244 245 246 247

[6]. Martín Abadi, Andy Chu, Ian Goodfellow, H. Brendan McMahan, Ilya Mironov, Kunal Talwar, Li Zhang. **Deep Learning with Differential Privacy.** 2016

[7]. Virginia Smith, Chao-Kai Chiang, Maziar Sanjabi, Ameet Talwalkar. **Federated Multi-Task Learning** 2016

[8]. Yang Liu, Tianjian Chen, Qiang Yang. **Secure Federated Transfer Learning.** 2018

D
Dong Daxiang 已提交
248
[9]. Balázs Hidasi, Alexandros Karatzoglou, Linas Baltrunas, Domonkos Tikk. **Session-based Recommendations with Recurrent Neural Networks.** 2016
J
jingqinghe 已提交
249 250 251 252

[10]. https://en.wikipedia.org/wiki/Secret_sharing

[11]. Payman Mohassel and Peter Rindal. **ABY3: A Mixed Protocol Framework for Machine Learning.** In Proc. of CCS 2018