PaddleFL Paddle联邦学习(Paddle Federated Learning)

PaddleFL(Paddle Federated Learning)

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

PaddleFL概述

image.png

    如今,数据变得越来越昂贵,而且跨组织共享原始数据非常困难。联合学习旨在解决组织间数据隔离和数据知识安全共享的问题。联邦学习的概念由谷歌的研究人员提出[1,2,3]。PaddleFL 基于 PaddlePaddle 框架对联邦学习进行扩展实现。PaddleFL也提供了在自然语言处理,计算机视觉和推荐算法等领域的应用示例。PaddleFL支持当前主流两类联邦学习策略:横向联邦学习策略和纵向联邦学习策略[4]。未来会对联邦学习中的多任务学习[7]以及迁移学习[8]等进行开发和支持。

  • 横向联邦学习策略: 联邦平均 [2],差分隐私 [6],安全聚合[11];
  • 纵向联邦学习策略: 基于privc[5]的两方训练,基于ABY3[10]的三方训练;

PaddleFL 架构

image.png

PaddleFL 中主要提供两种解决方案:Data Parallel 以及 Federated Learning with MPC (PFM)

  • 通过Data Parallel,各数据方可以基于经典的横向联邦学习策略(如 FedAvg,DPSGD等)完成模型训练。

  • PFM 是基于多方安全计算(MPC)实现的联邦学习方案。作为PaddleFL的一个重要组成部分,PFM可以很好地支持联邦学习,包括横向、纵向及联邦迁移学习等多个场景。既提供了可靠的安全性,也拥有可观的性能。

运行机制(Data Parallel)

在PaddeFL中,模型训练的整体流程主要分为两个阶段:编译阶段和运行阶段。编译阶段主要定义联邦学习任务,运行阶段主要进行联邦学习训练工作,每个阶段主要包含的组件如下:

image.png

A. 编译阶段

  • FL-Strategy: 用户可以使用FL-Strategy定义联邦学习策略,例如Fed-Avg[2]。

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

  • Distributed-Config: 在联邦学习中,系统会部署在分布式环境中。分布式训练配置定义分布式训练节点信息。

  • FL-Job-Generator: 给定FL-Strategy, User-Defined Program 和 Distributed Training Config,联邦参数的Server端和Worker端的FL-Job将通过FL Job Generator生成。FL-Jobs 被发送到组织和联邦参数服务器以进行联合训练。

B. 运行阶段

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

  • FL-Worker: 参与联合学习的每个组织都将有一个或多个与联合参数服务器通信的Worker。

  • FL-Scheduler: 训练过程中起到调度Worker的作用,在每个更新周期前,决定哪些Worker可以参与训练。

C. 示例

CTR模型示例源码

  • fl_master.py

image.png

  • fl_scheduler.py

image.png

  • fl_server.py

image.png

  • fl_trainer.py

image.png

Federated Learning with MPC(Model Predictive Control)

PaddleFL MPC 中的安全训练和推理任务是基于高效的多方计算协议实现的,PaddleFL支持三方安全计算协议ABY3[10]和两方计算协议PrivC[5]。基于PrivC的两方联邦学习主要支持线性/逻辑回归、DNN模型。基于ABY3的三方联邦学习线性/逻辑回归、DNN、CNN、FM等。

MPC(Model Predictive Control:模型预测控制),又称RHC, Receding Horizon Control,是一种进阶过程控制方法,自1980年以来开始在化工炼油等过程工业得到应用,并在经济领域开始得到应用。

在PaddleFL MPC 中,参与方可分为:输入方、计算方和结果方。输入方为训练数据及模型的持有方,负责加密数据和模型,并将其发送到计算方(ABY3协议使用三个计算节点、PrivC协议使用两个计算节点)。计算方为训练的执行方,基于特定的多方安全计算协议完成训练任务。计算方只能得到加密后的数据及模型,以保证数据隐私。计算结束后,结果方会拿到计算结果并恢复出明文数据。每个参与方可充当多个角色,如一个数据拥有方也可以作为计算方参与训练。

image.png

A. 数据准备

  • 私有数据对齐: PFM允许数据拥有方(数据方)在不泄露自己数据的情况下,找出多方共有的样本集合。此功能在纵向联邦学习中非常必要,因为其要求多个数据方在训练前进行数据对齐,并且保护用户的数据隐私。
  • 数据加密及分发:在PFM中,提供在线或离线两种数据加密及分发方案。如果采用离线分发数据,那么数据方在数据准备阶段将数据和模型用秘密共享[9]的方法加密,然后用直接传输或者数据库存储的方式传到计算方。如果选择在线分发数据,数据方在训练过程中在线地对数据和模型进行加密和分发。在数据加密及分发过程中,每个计算方只会拿到数据的一部分,因此计算方无法还原真实数据。

B. 训练/推理

PFM 拥有与PaddlePaddle相同的运行模式。在训练前,用户需要定义MPC协议,训练模型以及训练策略。paddle_fl.mpc中提供了可以操作加密数据的算子,在运行时算子的实例会被创建并被执行器依次运行(训练过程中密文的通信支持gloo和grpc两种网络通信模式)。

请参考以下 文档, 以获得更多关于训练阶段的信息。

C. 结果重构

安全训练和推理工作完成后,模型(或预测结果)将由计算方以加密形式输出。结果方可以收集加密的结果,使用PFM中的工具对其进行解密,并将明文结果传递给用户(目前数据的分片和重构支持离线和在线两种模式)。

可以通过 MPC参考示例 获取更多信息。

安装

环境依赖

  • CentOS 7 (64 bit)
  • Python 3.5/3.6/3.7/3.8 ( 64 bit)
  • pip3 9.0.1+ (64 bit)
  • PaddlePaddle 1.8.5
  • Redis 5.0.8 (64 bit)
  • GCC or G++ 8.3.1
  • cmake 3.15+

安装部署

PaddleFL 提供了三种安装方式:

1. 在Docker中使用PaddleFL(百度推荐的安装方式)

#Pull and run the docker
docker pull paddlepaddle/paddlefl:1.2.0
docker run --name <docker_name> --net=host -it -v $PWD:/paddle <image id> /bin/bash
复制代码

Docker中环境配置以及paddlepaddle和paddlefl已经安装完成,您可以直接运行示例代码,开始使用PaddleFL。

2. 安装包安装

  • 通过 yum 安装 环境依赖
## 更新 yum 源
sudo yum -y clean all
sudo yum -y makecache
sudo yum update
## 下载 yum源 配置文件 
cd /etc/yum.repos.d 
rm -rf ./*
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo
/Centos-vault-8.5.2111.repo

## 安装python
sudo yum install python3

## 验证是否安装成功
python3 --version

## 查看pytho3 安装位置
whereis pytho3

## 将python 默认版本设置为 pytho3
sudo alternatives --set python /usr/bin/python3

## 升级 pip 
sudo python -m pip install --upgrade pip

## 查看 cmake 版本
cmake -version
复制代码
  • 安装百度飞桨(Paddle)

飞桨安装指南

飞桨快速安装

## 安装飞桨(paddle): Linux下的PIP安装CPU版本的计算平台
sudo python -m pip install paddlepaddle==2.2.2 -i https://mirror.baidu.com/pypi/simple
复制代码
  • 验证飞桨(paddle)是否安装成功

安装完成后您可以使用 pythonpython3进入python解释器,输入import paddle ,再输入 paddle.utils.run_check()

Paddle 2.0 之前的版本版本验证方式: 使用 pythonpython3进入python解释器,输入import paddle.fluid as fluid ,再输入 fluid.install_check.run_check()

如果出现PaddlePaddle is installed successfully!,说明已成功安装。

image.png

  • 安装PaddleFL
## 安装PaddleFL
sudo pip3 install paddle_fl
复制代码

上述命令会自动安装python3.8对应的PaddleFL。

3. Kubernetes简单部署

横向联邦方案

kubectl apply -f ./python/paddle_fl/paddle_fl/examples/k8s_deployment/master.yaml
复制代码

请参考K8S部署实例

也可以参考K8S集群申请及kubectl安装 配置自己的K8S集群。

Paddle 1.X 与 Paddle 2.0 API 变动

  1. Paddle 1.8 与 Paddle 2.0 API映射表

  2. PyTorch-PaddlePaddle API映射表

  3. 版本迁移工具

  4. 2.0 升级常见问题

参考文献

[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

[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

[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

[9]. Balázs Hidasi, Alexandros Karatzoglou, Linas Baltrunas, Domonkos Tikk. Session-based Recommendations with Recurrent Neural Networks. 2016

[10]. en.wikipedia.org/wiki/Secret…

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

おすすめ

転載: juejin.im/post/7068572388325064740