FATE联邦学习框架简介

联邦学习介绍

联邦学习的出现解决什么问题

解决“数据孤岛”问题,保证数据安全与隐私保护。

由于各种原因,数据孤岛问题普遍存在。在用户和企业角度下,商业公司所拥有的数据往往都有巨大的潜在价值。两个公司甚至公司间的部门都要考虑利益的交换,往往这些机构不会提供各自数据与其他公司做与单的聚合,导致即使在同一个公司内,数据也往往以孤岛形式出现。

联邦学习的概念

本质:联邦学习本质上是一种分布式机器学习技术,或机器学习框架

目标:联邦学习的目标是在保证数据隐私安全及合法合规的基础上,实现共同建模,提升AI模型的效果。

联邦学习的分类

根据每个参与共同建模的企业称为参与方,根据多参与方之间数据分布的不同,把联邦学习分为三类:横向联邦学习、纵向联邦学习和联邦迁移学习。

image.png

  • 横向联邦适用于,参与方之间的数据特征相似,但样本不同。
  • 纵向联邦适用于,参与方之间的数据特征重叠多,但样本重叠少。
  • 联邦迁移学习则适用于,参与方之间的数据特征重叠少,样本重叠也少。

这三种类型的联邦学习的学习过程不太相同,这里不做详细描述。

联邦学习框架

据了解,联邦学习框架有Fate、PySyft、FedLab、Rosetta、PaddleFL等等。具体可参见联邦学习开源框架调研

不同框架的受众定位、加密手段、支持的算法、开发的机构不同。下面是对比图。图片来源于Fate官网。

这张图时间比较久了,具体还是要看最新版本。

image.png

Fate介绍

FATE (Federated AI Technology Enabler) 是微众银行AI部门发起的开源项目,为联邦学习生态系统提供了可靠的安全计算框架。FATE项目使用多方安全计算 (MPC) 以及同态加密 (HE) 技术构建底层安全计算协议,以此支持不同种类的机器学习的安全计算,包括逻辑回归、基于树的算法、深度学习和迁移学习等。

Fate架构

image.png

其中,

  • FATE Board:联邦学习可视化界面。
  • FATE Flow:联邦学习端到端全流程的多方联合任务安全调度平台,提供生产级的服务能力。
  • FATE Serving:在线模型管理服务(只支持纵向联邦学习)
  • FederatedML:联邦学习的核心组件
  • Secure Protocols:FATE的安全协议

FATE核心功能

  • 联邦在线模型服务(FATE Serving)
  • 联邦建模Pipline和可视化(FATE Flow)
  • 联邦学习算法的各个功能组件(FederatedML)
  • 分布式计算和存储抽象(EggRoll)
  • 跨站点网络通信抽象(Federated Network)

更多介绍

FATE github地址:https://github.com/FederatedAI/FATE

单机版FATE安装

这里采用docker安装

部署文档

如果需要docker使用GPU资源,需要在docker容器启动时加上参数--gpus

docker run -d --gpus all --name standalone_fate -p 8080:8080 federatedai/standalone_fate:1.9.0

如果启动报类似错误:Error could not select device driver with capabilities: [[gpu]],则查看下面的链接进行解决。

Centos7安装nvidia-container-toolkit

安装完成后,进入容器,要先执行命令:source bin/init_env.sh

FATE Board 默认用户名密码:admin/admin

想要修改用户名和密码

/data/projects/fate/fateboard/conf/application.properties

集群版

集群可以使用docker-compose或者kube安装,这里不做介绍。

集群版会加入eggroll、mysql之类的组件,其开放的端口如下:

image.png

9380端口是FATE flow调用api的接口,有哪些接口可以参看下面的链接。

https://federatedai.github.io/FATE-Flow/latest/zh/swagger/

集群安装后,每个节点应该有以下docker容器

fate@vm172-31-0-217:~$ docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2ab95400e3f federatedai/client:1.9.0-release "/bin/sh -c 'flow in…" 2 weeks ago Up 7 days 0.0.0.0:20000->20000/tcp confs-10000-client-1
f24fac183cbe federatedai/fateboard:1.9.0-release "/bin/sh -c 'java -D…" 2 weeks ago Up 7 days 0.0.0.0:6080->6080/tcp, 8080/tcp confs-10000-fateboard-1
33ca56f46fe3 federatedai/fateflow-nn:1.9.0-release "/bin/bash -c 'set -…" 2 weeks ago Up 7 days (healthy) 0.0.0.0:9360->9360/tcp, 0.0.0.0:9380->9380/tcp confs-10000-fateflow-1
4dbb83db37cc mysql:8.0.28 "docker-entrypoint.s…" 2 weeks ago Up 7 days 3306/tcp, 33060/tcp confs-10000-mysql-1
7e4567d52d9d federatedai/eggroll-nn:1.9.0-release "/tini -- bash -c 'j…" 2 weeks ago Up 7 days 0.0.0.0:9370->9370/tcp confs-10000-rollsite-1
10f118347296 federatedai/eggroll-nn:1.9.0-release "/tini -- bash -c 'j…" 2 weeks ago Up 7 days 4670/tcp confs-10000-clustermanager-1
7ceafb32bfd9 federatedai/eggroll-nn:1.9.0-release "/tini -- bash -c 'j…" 2 weeks ago Up 7 days 4671/tcp

集群开放的端口:

port service
6080 fate-board
8350 serving
20000 jupyter
9370 rollsite
9380 flow api

这里我们使用了四个节点,分别是FATE9997-10000,其中FATE10000为arbiter用于将梯度聚合和分发,其余为guest/host,是参与联邦学习的各方。

Toy Test

安装完成后可以进行简单测试,以检查安装是否成功。10000是各个参与方的partyid

flow test toy -gid 10000 -hid 10000

Refs

  1. 详解联邦学习Federated Learning

文章作者: Met Guo
文章链接: https://guoyujian.github.io/2022/11/03/FATE%E8%81%94%E9%82%A6%E5%AD%A6%E4%B9%A0%E6%A1%86%E6%9E%B6%E7%AE%80%E4%BB%8B/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gmet's Blog