FATE icon indicating copy to clipboard operation
FATE copied to clipboard

关于横向联邦场景下Host方如何完成仅一方的部署与预测

Open FFinchR opened this issue 1 year ago • 8 comments

根据教程,横向联邦场景下,guest方训练完模型后,可以通过deploy命令部署模型,然后submit job的方式完成预测。 然后在 #4314 中提到,可以通过修改conf文件,仅保留一方的role与component_params的方式,完成仅一方的预测。 我根据上面的方法,实现了仅guest方参与的预测,但是,在尝试实现仅host方参与的预测时出现了问题: 根据我的理解,在预测之前,需要先部署模型,即执行deploy命令:

flow model deploy --model-id arbiter-9998#guest-9999#host-9998#model --model-version 202303220252081986320 --dsl-path /data/projects/fate/examples/dsl/v2/homo_logistic_regression/homo-lr-normal-predict-dsl.json

在host方执行后遇到如下报错:

{
    "retmsg": "Deploy model failed. Cannot found model of initiator role or the fate version of model is older than 1.5.0",
    "retcode": 404
}

1.是因为该模型的发起方是guest-9999,host方的flow报错? 2.若我想实现在FATE平台上完成host方的单独预测应该怎么做? 3.若想完成host方的单独预测,只能通过homo_convert转换成本地模型,然后在其他平台上部署? 谢谢。

FFinchR avatar Mar 23 '23 03:03 FFinchR

我感觉应该是你的/homo-lr-normal-predict-dsl.json存在问题,在使用host部署的时候应该修改一些内容,不是和guest完全一样的。

oceanqdu avatar Mar 29 '23 07:03 oceanqdu

我感觉应该是你的/homo-lr-normal-predict-dsl.json存在问题,在使用host部署的时候应该修改一些内容,不是和guest完全一样的。

@oceanqdu 感谢您的回复,这里的homo-lr-normal-predict-dsl.json使用的是与guest方相同的dsl,内容如下:

{
    "components": {
        "data_transform_0": {
            "input": {
                "data": {
                    "data": [
                        "reader_0.data"
                    ]
                },
                "model": [
                    "pipeline.data_transform_0.model"
                ]
            },
            "module": "DataTransform",
            "output": {
                "data": [
                    "data"
                ]
            }
        },
        "reader_0": {
            "module": "Reader",
            "output": {
                "data": [
                    "data"
                ]
            }
        },
        "scale_0": {
            "input": {
                "data": {
                    "data": [
                        "data_transform_0.data"
                    ]
                },
                "model": [
                    "pipeline.scale_0.model"
                ]
            },
            "module": "FeatureScale",
            "output": {
                "data": [
                    "data"
                ]
            }
        },
        "homo_lr_0": {
            "input": {
                "data": {
                    "test_data": [
                        "scale_0.data"
                    ]
                },
                "model": [
                    "pipeline.homo_lr_0.model"
                ]
            },
            "module": "HomoLR",
            "output": {
                "data": [
                    "data"
                ]
            }
        }
    }
}

如果想在host方部署需要修改哪些内容?这里看起来没有指定guest或host的字段,感谢。

FFinchR avatar Mar 29 '23 07:03 FFinchR

我感觉是不是在你加载之前需要导入一下模型?例如这样 flow model import -c examples/model/import_model.json 我之前都是在guest方进行的,host方我也没有实验过。

oceanqdu avatar Mar 29 '23 08:03 oceanqdu

我感觉是不是在你加载之前需要导入一下模型?例如这样 flow model import -c examples/model/import_model.json 我之前都是在guest方进行的,host方我也没有实验过。

好的,感谢,我后续尝试一下,目前在host方我只实现了通过homo_convert导出模型,然后在本地做推理。

FFinchR avatar Mar 29 '23 08:03 FFinchR

我感觉是不是在你加载之前需要导入一下模型?例如这样 flow model import -c examples/model/import_model.json 我之前都是在guest方进行的,host方我也没有实验过。

好的,感谢,我后续尝试一下,目前在host方我只实现了通过homo_convert导出模型,然后在本地做推理。

你好,请问这个 homo_convert 是什么功能,如何使用呢? 我最近也想导出模型,用于本地推理。

DongRuiHust avatar Mar 30 '23 01:03 DongRuiHust

你好,请问这个 homo_convert 是什么功能,如何使用呢? 我最近也想导出模型,用于本地推理。

你好,homo_convert是flow cli提供的接口,用于将横向联邦模型导出,具体请参考homo_convert。 我印象中是训练完成后,执行flow model deploy ; 然后根据获得的model_id,model_version,以及实际的role与party_id修改examples/model/homo_convert_model.json; 执行flow model homo_convert,如果flow server成功返回,返回的结果将包含模型导出的本地路径; 导出的模型好像仍需要手动进行数据预处理,即导出的模型只包含运行算法的那个组件,如homo_lr等。 希望对你有所帮助。

FFinchR avatar Mar 30 '23 02:03 FFinchR

你好,请问这个 homo_convert 是什么功能,如何使用呢? 我最近也想导出模型,用于本地推理。

你好,homo_convert是flow cli提供的接口,用于将横向联邦模型导出,具体请参考homo_convert。 我印象中是训练完成后,执行flow model deploy ; 然后根据获得的model_id,model_version,以及实际的role与party_id修改examples/model/homo_convert_model.json; 执行flow model homo_convert,如果flow server成功返回,返回的结果将包含模型导出的本地路径; 导出的模型好像仍需要手动进行数据预处理,即导出的模型只包含运行算法的那个组件,如homo_lr等。 希望对你有所帮助。

感谢感谢。

DongRuiHust avatar Mar 30 '23 02:03 DongRuiHust

你好 请问这个问题现在解决了吗 如果解决了是如何实现的方便说一下嘛 感谢感谢

ShaoYULi12 avatar Apr 15 '24 03:04 ShaoYULi12