FATE: 一种联邦学习框架

Table of Contents

1. 联邦学习基本概念

之前听学长讲过关于联邦学习的汇报,但后来发现该报告无法cover阅读文档时所出现的问题,因此还是需要自己再补充一些知识。

根据目前的学习,联邦学习目前可以分成三部分:横向联邦学习、纵向联邦学习和联邦迁移学习。 经典的联邦学习的思路是,在本地进行模型训练,将训练过程中的梯度信息回传到服务器(或互相传递),从而实现无数据沟通下的模型整体更新。 下面基于该概念理解上述所说的三个部分。

首先是横向和纵向的问题,这主要是针对于数据讨论的。可以想象一个坐标轴,横轴代表数据的特征,纵轴代表每个特征下数据的个数。 如此一来,整张图便是数据的特征分布图。针对于这张图,如果x轴不变,尝试通过多机机制实现对y轴的扩充,也就是在保持特征空间不变的前提下扩充样本数目,那么就是纵向联邦学习; 与之相反,如果样本数目是充足的,重点在于通过扩展样本表达使得模型可以覆盖更广的特征空间,那么这种联邦学习就是横向的。

如此来看,横向和纵向应对的场景是:横向更偏向那些做同样事情的节点的增多;而纵向偏向对有不同侧重的节点的聚合。 那么,什么是联邦迁移学习呢?

联邦迁移学习就是,多机上的数据,一方面特征空间不同,另一方面数量都是稀缺的。换而言之:我们既需要用他们去扩展样本空间分布,也需要用他们去提升每一个分布点下的样本数。 再换句话说,就是又要横向,又要纵向。

FATE就是这样的一个框架。

2. 安装

官网提供了两种安装方式,即单机安装与集群安装。从这里了解到细节。 笔者没有集群,先考察单机安装模式。单机安装模式中推荐方法是实用docker。

docker即容器技术,也是目前最常用的解决系统环境依赖的解决方案,可以理解成系统层面的environment box。 关于对docker的具体介绍,可以参照这里,也可以查看之前的笔记。总而言之,当安装docker完成之后,剩下的任务就是下载对应的image,然后安装使用了。

这一部分操作包括以下几个部分:

## install
#Get code
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/docker_standalone_fate_${version}.tar.gz
tar -xzvf docker_standalone_fate_${version}.tar.gz

#Execute the command
cd docker_standalone_fate_${version}
bash install_standalone_docker.sh

# where ${version} should be replaced into docker version.


## unit test
CONTAINER_ID=`docker ps -aqf "name=fate"`
docker exec -t -i ${CONTAINER_ID} bash
bash ./python/federatedml/test/run_test.sh

## install more tool
 pip install fate-client
 pip install fate-test

## see the fateboard access via browser with http://hostip:8080

如此一来,基本上fate就安装完成了。是不是也没有什么可怕的?

3. FATE总览

根据官网的介绍,fate主要包括以下几个大的板块:

  1. FederatedML: 顾名思义,做机器学习的。
  2. FATE Serving:提供联邦学习算法(模型)的。
  3. FATEFlow:提供pipeline的。
  4. FATEBoard:做前端的,类似于tensorboard之于tensorflow。
  5. Federated Network: 不详。
  6. KubeFATE:听名字可以看出来,但是我不懂。

不妨先根据fate的demo进行测试

4. fate demo测试

目前fate支持两个版本,官方支持使用v2,因此后续就以v2为例子进行。注意:即使官方版本是1.x.x版本(例如我使用时官方推荐版本是1.6.1),也是可以使用v2的!

官方的v2版本demo是无法直接运行的(直接运行会报错)。我怀疑可能是开发者为了测试我的开发能力。此处测试的demo是AI界的hello word,即在minist数据集上用Alexnet训练一个图像数字判别器。链接在这里

(被叫去开会了,有空补充!~)


Author: liangzid (2273067585@qq.com) Create Date: Sat Sep 18 20:55:59 2021 Last modified: 2024-03-09 Sat 20:56 Creator: Emacs 28.1 (Org mode 9.5.2)