FATE联邦学习框架:API实践Upload和DownLoad的踩坑记录

官方API文档:API - FATE Flow (federatedai.github.io)

因为公司技术栈和Fate的技术架构的原因,我们最终选择了采用Java去调用接口的方式与FATE平台实现连通。

然而在测试FATE官方提供的API时,却发现了FATE的不少坑。因为现在使用FATE的人并不多的原因,网上完全没有解决方案。很多坑也是多方调查才解决的,在这里记录下,希望对你有所帮助。

1. 测试接口范围

因为我们使用场景比较特殊,我仅测试了以下五个接口,其中/data/upload/tracking/component/output/data/download接口测试失败,其他均正常。

根据其他使用者的反馈,问题也主要出在这两个接口中,其他接口根据官网文档都能调通

2. upload接口调用方式

1.官方介绍

根据官方文档的介绍,upload接口的调用方式如下:

于是,我选择了通过url直接传参数,将文件变为二进制文件传入的方式。

如图,参数为application/octet-stream类型

最后的结果很明显,失败了。

2. Github ISSUE关键解答

原文链接如下:FATE1.10.0的fate flow Swagger API的/data/upload接口报错 · Issue #4613 · FederatedAI/FATE (github.com)

这里面官方工作人员回答,说可以直接通过application/json传入文件参数。

虽然这次请求成功了,可是进入Fate管理端发现任务执行失败,通过查询日志定位是文件找不到的问题。

注意截图中文件地址前缀为fateflow说明上传文件的地址默认为Fate所在的机器,说明报错原因是不能上传本地文件。

在此问题解答中,官方人员也说明了这种情况。KeyError: 'file' when using REST API to upload data · Issue #3647 · FederatedAI/FATE (github.com)

也就是说application/json传入的文件地址参数只能将Fate所在机器的文件上传到Fate中,如果想要上传本地文件至Fate中,需要将use_local_data参数改为1。

但是亲测,参数改为1接口直接报错。

也就是说,要将本地文件传入Fate平台仍然需要通过application/octet-stream类型的参数将文件以二进制的形式传入到Fate平台中。

3. 成功的调用方式

亲测只有通过form-data 传入文件和参数才能上传文件,并且上传成功。

3. DownLoad 接口调用方式

这个接口倒是没有上传接口解决起来那么离谱,但我觉得官方文档的误导性太强了。

官方文档介绍如下:

但是使用postman调用尝试失败报错

解决方法非常简单,只需把post方式用get方式即可。

提示method not allowed 然后尝试改用get请求确实有点合理,但是官方文档明晃晃标注post请求就不太合理了吧。

而且我旁边的六年老Java大哥也和我说这么多年第一次见get请求传requestBody参数的。这个接口的请求方式确实挺出乎意料的。

还有一点需要注意,这个方法最后是传回一个文件,需要用send and download的方式才能下载到压缩文件,只用send最后会显示一堆乱码而不是下载文件。

如果使用java调用的话,可以参考这篇文档,亲测可用。

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

相关推荐
jarreyer1 分钟前
数据项目分析标准化流程
开发语言·python·机器学习
乾元3 分钟前
如何把 CCIE / HCIE 的实验案例改造成 AI 驱动的工程项目——从“实验室能力”到“可交付系统”的完整迁移路径
大数据·运维·网络·人工智能·深度学习·安全·机器学习
Coder_Boy_5 分钟前
Spring Boot 事务回滚异常 UnexpectedRollbackException 详解(常见问题集合)
java·spring boot·后端
风象南6 分钟前
SpringBoot 实现网络限速
后端
QBoson7 分钟前
量子机器学习用于药物发现:系统综述
人工智能·机器学习·量子计算
源代码•宸11 分钟前
Golang语法进阶(定时器)
开发语言·经验分享·后端·算法·golang·timer·ticker
计算机学姐15 分钟前
基于SpringBoot的汽车租赁系统【个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·spring·汽车·推荐算法
好好研究18 分钟前
SpringBoot小案例打包执行流程
java·spring boot·后端
BingoGo19 分钟前
免费可商用商业级管理后台 CatchAdmin V5 正式发布 插件化与开发效率的全面提升
vue.js·后端·php
咚咚王者22 分钟前
人工智能之核心基础 机器学习 第十一章 无监督学习总结
人工智能·学习·机器学习