毕设需要使用fate框架,所以熟悉一下,主要参考了范星星的博客
目前只找到上边这一个V2版本的教程,特别感谢大佬
记录一下练习过程。
顺便贴一下可能会用到的文档
FATE单机部署指南
FedAI 社区中文文档
FATE FLOW命令
V2使用文档
运行环境:
ubuntu18.04 (本来装好20.04,但是不知为何卡死了,怀疑是装到机械盘磁道有损坏)
docker 20.10.12
docker-compose version 1.17.1
standalone_fate_1.7.0(docker部署)
安装好docker以后需要进入root用户,推荐把当前用户加入docker组,省去切换用户的麻烦
后续修改docker内的文件还需要一个编辑器,推荐在docker内安装vim
docker内安装vim:
一开始尝试ubuntu的安装命令,发现不行,查阅资料后发现在docker输入
cat /etc/os-release
查看os版本是centos7
(app-root) bash-4.2# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
因此应该用
yum -y install vim
fate dsl_conf v2版本的训练和预测流程
v2相关特性和配置具体参照V2
安装的fate1.7.0只有v2,后找学姐复制了v1文件,用v2中的其他文件应该也可
从本地复制文件到docker:
docker cp 本地地址 &{docker长id}:docker内部地址
#本地地址和内部地址都可以用pwd命令得到
示例:
(base) wry@gblw:~$ docker cp /home/wry/FLFLFL/FLFLFL/prac-FL代码资源/FATE项目地 址4-1/FATE-master/python 72d4f841e7cf11579ed9b99cd02f00af45f6d5a1a43358e944b55d4795169468:/data/projects/fate
建议在容器中部署单机fate时,在容器内安装交互工具FATE-Client以及测试工具FATE-Test:
直接在容器内部执行:
pip install fate-client
pip install fate-test
fate-client进行初始化配置:
# configure values in conf/service_conf.yaml
flow init -c /data/projects/fate/conf/service_conf.yaml
# alternatively, input real ip address and port info to initialize cli
flow init --ip 127.0.0.1 --port 9380
后边操作和具体参数含义参考FATE-FLOW命令,
上传数据
flow data upload -c ${conf_path}
flow data upload -c examples/dsl/v1/upload_data_host.json
flow data upload -c examples/dsl/v1/upload_data_guest.json
上传任务
这里注意记得保存过程中产生的model_id和model_version后续会用。
打开产生的链接就可以看到结果
配置预测dsl
把<model_id>和<model_version>换成上面得到的。
flow model deploy --model-id "arbiter-9999#guest-9999#host-10000#model" --model-version "202203061139523994640"
得到下面提示成功
{
"data": {
"arbiter": {
"9999": 0
},
"detail": {
"arbiter": {
"9999": {
"retcode": 0,
"retmsg": "deploy model of role arbiter 9999 success"
}
},
"guest": {
"9999": {
"retcode": 0,
"retmsg": "deploy model of role guest 9999 success"
}
},
"host": {
"10000": {
"retcode": 0,
"retmsg": "deploy model of role host 10000 success"
}
}
},
"guest": {
"9999": 0
},
"host": {
"10000": 0
},
"model_id": "arbiter-9999#guest-9999#host-10000#model",
"model_version": "202203061247574633030"
},
"retcode": 0,
"retmsg": "success"
}
记住上面新生成的model_version,小心用错,,
输入下面的命令得到预测的dsl和conf文件:
(app-root) bash-4.2# flow model get-predict-dsl --model-id "arbiter-9999#guest-9999#host-10000#model" --model-version "202203061247574633030" -o examples/dsl/v2/homo_logistic_regression/
{
"retcode": 0,
"retmsg": "Query predict dsl successfully. File path is: /data/projects/fate/examples/dsl/v2/homo_logistic_regression/predict_dsl_20220306125043.json"
}
(app-root) bash-4.2# flow model get-predict-conf --model-id "arbiter-9999#guest-9999#host-10000#model" --model-version "202203061247574633030" -o examples/dsl/v2/homo_logistic_regression/
{
"retcode": 0,
"retmsg": "Query predict conf successfully. File path is: /data/projects/fate/examples/dsl/v2/homo_logistic_regression/predict_conf_20220306125055.json"
}
其中还是替换成刚刚生成的model_id和model_version.
任务预测
把刚才得到的conf文件修改一下
直接vim +刚才的路径,vim简单操作参考菜鸟教程
"component_parameters": {
"role": {
"guest": {
"0": {
"reader_1": {
"table": {
"name": "breast_homo_guest",
"namespace": "experiment"
}
},
"reader_0": {
"table": {
"name": "breast_homo_guest",
"namespace": "experiment"
}
}
}
},
"host": {
"0": {
"reader_1": {
"table": {
"name": "breast_homo_host",
"namespace": "experiment"
}
},
"reader_0": {
"table": {
"name": "breast_homo_host",
"namespace": "experiment"
}
}
}
}
}
}
最后提交任务
(app-root) bash-4.2# flow job submit -c /data/projects/fate/examples/dsl/v2/homo_logistic_regression/predict_conf_20220306125055.json -d /data/projects/fate/examples/dsl/v2/homo_logistic_regression/predict_dsl_20220306125043.json
{
"data": {
"board_url": "http://127.0.0.1:8080/index.html#/dashboard?job_id=202203061306466751440&role=guest&party_id=9999",
"code": 0,
"dsl_path": "/data/projects/fate/fateflow/jobs/202203061306466751440/job_dsl.json",
"job_id": "202203061306466751440",
"logs_directory": "/data/projects/fate/fateflow/logs/202203061306466751440",
"message": "success",
"model_info": {
"model_id": "arbiter-9999#guest-9999#host-10000#model",
"model_version": "202203061247574633030"
},
"pipeline_dsl_path": "/data/projects/fate/fateflow/jobs/202203061306466751440/pipeline_dsl.json",
"runtime_conf_on_party_path": "/data/projects/fate/fateflow/jobs/202203061306466751440/guest/9999/job_runtime_on_party_conf.json",
"runtime_conf_path": "/data/projects/fate/fateflow/jobs/202203061306466751440/job_runtime_conf.json",
"train_runtime_conf_path": "/data/projects/fate/fateflow/jobs/202203061306466751440/train_runtime_conf.json"
},
"jobId": "202203061306466751440",
"retcode": 0,
"retmsg": "success"
}
打开上面的链接,等结果
写的比较简要,主要是记录,教程方面推荐参考文首的范星星。