FATE (Federated AI Technology Enabler) 是微众银行AI部门发起的全球首个联邦学习工业级开源框架,可以让企业和机构在保护数据安全和数据隐私的前提下进行数据协作。 FATE项目使用多方安全计算 (MPC) 以及同态加密 (HE) 技术构建底层安全计算协议,以此支持不同种类的机器学习的安全计算,包括逻辑回归、基于树的算法、深度学习和迁移学习等。
FATE于2019年2月首次对外开源,并于2019年6月由微众银行捐献给Linux基金会,并成立 FATE TSC 对FATE社区进行开源治理,成员包含国内主要云计算和金融服务企业。
FATE官方网站:https://fate.fedai.org/
FATE教程:https://fate.readthedocs.io/en/latest/zh/
开源地址:https://github.com/FederatedAI/
一、FATE中的联邦学习算法
FATE目前支持三种类型联邦学习算法:横向联邦学习、纵向联邦学习以及迁移学习。
Federatedml模块包括许多常见机器学习算法联邦化实现。所有模块均采用去耦的模块化方法开发,以增强模块的可扩展性。具体来说,我们提供:
- 联邦统计: 包括隐私交集计算,并集计算,皮尔逊系数等
- 联邦特征工程:包括联邦采样,联邦特征分箱,联邦特征选择等。
- 联邦机器学习算法:包括横向和纵向的联邦LR, GBDT, DNN,迁移学习等
- 模型评估:提供对二分类,多分类,回归评估,联邦和单边对比评估
- 安全协议:提供了多种安全协议,以进行更安全的多方交互计算。
二、FATE技术架构
FATE技术架构的底层是Tensorflow / Pytorch(深度学习)、EggRoll /Spark(分布式计算框架)和多方联邦通信网络,上层为联邦安全协议,并在安全协议的基础上构建联邦学习算法库。围绕实际场景,FATE在技术架构顶层构建了联邦区块链、联邦多云管理、联邦模型可视化平台、联邦建模pipeline调度、联邦在线推理等。
FATE联邦算法组件已发展至30余个,实现工业界主流场景算法全覆盖和工业界主流多方安全计算协议全覆盖,涉及数据输入输出、纵向联邦统计、纵向联邦特征工程、纵向联邦学习算法、横向联邦学习算法、模型评估、安全计算等算法方案。
三、安装教程
FATE支持Linux或Mac操作系统,当前FATE支持:
- Native部署: 单机部署和集群部署;
- KubeFATE部署
Native部署
运行环境:jdk1.8+、Python3.6、python virtualenv、mysql5.6+、redis-5.0.2
1、单机部署
FATE为开发人员提供了单机部署架构版本。单机部署版本可以帮助开发人员快速开发以及测试FATE。
该版本支持两种类型:
- Docker;
- 手动编译。
单机版提供三种部署方式,可以根据实际情况选择:
- 使用Docker镜像安装FATE(推荐)
- 在主机中安装FATE
- 使用Docker从源代码构建FATE(需要40分钟或更长时间)
1) 使用Docker镜像安装FATE(推荐)
建议使用docker镜像,这样可以大大降低遇到问题的可能性。
主机需要能够访问外部网络,从公共网络中拉取安装包和docker镜像。
依赖docker和docker-compose,docker建议版本为18.09,docker-compose建议版本为1.24.0,您可以使用以下命令验证docker环境:docker –version和docker-compose –version,docker的起停和其他操作请参考docker –help。
执行之前,请检查8080、9060和9080端口是否已被占用。 如果要再次执行,请使用docker命令删除以前的容器和镜像。
请按照以下步骤操作:
#获取安装包
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/docker_standalone-fate-1.4.0.tar.gz
tar -xzvf docker_standalone-fate-1.4.0.tar.gz
#执行部署
cd docker_standalone-fate-1.4.0
bash install_standalone_docker.sh
#验证和测试
CONTAINER_ID=`docker ps -aqf "name=fate_python"`
docker exec -t -i ${CONTAINER_ID} bash
bash ./federatedml/test/run_test.sh
有些用例算法在 examples 文件夹下, 请尝试使用。
您还可以通过浏览器体验算法过程看板,访问:Http://hostip:8080。
在docker中安装fate1.7.0版本:
1、通过镜像包拉取镜像
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate/1.7.0/release/standalone_fate_docker_image_1.7.0_release.tar
docker load < standalone_fate_docker_image_1.7.0_release.tar
使用docker images能看到fate对应1.7.0的镜像则镜像下载成功
2、启动
docker run -d --name standalone_fate -p 8080:8080 federatedai/standalone_fate:1.7.0
使用docker ps能看到fate对应1.7.0的容器运行中则启动成功
3、进入容器
docker exec -it $(docker ps -aqf "name=standalone_fate") bash
#或者
docker exec -it standalone_fate bash
4、查看fateBoard
打开fateBoard配置文件fate/fateboard/conf/application.properties
server.board.login.username=admin
server.board.login.password=admin
使用配置文件中的账号密码登录 http://localhost:8080
2) 在主机中安装FATE
检查本地8080、9360、9380端口是否被占用。
netstat -apln|grep 8080
netstat -apln|grep 9360
netstat -apln|grep 9380
下载独立版本的压缩包并解压缩。
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/standalone-fate-master-1.4.0.tar.gz
tar -xzvf standalone-fate-master-1.4.0.tar.gz
进入FATE目录并执行init.sh.
cd standalone-fate-master-1.4.0
source init.sh init
执行测试.
cd standalone-fate-master-1.4.0
bash ./federatedml/test/run_test.sh
3) 使用Docker从源代码构建FATE
主机需要能够访问外部网络,从公共网络中拉取安装包和docker镜像。
依赖docker和docker-compose,docker建议版本为18.09,docker-compose建议版本为1.24.0,您可以使用以下命令验证docker环境:docker –version和docker-compose –version,docker的起停和其他操作请参考docker –help。
执行之前,请检查8080、9060和9080端口是否已被占用。 如果要再次执行,请使用docker命令删除以前的容器和镜像。
大约需要40分钟才能执行完成,请耐心等待。
请按照以下步骤操作:
#获取安装包
git clone https://github.com/FederatedAI/FATE.git
#执行部署
cd FATE/standalone-deploy
bash build_standalone_docker.sh init
#验证和测试
CONTAINER_ID=`docker ps -aqf "name=fate_python"`
docker exec -t -i ${CONTAINER_ID} bash
bash ./federatedml/test/run_test.sh
请忽略以下提示:
WARNING: Image for service mysql was built because it did not already exist. To rebuild this image you must use docker-compose build or docker-compose up –build.
debconf: delaying package configuration, since apt-utils is not installed.
WARNING: You are using pip version 19.2.1, however version 19.2.2 is available.You should consider upgrading via the ‘pip install –upgrade pip’ command.
WARNING: Image for service xxx was built because it did not already exist. To rebuild this image you must use docker-compose build or docker-compose up –build.
简单介绍几个重要目录和文件:
- fate_flow:联邦学习模块运行和管理的主要模块,用于提交任务、解析参数、生成作业、执行作业、保存和查询日志等功能
- federatedml:联邦机器学习的主要实现模块,包括各类特征预处理、横向/纵向场景的机器学习等,这个模块是我们后面需要详细了解的
- arch:由于我们的框架可以进行分布式计算,所以fate对后台的计算框架进行了api层面的封装,如基础的数据表计算和存储操作、变量数据传输的封装
- eggroll:微众开发的一个分布式计算框架,fate同时支持eggroll和fate作为后端的计算框架
2、集群部署
FATE同样为大数据场景提供了分布式运行部署架构版本。从单机部署迁移到集群部署仅需要更改配置文件,不需要更改算法。
KubeFATE部署
通过 KubeFATE, 我们可以使用 docker-compose或者 Kubernetes方式部署FATE:
- 如果是开发或者测试场景, 推荐使用docker-compose部署方式. 这种模式仅仅需要 Docker 环境。 更多细节请参考 FATE Docker Compose部署.
- 如果生产环境或者大规模部署, 推荐使用Kubernetes方式来管理FATE系统 。更多细节请参考FATE Kubernetes部署.
更多使用说明请见KubeFATE。
运行测试
./federatedml/test 文件夹中提供了所有单元测试的脚本。
安装FATE后,可以使用以下命令运行测试:
sh ./federatedml/test/run_test.sh
示例程序
快速开始
我们提供了一个用于快速搭建训练任务的python脚本作为示例。该脚本位于:FATE/examples/federatedml-1.x-examples
获取模型并检查结果
FATE提供了名为 fate-flow 的工具用来跟踪组件输出模型或日志。fate-flow的部署和使用可以在 这里 找到。
四、项目结构
-
算法框架FATE:算法功能组件,包括常见机器学习算法联邦化实现。所有模块均采用模块化的解耦的方式进行开发,从而增强可扩展性。目前1.6版本支持横向联邦学习、纵向联邦学习以及迁移学习,去耦的模块化结构支持多样化联邦特征工程与建模。
-
建模调度框架FATE-Flow:联邦学习框架FATE的作业调度系统,实现联邦学习作业生命周期的完整管理,其中包括数据输入、训练作业调度、指标追踪、模型中心等功能。协同多方任务调度,同时提供任务流程DAG解析。
-
联邦模型可视化平台FATE-Board:联邦学习建模的可视化工具,为终端用户可视化和度量模型训练的全过程。支持对模型训练过程全流程的跟踪、统计和监控等,并为模型运行状态、模型输出、日志追踪等提供了丰富的可视化呈现,帮助用户简单而高效地深入探索模型与理解模型。
-
联邦在线推理FATE-Serving:提供实时在线联合单笔或批次预测,同时提供可视化的集群操作界面,集成模型管理、集群监控、服务治理等功能。
-
工业级云服务FATE-Cloud:实现多云管理FATE,提供安全可靠、合规的企业级数据合作网络构建解决方案。
-
轻量级视觉横向框架FedVision:内置PaddleFL/PaddleDetection插件,支持多种常用的视觉检测模型, 助力视觉联邦场景快速落地。
-
一体化部署KubeFATE:简便的Docker环境部署方案,方便开发者快速开发或测试FATE。
五、FATE-Flow架构解析
官方架构图:
FATE-Flow提供了client和board两种客户端,访问fate的flow server完成了任务flow的调度。整个任务流官网也很中肯的定义为Pipeline。Pipeline有点像开发常用的jenkins,一个任务完成后触发后续任务,直到所有任务结束。
FATE-Flow联邦学习Pipeline
FATE-Flow是用于联邦学习的端到端Pipeline系统,它由一系列高度灵活的组件构成,专为高性能的联邦学习任务而设计。其中包括数据处理、建模、训练、验证、发布和在线推理等功能。官方示例图如下: