(三)FATE训练任务流程

2023-12-19 11:10
文章标签 流程 fate 训练任务

本文主要是介绍(三)FATE训练任务流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:
https://blog.csdn.net/WenDong1997/article/details/106743620
https://blog.csdn.net/qq_41841524/article/details/117662143

经过整理而总结的文章,如有侵权,烦请联系修改。

配置文件

①上传数据文件

让 FATE 使用数据

②dsl文件

构建建模任务

实际上,在构建建模任务时,可能会涉及到几个组件,例如 data_io、feature_engineering、algorithm_model、evaluation 等。但是,这些组件的组合因任务而异。因此,自由组合组件的便捷方式将是一个关键特征。

目前,FATE 提供了一种特定领域的语言(DSL)来定义您想要的任何结构。这些组件通过 dsl 配置文件组合为有向无环图 (DAG)。

dsl 配置文件的使用就像定义一个 json 文件一样简单。

DSL 配置文件将为每个组件定义输入数据和(或)模型以及输出数据和(或)模型

下游组件将上游组件的输出数据和(或)模型作为输入。这样,就可以通过配置文件构造一个 DAG。

③conf文件

为每个特定组件定义提交运行时配置

该配置文件用于为各方配置所有组件的参数。

FATE训练流程:

FATE训练任务流程主要有:

  • 上传数据,需要准备上传数据配置文件

  • 配置dsl文件:用于定义建模任务

    配置conf文件:用于设置每个组件的参数

  • 训练模型或者继续进行预测

  • FATE Board查看结果

一、上传数据

①定义上传数据配置文件

示例

{"file": "examples/data/breast_b.csv","head": 1,"partition": 10,"work_mode": 0,"table_name": "hetero_breast_b","namespace": "hetero_guest_breast"
}

参数说明:

file: 文件路径
head: 指定数据文件是否包含表头
partition: 指定用于存储数据的分区数
work_mode: 指定工作模式,0代表单机版,1代表集群版
table_name&namespace: 存储数据表的标识符号

实践例子:

使用Fate提供的案例数据,目录在fate容器中的/fate/examples/dsl/v1/homo_logistic_regression/upload_data_host.json和/fate/examples/dsl/v1/homo_logistic_regression/upload_data_guest.json

这里上传数据需要准备host以及guest两方的上传数据

vim /fate/examples/dsl/v1/homo_logistic_regression/upload_data_host.json
vim /fate/examples/dsl/v1/homo_logistic_regression/upload_data_guest.json

也可以不做修改,如作修改做好原文件备份或者直接查看fate github中相应的原件)

注:安装vim:

apt-get update
apt-get install -y vim

②上传数据

标准命令为:

python ${your_install_path}/fate_flow/fate_flow_client.py -f upload -c ${upload_data_json_path}

${your_install_path}: fate的安装目录
${upload_data_json_path}:上传数据配置文件路径

实践例子:

进入fate容器,在容器fate目录下执行下列命令:

python python/fate_flow/fate_flow_client.py -f upload -c  examples/dsl/v1/homo_logistic_regression/upload_data_host.json 
python python/fate_flow/fate_flow_client.py -f upload -c  examples/dsl/v1/homo_logistic_regression/upload_data_guest.json 

<下面这条upload_data_test.json 是上传测试数据,仅仅在作evaluation时需要上传,执行普通的train_job可以不用上传>

python python/fate_flow/fate_flow_client.py -f upload -c  examples/dsl/v1/homo_logistic_regression/upload_data_test.json 

请添加图片描述

输出所示,table_name和namespace已经列出,可以在上传配置文件中作为输入配置。

打开fate监控面板fate_board,点击可以看见参数配置等信息。

二、训练模型:

①定义DSL 配置文件

示例:

{"components" : {"dataio_0": {                       //module_name"module": "DataIO",           //module"input": {                    //input"data": {"data": ["args.train_data"]}},"output": {                   //output"data": ["train"],"model": ["dataio"]},"need_deploy": true           //need_deploy}}}

参数说明:

components:第一级,始终为 “components”,显示将在建模任务中添加组件。

module_name:模块的键。此名称应以“_num”结尾,例如“_0”、“_1”等。用户需要使用模块名加数字 _num 作为对应模块的 key,例如 dataio_0,并且数字应从 0 开始计数。这用于区分可能存在的多个相同种类的模块。

module:用来指定使用的模块。这个参数的内容需要和federatedml/conf/setting_conf 下各个模块的文件名保持一致。
input:输入。分为两种输入类型,分别是 data 和 model。

  • data: 有三种可能的 data_input 类型:
    • data:通常用于 data_io、feature_engineering 模块和评估。
    • train_data:用于 homo_lr、hetero_lr 和 secure_boost。如果提供此字段,则任务将被解析为拟合任务
    • validate_data:如果提供了 train_data,则该字段是可选的。在这种情况下,此数据将用作验证集。如果未提供 train_data,则此任务将被解析为预测迁移任务。
  • model:有两种可能的模型输入类型:
    • model:这是相同类型的组件输入的模型,用于预测或转换阶段。例如,hetero_binning_0 作为拟合组件运行,hetero_binning_1 将hetero_binning_0 的模型输出作为输入,以便用于迁移或预测。
    • isometric_model:用于指定来自上游组件的模型输入。仅用于 FATE-1.x 中的 HeteroFeatureSelection 模块。HeteroFeatureSelection 可以采用 HetereFeatureBinning 的模型输出,并将计算出的信息值作为过滤标准。

output:输出。和 input 一样,有 data 和 model 两种类型。

  • data:指定输出数据名称
  • model:指定输出模型名称

need_deploy:是或否。该字段用于指定组件是否需要部署以进行在线推断。该字段仅用于在线推论dsl推论。

②定义conf运行配置文件

示例:

{"initiator": {"role": "guest","party_id": 10000},"job_parameters": {"work_mode": 1"processor_per_node": 6},"role": {"guest": [10000],"host": [10000],"arbiter": [10000]},"role_parameters": {"Your role parameters"},"algorithm_parameters": {"Your algorithm parameters"},
}

参数说明:
initiator:指定启动器的角色和参与方ID。
job_parameters:设置work_mode 和processor_per_node。
role:指示所有角色的所有参与方ID。角色中的每个元素都应包含角色名称及其角色ID。每个角色的 party_id 以列表形式存在,因为一个任务可能涉及到多个 party 担任同一种角色。
role_parameters:指定角色的参数,这一部分的参数对于不同的 party 都有所区别。数据需要匹配上传数据配置文件。
algorithm_parameters:指定所有 party 都共享的参数,每一个参数的 key 都是在 DSL 配置文件中定义好的模块名。

在完成这些配置文件并提交任务之后,fate-flow 将会把 role_parameters 和 algorithm_parameters 中的所有参数合并。如果合并之后,仍然存在没有定义的参数,fate-flow 则会使用默认值。fate-flow 会将这些参数分发到对应的 party,并开始联邦建模任务。

实践例子:

在容器中可以修改我们逻辑回归的dsl和conf文件,目录分别为:/fate/examples/dsl/v1/homo_logistic_regression/test_homolr_train_job_conf.json和/fate/examples/dsl/v1/homo_logistic_regression/test_homolr_train_job_dsl.json。

此处直接使用原文件的示例文件即可

注意:conf文件中data中的namenamespace要与上传数据upload_data.conf中定义的一致。

vim /fate/examples/dsl/v1/homo_logistic_regression/test_homolr_train_job_conf.json
vim /fate/examples/dsl/v1/homo_logistic_regression/test_homolr_train_job_dsl.json

在这里插入图片描述

③开始训练

标准命令为:

python ${your_install_path}/fate_flow/fate_flow_client.py -f submit_job -d ${dsl} -c ${runtime_config}

${your_install_path}:fate的安装目录

${dsl}:dsl文件路径

${runtime_config}:conf文件路径

实践例子:

python python/fate_flow/fate_flow_client.py -f submit_job -d examples/dsl/v1/homo_logistic_regression/test_homolr_train_job_dsl.json -c examples/dsl/v1/homo_logistic_regression/test_homolr_train_job_conf.json

在这里插入图片描述

其中含有test功能的任务需要提前上传test_data文件,操作同上述上传数据的命令。含有验证evaluate功能的任务dsl和conf文件不能直接进行下一步的预测,因为本身的验证过程中就已经进行了预测和检验,需要对组建进行进一步修改并对预测conf做好配置。这样才可以使用我们训练好的模型去做预测。建议精读fate文档,有一些比较小的点容易忽略。

④查看训练结果

查看FATE_board http://主机ip:8080

jobList会列出所有的工作经历。最新的工作将在页面顶部。搜索JOBID,查看要查看的任务。
在这里插入图片描述
在JobOverview任务页面中,所有组件都将显示为 DAG。我们使用不同的颜色来表示它们的运行状态。

  1. 绿色:运行成功
  2. 蓝色:运行
  3. 灰色:等待
  4. 红色:失败。

可以在右侧单击每个组件以获取其运行参数。在这些参数下方,有一个view the outputs按钮。单击并查看此组件的模型输出、数据输出和日志。
在这里插入图片描述
在这里插入图片描述

如果想了解整个任务的概览,右上角有一个dashboard按钮。转到仪表板,有三个窗口显示不同的信息。

  1. 左窗口:此任务中各方使用的数据集。
  2. 中间窗口:整个任务的运行状态或进度。
  3. 右窗口:组件的 DAG。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3vdEStf9-1627111724355)(E:\VMShare\FATE-master\examples\image\DashBoard.png)]

实践例子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZxNa1Mu-1627111724356)(C:\Users\Lime\AppData\Roaming\Typora\typora-user-images\image-20210723190934507.png)]
在homo_lr_0的组件中我们可以很清楚的看见loss的曲线图:
在这里插入图片描述
在evaluation_0组件中可以看到更多的模型评价参数:

img

⑤检查日志

标准命令:

${your_install_path}/logs/${your jobid}

${your_install_path}:fate的安装目录
${your jobid}:本次的jobid

三、任务预测:

下面我们将用上面训练得到的模型来进行数据的预测。预测的配置文件为examples/dsl/v1/homo_logistic_regression/test_predict_conf.json,在dsl/v2的版本中预测任务需要同时定义预测的dsl和conf文件,而v1中只需要定义conf,dsl文件和训练的dsl文件相同。

①准备

(1)为需要在预测阶段部署的模块添加或修改“need_deploy”字段。除了通常不会在预测阶段运行的FederatedmSample和Evaluation之外,所有模块均将True设置为其默认值。“need_deploy”字段为True表示此模块应运行“拟合”过程,并且拟合模型需要在预测阶段进行部署。
(2)除了Intersect模块之外,其他模块应该配置模型输出,这样fate-flow才能存储训练后的模型并使其在预测阶段可用。
(3)预测的配置文件中需要修改model_id以及model_version,这两个参数在训练任务结束时返回的信息中已经包含。当然你也可以使用下列命令来获得获取训练模型的model_id和model_version两个参数:

标准命令为:

python ${your_fate_install_path}/fate_flow/fate_flow_client.py -f job_config -j ${jobid} -r guest -p ${guest_partyid}  -o ${job_config_output_path}

${your_fate_install_path}: fate安装目录
${jobid} :任务ID
${guest_partyid}:提交工作的一方的partyId
${job_config_output_path}:存储job_config的路径

之后,包含模型信息的json文件将被下载到$ {job_config_output_path} /model_info.json中

实践例子:

python python/fate_flow/fate_flow_client.py -f job_config -j 202107231105378004073 -r guest -p 10000 -o examples/dsl/v1/homo_logistic_regression

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NSUGS4w1-1627111724356)(C:\Users\Lime\AppData\Roaming\Typora\typora-user-images\image-20210723191322756.png)]

②定义预测配置文件

此配置文件用于配置用于预测的参数

示例:

{"initiator": {"role": "guest","party_id": 10000},job_parameters": {"work_mode": 0,"job—type": "predict","model_id": "arbiter-10000#guest-10000#host-10000#model","model_version": "202005140855200605181"},"role": {"guest": [10000],"host": [10000],"arbiter": [10000]},,n>]"role_parametersn": {                                                           "guest": {"args": {"data": {"eva_data": [{"name": "homo_breast_guest", "namespace": "homo_breast_guest"}]}        }},"host": {                           "args":{"data":{"eva_data": [{"name": "homo_breast_host", "namespace": "homo_breast_host"}]}}}}
}

参数说明:
initiator: 指定发起人的角色和参与方ID,应与训练过程相同
job_parameters:
work_mode:集群或独立,与训练过程相同。
model_id或model_version:1. 准备(3)中获取的模型指示器。
job_type:工作类型。在这种情况下,它应该是“predict”。
role: 指出所有角色的所有参与ID,应与训练过程相同
role_parameters:为每个角色设置参数。在这种情况下,“ eval_data”(意味着将要预测的数据)应同时为Guest和Host分别填写

实践例子:

目录examples/dsl/v1/homo_logistic_regression/test_predict_conf.json。要注意修改model_id以及model_version,下面的eval_data是需要预测的数据,在这里没有添加新的数据,直接使用原来的数据进行了预测,你也可以在数据划分时留出一部分数据用于后面的预测评估,当然这就相当于evaluation了,可以直接使用其他示例进行验证或交叉验证:

vim examples/dsl/v1/homo_logistic_regression/test_predict_conf.json

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ag6TQEVY-1627111724357)(C:\Users\Lime\AppData\Roaming\Typora\typora-user-images\image-20210723191546581.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OgmRGOlh-1627111724357)(C:\Users\Lime\AppData\Roaming\Typora\typora-user-images\image-20210723191617322.png)]

③开始预测

标准命令为:

python ${your_fate_install_path}/fate_flow/fate_flow_client.py -f submit_job -c ${predict_config}

${your_fate_install_path}:fate安装目录
${predict_config}:预测配置文件路径

实践例子:

python python/fate_flow/fate_flow_client.py -f submit_job -c examples/dsl/v1/homo_logistic_regression/test_predict_conf.json

④查看预测结果

查看FATE_board

http://${fate_board_ip}:${fate_board_port}/index.html#/details?job_id=${job_id}&role=guest&party_id=${guest_partyid}

$ {fate_board_ip} $ {fate_board_port}:用于部署FATE模块的ip和端口。
$ {job_id}:预测任务的job_id。
$ {guest_partyid}:GuestID

实践例子:

我们直接查看homo_lr_0的输出即可:

在这里插入图片描述

⑤下载预测结果

预测任务完成后,前100条预测结果记录将在FATE-board中可用。可以通过以下命令下载所有结果。

标准命令为:

python ${your_fate_install_path}/fate_flow/fate_flow_client.py -f component_output_data -j ${job_id} -p ${party_id} -r ${role} -cpn ${component_name} -o ${predict_result_output_dir}

${job_id}: 预测任务ID
${party_id}: 当前用户partyID
${role}: 当前用户的角色
${component_name}: 具有预测结果的组件
${predict_result_output_dir}: 将预测结果下载到的目录

实践例子:

python python/fate_flow/fate_flow_client.py -f component_output_data -j 2021062308372668986321 -p 10000 -r guest -cpn hetero_lr_0 -o ./

补充:fate dsl_conf v2版本的训练和预测流程

v2版本里有一些改变和提升,最直观的来说,在v1中预测任务的dsl文件是自动生成的,难免会出现一定的问题。而v2中是需要用户自己定义预测任务dsl的,当然也可以使用flow命令来自动配置出预测dsl。下面简单介绍一下v2版本任务训练和预测的流程。

建议在容器中部署单机fate时,在容器内安装交互工具FATE-Client以及测试工具FATE-Test。

配置好之后就可以愉快的使用flow命令啦。
下面的操作使用flow命令进行操作,都是对examples/dsl/v2/homo_logistic_regression中的文件进行演示。

上传数据和任务训练

上传数据仍然用1中的upload_data_host.json和upload_data_guest.json

flow data upload -c examples/dsl/v1/upload_data_host.json
flow data upload -c examples/dsl/v1/upload_data_guest.json

在v2文件夹下选择示例dsl和conf进行训练:

flow job submit -c examples/dsl/v2/homo_logistic_regression/homo_lr_eval_conf.json -d  examples/dsl/v2/homo_logistic_regression/homo_lr_eval_dsl.json

返回信息:

在这里插入图片描述

fate board中guest的DAG图:
在这里插入图片描述

配置预测dsl
划重点:v2中训练好的任务需要进行部署才能用于下一步的预测任务

我们将model_id和model_version更换成上面训练好的模型参数然后进行部署:

flow model deploy --model-id "arbiter-9999#guest-10000#host-9999#model" --model-version "202107240656552548973"

返回信息则配置成功:
在这里插入图片描述
我们可以通过下列命令得到预测的dsl和conf文件,注意这里我们用的model_version是上面部署之后的model_version

获取dsl

flow model get-predict-dsl --model-id "arbiter-9999#guest-10000#host-9999#model" --model-version "202107240710561865314" -o examples/dsl/v2/homo_logistic_regression/

获取conf

flow model get-predict-conf --model-id "arbiter-9999#guest-10000#host-9999#model" --model-version "202107240710561865314" -o examples/dsl/v2/homo_logistic_regression/

在这里插入图片描述

任务预测
从上面得到conf后我们需要修改里面的数据表和namespace,

vim /fate/examples/dsl/v2/homo_logistic_regression/predict_conf_20210724071301.json

修改为下图:
在这里插入图片描述

使用我们上面获取到的预测dsl和conf进行预测:

flow job submit -c examples/dsl/v2/homo_logistic_regression/predict_conf_20210724071301.json -d examples/dsl/v2/homo_logistic_regression/predict_dsl_20210724071253.json

fateboard结果和训练任务类似,可以使用数据下载命令下载数据到本地。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XZOjUMTO-1627111724362)(C:\Users\Lime\AppData\Roaming\Typora\typora-user-images\image-20210724152233104.png)]

以上为v2版本任务训练和预测的示例,当然也可以把数据换成其他切分数据进行训练和预测,不再赘述。

这篇关于(三)FATE训练任务流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511940

相关文章

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio