FATE联邦学习框架java实践(一)

同系列文章:

FATE联邦学习框架入门指南 - 掘金 (juejin.cn)

FATE联邦学习框架:API实践Upload和DownLoad的踩坑记录 - 掘金 (juejin.cn)
项目源码 :FateTest - 码云 - 开源中国 (gitee.com)

因为公司技术栈和Fate的技术架构的原因,我们最终选择了采用Java调用接口的方式与FATE平台实现连通。目前为止,通过网络搜索对于Fate应用相关的文章都非常少,对于其详细系统性实践的文章更是一篇没有。

因此,这次实践可以说是目前为止,第一篇对于Fate在java实践的企业级探索。

任务梳理

具体的项目背景不方便透露,但是只需要知道项目对于Fate的具体要求就是,双方将用户存入Fate平台中,然后通过Fate的 隐私计算求交能力,返回双方的交集用户列表。

具体流程图如下:

我们需要隐私计算平台提供的功能

通过以上任务流程的梳理,我们需要的基础功能如下:

  1. 用户集管理:用于存储用户唯一标识,将不同用户存入不同集

  2. 用户集增、删功能:实现用户集转入、转出

  3. 交集判断:在两个用户集间判断是否为交集用户(需要跨平台)

根据对Fate的上下摸索,针对以上能力,Fate基本都能提供,但是还是存在一点不足。

Fate提供的功能

  1. Fate平台提供表概念,可以将数据集存入表中
  2. Fate仅有增删表的功能,但无表数据更新功能。
  3. Fate提供了intersrction模块,可以进行跨平台的隐私计算求交。

Fate的局限性

因为我这次的需求是做实时任务,而Fate更适合离线任务,所以这些局限性是对实时任务来说的。

  1. 没有表数据更新功能,意味着我们仅能通过下载表的csv文件后对表进行处理重新覆盖上传,来实现数据更新功能。同时这也意味着更大的IO开销和更高的时间成本。

  2. 数据上传或任务提交接口,请求接口后返回值的成功标识是指数据开始上传或者任务开始执行。仅能通过轮询任务状态来确定任务是否执行成功。 这也意味着更大的IO开销和更高的开发成本。

  3. Fate的表可以通过table bind绑定mysql数据表,但是我们不确定mysql数据源能不能预先导入数据,甚至能够通过更新mysql实现Fate表数据更新的功能。因为绑定没成功过。。。

Fate通过java实现基础的数据上传和导出

数据上传和下载接口只需要通过java请求官方文档API即可,但是还是有很多值得注意的地方

数据上传

数据上传接口的postman调试都费了很大的功夫,使用java调用更麻烦。

参考实现: java 实现带RequestBody传Json参数的GET请求 - 掘金 (juejin.cn)

1. 首先实现请求api的方法

2. 然后做好封装

数据下载

数据下载接口有两个,一个是导出数据的接口,结果返回为数据列表,一个是导出数据为文件的结果,结果为压缩文件。

但是返回结果列表的接口,最多能返回100条数据。

1. 同样首先实现请求api的方法

2. 因为结果返回为压缩包文件,所以实现了一个解压方法。

解压方法逻辑比较复杂。最终结果为将tar.gz文件中解压出的两个文件中保留结果数据文件并将其命名为指定名称。

3. 最后做好封装

相关推荐
猿究院_夏燊9 小时前
SpringMVC 到底是怎么干活的?
java·网络·职场和发展
丁希希哇9 小时前
Transformer中的注意力机制(Attention)
人工智能·机器学习·transformer·大语言模型
鶴哥只手遮天9 小时前
Spring Framework 7.0.9 深度剖析-05-配置元数据解析:XML、注解与 JavaConfig
java·后端·开源
NGINX开源社区9 小时前
与我们交流:NGINX Gateway Fabric 与 NGINX Ingress Controller 社区会议
java·服务器·前端
鶴哥只手遮天9 小时前
Spring Framework 7.0.9 深度剖析-16-异步与调度
java·后端·开源
田里的水稻10 小时前
PyTorch_torchvision---数据集下载\TensorBoard可视化
人工智能·pytorch·python·深度学习·机器学习
十年Java程序媛10 小时前
Java 多线程基础与锁机制|进程线程、synchronized、volatile、Lock 面试全梳理
java·spring boot·面试
弈栈录10 小时前
大模型服务抽象:兼容 OpenAI、通义千问与本地模型
java·后端·架构
鶴哥只手遮天10 小时前
Spring Framework 7.0.9 深度剖析-06-Bean 生命周期与依赖注入原理
java·后端·开源
唐钰小宝B10 小时前
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
java·开发语言·windows