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. 最后做好封装

相关推荐
SeaDhdhdhdhdh6 小时前
MCP Server 搭建与使用指南
java·ai·agent·mcp
YH55269846 小时前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
AI_小站7 小时前
刚面完百度的 Agent 开发岗,我才发现:世界就是个巨大的草台班子
java·开发语言·人工智能·spring·百度·langchain
许彰午7 小时前
03-三种开发模式
java·架构
涟漪海洋8 小时前
创建最新的JDK25镜像,非root环境启动
java
遥感知识服务8 小时前
从局部阈值、双极化到暗地表剔除:NASA OPERA DSWx-S1全球动态水体算法拆解
大数据·人工智能·深度学习·神经网络·算法·机器学习
Rain的Java大神之路8 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
chunmiao30328 小时前
皮尤研究:ChatGPT 发布后,超三成新网页带 AI 创作痕迹
人工智能·机器学习·chatgpt
2602_959960929 小时前
谢飞机面试大厂:Spring Boot、JVM、Redis、Kafka、微服务与音视频搜索场景求生实录
java·jvm·spring boot·redis·面试题
Zane1994129 小时前
CAS 与原子类:Java 如何实现无锁编程
java·开发语言