三 FATE训练任务流程

配置文件 ①上传数据文件
让 FATE 使用数据
②dsl文件
构建建模任务
实际上,在构建建模任务时,可能会涉及到几个组件,例如 、、、 等 。但是,这些组件的组合因任务而异 。因此,自由组合组件的便捷方式将是一个关键特征 。
目前,FATE 提供了一种特定领域的语言(DSL)来定义您想要的任何结构 。这些组件通过 dsl 配置文件组合为有向无环图 (DAG) 。
dsl 配置文件的使用就像定义一个 json 文件一样简单 。
DSL 配置文件将为每个组件定义输入数据和(或)模型以及输出数据和(或)模型 。
下游组件将上游组件的输出数据和(或)模型作为输入 。这样,就可以通过配置文件构造一个 DAG 。
③conf文件
为每个特定组件定义提交运行时配置
该配置文件用于为各方配置所有组件的参数 。
FATE训练流程:
FATE训练任务流程主要有:
一、上传数据 ①定义上传数据配置文件
示例
{"file": "examples/data/breast_b.csv","head": 1,"partition": 10,"work_mode": 0,"table_name": "hetero_breast_b","namespace": "hetero_guest_breast"}
参数说明:
file: 文件路径
head: 指定数据文件是否包含表头
: 指定用于存储数据的分区数
: 指定工作模式,0代表单机版,1代表集群版
&: 存储数据表的标识符号
实践例子:
使用Fate提供的案例数据,目录在fate容器中的/fate//dsl/v1/sion/.json和/fate//dsl/v1/sion/.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 中相应的原件)
注:安装vim:
apt-get updateapt-get install -y vim
②上传数据
标准命令为:
python ${your_install_path}/fate_flow/fate_flow_client.py -f upload -c ${upload_data_json_path}
${}: fate的安装目录
${h}:上传数据配置文件路径
实践例子:
进入fate容器,在容器fate目录下执行下列命令:
python python/fate_flow/fate_flow_client.py -f upload -cexamples/dsl/v1/homo_logistic_regression/upload_data_host.json python python/fate_flow/fate_flow_client.py -f upload -cexamples/dsl/v1/homo_logistic_regression/upload_data_guest.json
python python/fate_flow/fate_flow_client.py -f upload -cexamples/dsl/v1/homo_logistic_regression/upload_data_test.json
输出所示,和已经列出,可以在上传配置文件中作为输入配置 。
打开fate监控面板,点击可以看见参数配置等信息 。
二、训练模型: ①定义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}}}
参数说明:
:第一级,始终为 “”,显示将在建模任务中添加组件 。
:模块的键 。此名称应以“_num”结尾,例如“_0”、“_1”等 。用户需要使用模块名加数字 _num 作为对应模块的 key,例如 ,并且数字应从 0 开始计数 。这用于区分可能存在的多个相同种类的模块 。
:用来指定使用的模块 。这个参数的内容需要和/conf/ 下各个模块的文件名保持一致 。
input:输入 。分为两种输入类型,分别是 data 和 model 。
model:有两种可能的模型输入类型:
:输出 。和 input 一样,有 data 和 model 两种类型 。
:是或否 。该字段用于指定组件是否需要部署以进行在线推断 。该字段仅用于在线推论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"},}
参数说明:
:指定启动器的角色和参与方ID 。
:设置 和 。
role:指示所有角色的所有参与方ID 。角色中的每个元素都应包含角色名称及其角色ID 。每个角色的以列表形式存在,因为一个任务可能涉及到多个 party 担任同一种角色 。
:指定角色的参数,这一部分的参数对于不同的 party 都有所区别 。数据需要匹配上传数据配置文件 。
:指定所有 party 都共享的参数,每一个参数的 key 都是在 DSL 配置文件中定义好的模块名 。
在完成这些配置文件并提交任务之后,fate-flow 将会把和中的所有参数合并 。如果合并之后,仍然存在没有定义的参数,fate-flow 则会使用默认值 。fate-flow 会将这些参数分发到对应的 party,并开始联邦建模任务 。
实践例子:
在容器中可以修改我们逻辑回归的dsl和conf文件,目录分别为:/fate//dsl/v1/sion/.json和/fate//dsl/v1/sion/b_dsl.json 。
此处直接使用原文件的示例文件即可
注意:conf文件中data中的name和要与上传数据.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}
${}:fate的安装目录
${dsl}:dsl文件路径
${}: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功能的任务需要提前上传文件,操作同上述上传数据的命令 。含有验证功能的任务dsl和conf文件不能直接进行下一步的预测,因为本身的验证过程中就已经进行了预测和检验,需要对组建进行进一步修改并对预测conf做好配置 。这样才可以使用我们训练好的模型去做预测 。建议精读fate文档,有一些比较小的点容易忽略 。
④查看训练结果
查看 主机ip:8080
会列出所有的工作经历 。最新的工作将在页面顶部 。搜索JOBID,查看要查看的任务 。
在任务页面中,所有组件都将显示为 DAG 。我们使用不同的颜色来表示它们的运行状态 。
绿色:运行成功蓝色:运行灰色:等待红色:失败 。
可以在右侧单击每个组件以获取其运行参数 。在这些参数下方,有一个view the 按钮 。单击并查看此组件的模型输出、数据输出和日志 。
如果想了解整个任务的概览,右上角有一个按钮 。转到仪表板,有三个窗口显示不同的信息 。
左窗口:此任务中各方使用的数据集 。中间窗口:整个任务的运行状态或进度 。右窗口:组件的 DAG 。
实践例子:
【三FATE训练任务流程】在的组件中我们可以很清楚的看见loss的曲线图:
在组件中可以看到更多的模型评价参数:
⑤检查日志
标准命令:
${your_install_path}/logs/${your jobid}
${}:fate的安装目录
${your jobid}:本次的jobid
三、任务预测:
下面我们将用上面训练得到的模型来进行数据的预测 。预测的配置文件为/dsl/v1/sion/.json,在dsl/v2的版本中预测任务需要同时定义预测的dsl和conf文件,而v1中只需要定义conf,dsl文件和训练的dsl文件相同 。
①准备
(1)为需要在预测阶段部署的模块添加或修改“”字段 。除了通常不会在预测阶段运行的和之外,所有模块均将True设置为其默认值 。“”字段为True表示此模块应运行“拟合”过程,并且拟合模型需要在预测阶段进行部署 。
(2)除了模块之外,其他模块应该配置模型输出,这样fate-flow才能存储训练后的模型并使其在预测阶段可用 。
(3)预测的配置文件中需要修改以及,这两个参数在训练任务结束时返回的信息中已经包含 。当然你也可以使用下列命令来获得获取训练模型的和两个参数:
标准命令为:
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}
${th}: fate安装目录
${jobid} :任务ID
${}:提交工作的一方的
${th}:存储的路径
之后,包含模型信息的json文件将被下载到$ {th} /.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
②定义预测配置文件
此配置文件用于配置用于预测的参数
示例:
{"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"}]}}}}}
参数说明:
: 指定发起人的角色和参与方ID,应与训练过程相同
:
:集群或独立,与训练过程相同 。
或:1. 准备(3)中获取的模型指示器 。
:工作类型 。在这种情况下,它应该是“” 。
role: 指出所有角色的所有参与ID,应与训练过程相同
:为每个角色设置参数 。在这种情况下,“ ”(意味着将要预测的数据)应同时为Guest和Host分别填写
实践例子:
目录/dsl/v1/sion/.json 。要注意修改以及,下面的是需要预测的数据,在这里没有添加新的数据,直接使用原来的数据进行了预测,你也可以在数据划分时留出一部分数据用于后面的预测评估,当然这就相当于了,可以直接使用其他示例进行验证或交叉验证:
vim examples/dsl/v1/homo_logistic_regression/test_predict_conf.json
③开始预测
标准命令为:
python ${your_fate_install_path}/fate_flow/fate_flow_client.py -f submit_job -c ${predict_config}
${th}:fate安装目录
${}:预测配置文件路径
实践例子:
python python/fate_flow/fate_flow_client.py -f submit_job -c examples/dsl/v1/homo_logistic_regression/test_predict_conf.json
④查看预测结果
查看
http://${fate_board_ip}:${fate_board_port}/index.html#/details?job_id=${job_id}&role=guest&party_id=${guest_partyid}
$ {} $ {}:用于部署FATE模块的ip和端口 。
$ {}:预测任务的 。
$ {}:
实践例子:
我们直接查看的输出即可:
⑤下载预测结果
预测任务完成后,前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}
${}: 预测任务ID
${}: 当前用户
${role}: 当前用户的角色
${}: 具有预测结果的组件
${t_dir}: 将预测结果下载到的目录
实践例子:
python python/fate_flow/fate_flow_client.py -f component_output_data -j 2021062308372668986321 -p 10000 -r guest -cpn hetero_lr_0 -o ./
补充:fatev2版本的训练和预测流程
v2版本里有一些改变和提升,最直观的来说,在v1中预测任务的dsl文件是自动生成的,难免会出现一定的问题 。而v2中是需要用户自己定义预测任务dsl的,当然也可以使用flow命令来自动配置出预测dsl 。下面简单介绍一下v2版本任务训练和预测的流程 。
建议在容器中部署单机fate时,在容器内安装交互工具FATE-以及测试工具FATE-Test 。
配置好之后就可以愉快的使用flow命令啦 。
下面的操作使用flow命令进行操作,都是对/dsl/v2/sion中的文件进行演示 。
上传数据和任务训练
上传数据仍然用1中的.json和.json
flow data upload -c examples/dsl/v1/upload_data_host.jsonflow 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 -dexamples/dsl/v2/homo_logistic_regression/homo_lr_eval_dsl.json
返回信息:
fate board中guest的DAG图:
配置预测dsl
划重点:v2中训练好的任务需要进行部署才能用于下一步的预测任务
我们将和更换成上面训练好的模型参数然后进行部署:
flow model deploy --model-id "arbiter-9999#guest-10000#host-9999#model" --model-version "202107240656552548973"
返回信息则配置成功:
我们可以通过下列命令得到预测的dsl和conf文件,注意这里我们用的是上面部署之后的
获取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后我们需要修改里面的数据表和,
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
结果和训练任务类似,可以使用数据下载命令下载数据到本地 。
以上为v2版本任务训练和预测的示例,当然也可以把数据换成其他切分数据进行训练和预测,不再赘述 。