整理自:github-fate
(1)数据准备(如果用默认的数据,就不需要准备了);
(2)把数据的路径,写到upload_host.json或者upload_guest.json的里,然后用fate_flow把数据upload到指定的namescope和table_name(json里设置);
(3)配置计算图的流程和模块:dsl.json文件;配置计算图中的数据、算法超参数等:conf.json文件;
(4)提交job进行训练:把前述信息给fate_flow,开始训练;
(5)提交job进行测试:upload测试数据,根据训练好的模型信息,修改测试配置文件,开始测试。
进入fate-docker环境
docker exec -it confs-10000_python_1 bash
测试系统是否正常
#需要说明的是,如果是FATE 1.5,下述路径中没有python这一层
cd /data/projects/fate/python/examples/toy_example/
python run_toy_example.py 10000 9999 1
若正常可以进行下一步;遇到不正常的情况我一般都是重新部署,参考
FATE | ubuntu用KuteFATE在多台机器部署联合学习框架FATE——要点。
(1)登陆服务器:
ssh ubuntu@x.x.x.x
(2)进入docker-fate 的python容器:
docker exec -it confs-10000_python_1 bash
(3)配置数据upload参数
vi fate_flow/examples/upload_host.json
配置如下:
{
"file": "examples/data/breast_a.csv",
"head": 1,
"partition": 10,
"work_mode": 1,
"namespace": "fate_flow_test_breast",
"table_name": "breast"
}
(4)Upload数据(下述的 -c 路径需要根据情况修改路径)
python fate_flow/fate_flow_client.py -f upload -c fate_flow/examples/upload_host.json
(1)登陆服务器:
ssh ubuntu@x.x.x.x
(2)进入docker-fate的python容器:
docker exec -it confs-9999_python_1 bash
(3)配置数据upload参数
vi fate_flow/examples/upload_guest.json
配置如下
{
"file": "examples/data/breast_b.csv",
"head": 1,
"partition": 10,
"work_mode": 1,
"namespace": "fate_flow_test_breast",
"table_name": "breast"
}
(5)Upload数据(下述的 -c 路径需要根据情况修改路径)
python fate_flow/fate_flow_client.py -f upload -c fate_flow/examples/upload_guest.json
(6)配置计算图文件 dsl
dsl主要是计算图的组建,可以用默认的(或者在这个基础之上修改)
vi /data/projects/fate/python/fate_flow/examples/test_hetero_lr_job_dsl.json
(7)配置纵向LR的算法参数
vi fate_flow/examples/test_hetero_lr_job_conf.json
配置如下:
【需要注意的是,这里面的host和guest的name和namescope两个参数是让系统知道用哪个数据,这个需要和前面的upload数据那里相匹配】
{
"initiator": {
"role": "guest",
"party_id": 9999
},
"job_parameters": {
"work_mode": 1
},
"role": {
"guest": [9999],
"host": [10000],
"arbiter": [10000]
},
"role_parameters": {
"guest": {
"args": {
"data": {
"train_data": [{"name": "breast", "namespace": "fate_flow_test_breast"}]
}
},
"dataio_0":{
"with_label": [true],
"label_name": ["y"],
"label_type": ["int"],
"output_format": ["dense"]
}
},
"host": {
"args": {
"data": {
"train_data": [{"name": "breast", "namespace": "fate_flow_test_breast"}]
}
},
"dataio_0":{
"with_label": [false],
"output_format": ["dense"]
}
}
},
"algorithm_parameters": {
"hetero_lr_0": {
"penalty": "L2",
"optimizer": "rmsprop",
"eps": 1e-5,
"alpha": 0.01,
"max_iter": 3,
"converge_func": "diff",
"batch_size": 320,
"learning_rate": 0.15,
"init_param": {
"init_method": "random_uniform"
}
}
}
}
(7)提交job(-c -d 参数路径都可以酌情修改)
python fate_flow/fate_flow_client.py -f submit_job -d fate_flow/examples/test_hetero_lr_job_dsl.json -c fate_flow/examples/test_hetero_lr_job_conf.json
输出结果如下(比较重要的是model_id,model_version,jobId):
{
"data": {
"board_url": "http://fateboard:8080/index.html#/dashboard?job_id=202011020319360006512&role=guest&party_id=9999",
"job_dsl_path": "/data/projects/fate/python/jobs/202011020319360006512/job_dsl.json",
"job_runtime_conf_path": "/data/projects/fate/python/jobs/202011020319360006512/job_runtime_conf.json",
"logs_directory": "/data/projects/fate/python/logs/202011020319360006512",
"model_info": {
"model_id": "arbiter-10000#guest-9999#host-10000#model",
"model_version": "202011020319360006512"
}
},
"jobId": "202011020319360006512",
"retcode": 0,
"retmsg": "success"
}
(8)检查训练job的状态:
python fate_flow/fate_flow_client.py -f query_task -j 202011020319360006512 | grep f_status
输出如下:
"f_status": "success",
"f_status": "success",
(9)登陆guest fateboard查看job训练信息:
http://服务器的IP:8080
host方要upload数据,以备guest传来的数据查询用;
上传数据方法同前面所述;
注意区分测试的tabel name和前面训练时tabel name;
这种可以批量测试,可以在fateboard查看结果。
配置文件:主要修改model id和要预测的数据的name scope和table name;
vi fate_flow/examples/test_predict_conf.json
提交测试job:
python fate_flow/fate_flow_client.py -f submit_job -c fate_flow/examples/test_predict_conf.json
一般,在fateboard上能看到的,都可以通过fate_flow API获取,具体的方法和前述的有些类似,总的格式如下:
python fate_flow/fate_flow_client.py -f API名称
其中的API名称,可以在fate_flow_client.py文件中找到,如果不明白什么意思,可以挨个试试,每个API后面的参数不一样,写错了会有提示。或者多按几下tab,也会出来提示。
例如:
停止job用 -f stopjob;
输出模型在数据集上的预测结果用 -f component_metric_all;
输出训练好的模型用 -f component_output_model;
输出中间结果的数据用 -f component_output_data;
等等。
有时候需要获取job运行中间的一些结果,比如feature binning的输出结果,这个在fateboard上可以看,如果需要获取fate boared上展示的那个csv文件,可以用以下命令:
python fate_flow/fate_flow_client.py -f component_output_data -j 2020110609211442631015 -r guest -p 215 -cpn hetero_feature_binning_0 --o ./zhongjianjieguo
上面的参数都比较直白,其中 --cpn指的是计算图中的“组件”,组件的名称可以在fateboard里查看。
返回的结果:
{
"retcode": 0,
"directory": "/data/projects/fate/python/zhongjianjieguo/job_2020110609211442631015_hetero_feature_binning_0_guest_215_output_data",
"retmsg": "download successfully, please check /data/projects/fate/python/zhongjianjieguo/job_2020110609211442631015_hetero_feature_binning_0_guest_215_output_data directory"
}
我们想要的那个csv就存在上述的directory里面。