FATE实战:对比TFF,联邦学习框架FATE有何优势?这篇案例记录告诉你

引言:本文记录了FATE框架中横向和纵向联邦学习的案例使用,并与笔者近期使用过的谷歌TFF(TensorFlow-Federated)框架对比,阐述使用感受,对研究联邦学习及使用FATE的用户极有价值。

1.横向联邦学习案例

在本节中,以逻辑回归为例记录横向联邦学习案例使用。

实验设置

数据集:信用数据,位置FATE/examples/data/default_credit_homo_guest/host.csv
算法:logistics regression

文件说明

1.上传数据json文件

upload_my_homolr_guest.json,upload_my_homolr_host.json

其中file字段用于指定数据存储位置;
head字段指明数据是否包含头;
partition字段指定数据划分数;
work_mode字段表示工作模式(单节点/集群);
namespace和table_name由用户指定,需要与运行时配置文件中相应字段对应。

2.组件

test_my_homolr_train_dsl.json

这里使用了DataIO、HomoLR和Evaluation三个组件,需要注意各个组件之间的输入输出数据关系;
要使用其他组件,可以参考官方文档中的说明。

3.运行时配置文件

test_my_homolr_train_conf.json

initiator设置了联邦发起者的角色和id;
job_parameters定义了工作模式(单机/集群);
role_parameters设置了各角色的具体信息,包括训练数据、数据输入输出格式等;
需要注意的是,此处训练数据的name和namespace需要与上传数据json文件中的响应属性对应;
最后,algorithm_parameters部分设置了本次训练使用的算法及对应参数、加密方法和交叉验证相关设置。

实验步骤

进入实验环境

进入框架所在文件夹:cd ${your_fate}
进入docker环境:docker exec -it fate_python bash

1.上传训练数据

python fate_flow/fate_flow_client.py -f upload 
-c ${your_upload_json_path}/upload_my_homolr_guest.json 
-c ${your_upload_json_path}/upload_my_homolr_host.json

【注】注意是先上传guest数据,后上传host数据

2.提交训练任务

python fate_flow/fate_flow_client.py -f submit_job 
-d ${your_dsl_path}/test_my_homolr_train_dsl.json
-c ${your_runtime_conf_path}/test_my_homolr_train_conf.json

3.查看结果

点击提示url可以查看相关结果:

http://localhost:8080/index.html#/dashboard?job_id=20190929055530316952233&role=guest&party_id=10000

2.纵向联邦学习案例

在本节中,以secureboost为例记录纵向联邦学习案例使用。

实验设置

数据集:纵向切割的breast数据集,位置FATE/examples/data/breast_a/b.csv
算法:secureboost

实验步骤

实验步骤同样分为三步,上传数据、提交任务和查看结果,此处对结果进行展示:

实验结果

1.训练中

2.查看结果

点击view this job查看所有结果,同时可以通过切换job查看guest端和host端的数据和模型输出,此处只做部分展示:

【注】此处结果为FATE更新前的展示,目前FATE已经更新到1.1版本,界面有所改变,如果点击view this job 无效,可以尝试使用谷歌浏览器查看结果

结果分析

模型输出的各项指标都很好,结果非常令人满意,通过阅读过SecureBoost论文了解到这个算法是无损的,所以达到了如此高的指标;secureboost是由xgboost改进而来的,所以训练速度也很快。

小结

读者可以根据需求修改以上列举的文件进行不同训练。笔者记录以上案例时使用的是FATE的早期版本,横向联邦学习支持的模块很少,目前FATE框架已经支持深度学习,读者可以尝试使用。

3.使用感受

本节笔者将对比FATE框架和TFF框架的使用感受。

1.环境部署

FATE框架需要较多软件,安装操作比较琐碎,安装过程中可能出一些小问题,但对软件版本对应要求不是很高,环境部署可以参考这里官方GitHub

TFF框架官方没有中文文档,安装过程中也会出各种各样的错误,支持conda安装;如果使用gpu,需要严格按照版本对应安装,笔者在此吃了不少苦头。

2.应用场景

FATE框架支持横向、纵向联邦学习;而TFF仅支持横向联邦。

FATE目前已经支持多种算法,TFF同样支持各种算法和深度学习。

3.上手难度

FATE如果只是修改部分json文件,还可以接受,但是如果需要大片重置,在linux系统下不是很方便;但FATE源码中已搭建好大部分组件结构,基本不需要编写代码,用户可以0基础训练并查看结果。

TFF编译器可以配置到IDE中,编写代码比较方便;但TFF有其federated core等编程范式和API,有一定上手难度,使用时需要编写大量代码。

4.可视化

FATE在可视化部分做的比较好,轻松点击便可查看结果。

TFF需要自行编写代码从tf.Session中取出中间和最终结果。

5.调试

FATE代码涉及多种语言,且代码封装性较高,笔者由于对python了解甚少,未曾尝试修改FATE中的python代码,更未尝试debug。

TFF笔者使用较少,不过TFF计算时使用静态图并tf.Session保存中间结果,调试也比较困难。

6.GPU支持

据笔者目前了解FATE暂时不支持GPU计算,在这一方面TFF更有优势。

7.使用场景

FATE支持多方部署,同时可以由多方发起联邦计算,可以用于实验测试和真实环境部署。

TFF虽然是谷歌已经用于实际训练终端Gboard的框架,但据笔者至目前的使用并未发现开放给用户的多方联邦接口,仅适用于实验测试。


盛立杰,微信号:urinmydreaM_,FATE社区特邀作者

本文原创发布于FATE社区,未经许可,禁止转载。

发布了21 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45439861/article/details/103715000