FATE学习:五种不同的API提交FATE任务

综述

当前支持如下五种API来提交FATE任务,分别为:

  • CLI API:通过python 启动python 脚本 fate_flow_client.py,提交FATE任务。
  • REST API:Rest API 形式,发起http请求,提交FATE任务。
  • Flow SDK:python 封装的SDK,调用相关API,提交FATE任务。
  • Flow Client:封装为命令行工具模式的FATE Flow命令行控制台。
  • Pipeline:python 封装的high level API。

几种API的对比

CLI API

使用方式:

python fate_flow_client.py -f $command

说明:根据入参,生成request,向Server发起请求。然后通过Flask跳转到具体类。

HTTP API

使用方式:

curl -H "Content-Type:application/json" -X POST -d '{"role": "guest", "party_id":"9999"}' http://192.168.1.26:9380/v1/job/query

可以使用curl 或者 postman等工具。
直接向Server 发起请求。

Flow SDK

使用方式:

from flow_sdk.client import FlowClient
# use real ip address to initialize SDK
client = FlowClient('127.0.0.1', 9000, 'v1')
client.job.submit(conf_path, dsl_path)

说明:在FlowClient类中已经封装好SDK,根据不同的调用接口,生成request,向Server发起请求。然后通过Flask跳转到具体类。相比CLI模式,通过不同的参数,生成request,这里是使用不同的API生成request。

Flow Client CLI

使用方式:

flow init -c /data/projects/fate/python/conf/service_conf.yaml
flow init --ip 127.0.0.1 --port 9380
flow job submit -c fate_flow/examples/test_hetero_lr_job_conf.json -d fate_flow/examples/test_hetero_lr_job_dsl.json

封装为命令行工具模式的FATE Flow命令行工具。底层是通过access_server方法,根据不同的参数,生成对应的request,再向Server 发起请求

def access_server(method, ctx, postfix, json_data=None, echo=True, **kwargs):
    if ctx.obj.get('init', False):
        try:
            url = "/".join([ctx.obj['server_url'], postfix])
            response = {}
            if method == 'get':
                response = requests.get(url=url, json=json_data, **kwargs)
            elif method == 'post':
                response = requests.post(url=url, json=json_data, **kwargs)
            if echo:
                prettify(response)
                return
            else:
                return response

Pipeline

相较于以上几种方式,通过配置文件的方式,定义各个组件,Pipeline开放了更加灵活的的API,用来定义各个组件。然后在底层再调用FlowClient(和FlowSDK一样),来进行执行。
例如upload,可以对比下通过 upload.json 和 pipeline 定义的区别。

  • upload.json
{
    "file": "/data/projects/fate/python/fc/data/predict_data/20220523/b1game01_20220523.csv", 
    "head": 1, 
    "partition": 1, 
    "work_mode": 1, 
    "table_name": "b1game01_20220523", 
    "namespace": "cl", 
    "count": 21
}
  • pipeline 方式
    pipeline_upload.add_upload_data(file=os.path.join(DATA_BASE, "examples/data/breast_hetero_guest.csv"),
                                    table_name=dense_data["name"],             # table name
                                    namespace=dense_data["namespace"],         # namespace
                                    head=1, partition=partition)               # data info
    pipeline_upload.upload(work_mode=work_mode, backend=backend, drop=1)

对比可以发现,就是将json中的配置项,通过参数的方式进行设定。

示意图

画了张图,来体现如上五种API之间的关系
FATE学习:五种不同的API提交FATE任务_第1张图片

endpoint

介于上图,可以发现最终的实现都是向server 提交http请求。然后通过flask机制,跳转到不同的执行了。基于1.5.1版本总结了一下不同endpoint 的执行类和功能,如下表。

你可能感兴趣的:(联邦学习,#,FATE,python,flask,http)