Fate Serving安装部署
Posted AI浩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fate Serving安装部署相关的知识,希望对你有一定的参考价值。
文章目录
摘要
fate-serving是FATE的在线部分,在使用FATE进行联邦建模完成之后,可以使用fate-serving进行在线联合预测。 FATE-SERVING 2.0 支持的特性:
- 单笔预测,2.0.*版本guest方与host方将并行计算,从而降低了耗时。
- 批量预测,2.0.*版本开始引入的新的特性,一次请求可以批量提交一批需要预测的数据,极大地提高了吞吐量。
- 并行计算,在1.3.*版本中guest方的预测与host方的预测是串行,从2.0版本开始guest方与host方将采用并行预测的方式,各方预测时可以根据特征数量拆分成子任务再并行计算。
- 可视化的集群操作界面,引入新的组件serving-admin,它将提供集群的可视化操作界面,包括模型的管理、流量的监控、配置的查看、服务的管理等操作。
- 新的模型持久化/恢复方式,在serving-server重启时1.3.版本采用了回放推送模型的请求的方式来实例重启时恢复模型 ,2.0. 版本使用了直接恢复内存数据的方式恢复模型。
- java版的SDK,使用该SDK可以使用FATE-SERVING带有的服务治理相关的功能,如服务自动发现、路由等功能。
- 新的扩展模块,将需要用户自定义开发的部分(如:host方的特征获取adaptor接口开发)放到该模块,从而与核心源码分离。
- 支持多种缓存方式,FATE-SERVING在1.3.*版本强依赖redis,从2.0.*版本开始,不再强依赖redis。可以选择不使用缓存、使用本地内存缓存、使用redis。
- 更改内部预测流程,重构了核心代码,去除调了前后处理等组件,使用了统一的异常处理。算法组件不再跟rpc接口紧耦合。
- 提供命令行工具,能够查询配置、模型信息
架构图
部署架构
fate-serving 的部署架构图如下
如上图所示,整个集群需要有几个组件
serving-server
serving-server用于实时处理在线预测请求,理论上serving-server需要从fate-flow加载模型成功之后才能对外提供服务。在FATE中建好模型之后,通过fate-flow的推送模型脚本可以将模型推送至serving-server。 推送成功之后,serving-server会将该模型相关的预测接口注册进zookeeper ,外部系统可以通过服务发现获取接口地址并调用。同时本地文件持久化该模型,以便在serving-server实例在集群中某些组件不可用的情况下,仍然能够从本地文件中恢复模型。
serving-proxy
serving-proxy 是serving-server的代理,对外提供了grpc接口以及http的接口,主要用于联邦预测请求的路由转发以及鉴权。在离线的联邦建模时,每一个参与方都会分配一个唯一的partId。serving-proxy维护了一个各参与方partId的路由表,并通过路由表中的信息来转发请求。
serving-admin
serving-admin 提供在线集群的可视化操作界面,可以查看管理集群中各节点的配置以及状态、查看模型列表、流量的调控、并能提供一定的监控的功能。
zookeeper
zookeeper 用户各组件的信息同步协调以及服务注册于发现
工作时序图
部署
安装JDK
在目标服务器(192.168.65.161 192.168.65.162 )root用户下执行
vi /etc/profile
在上图红线行这前插入以下内容
export JAVA_HOME=/data/projects/fate/common/jdk/jdk-8u192
export JRE_HOME=${JAVA_HOME}
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
插入后如下图所示:
然后保存退出,执行如下命令:
source /etc/profile
java -version
看到如下信息就说明执行成功了,再按照相同的步骤完成对192.168.65.162的配置。
安装zookeeper
在目标服务器(192.168.65.161 192.168.65.162 )app用户下执行
注意:切换为app用户
(1) 创建安装目录并下载zookeeper软件及解压
cd /data/projects
mkdir zookeeper
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
tar xzf apache-zookeeper-3.6.2-bin.tar.gz
如果电脑没有安装wget,还需要安装wget,执行命令:
yum install wget
如果出现下载异常的问题,大家可以使用迅雷下载,把地址复制到迅雷里面,就可以下载下来。
下载完成后再导进虚拟机里面。
(2) 配置zookeeper
cd /data/projects/apache-zookeeper-3.6.2-bin/conf
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
改动就两个地方,第一个地方是路径:dataDir=/data/projects/zookeeper
第二个地方是在末尾增加:admin.enableServer=false
(3) 启动zookeeper
cd /data/projects/apache-zookeeper-3.6.2-bin/bin/
sh ./zkServer.sh start
如上图,看到这样的状态就说明zookeeper启动成功了。接下来改干啥呢?当然是配置192.168.65.162了。千万别忘了!!!
安装serving-server
在目标服务器(192.168.65.161 192.168.65.162 )app用户下执行
(1) 安装unzip解压软件
sudo yum -y install unzip
(2) 安装server
下载软件
cd /data/projects
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate-serving-server-2.0.5-release.zip
创建目录并解压下载的软件
mkdir fate-serving
mkdir fate-serving/server
unzip fate-serving-server-2.0.5-release.zip -d fate-serving/server/
(3) 修改配置文件并启动服务
vi fate-serving/server/conf/serving-server.properties
按照上图标注的红框修改,然后退出保存。注意第一个红框处host修改为192.168.65.161,guest修改为192.168.65.162。
使用如下命令启动server服务:
cd /data/projects/fate-serving/server
sh service.sh restart
出现上图的log说明启动成功了
安装serving-proxy
在目标服务器(192.168.65.161 192.168.65.162 )app用户下执行
(1) 下载软件并解压
cd /data/projects
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate-serving-proxy-2.0.5-release.zip
mkdir fate-serving/proxy
unzip fate-serving-proxy-2.0.5-release.zip -d fate-serving/proxy/
(2)修改配置文件并启动
vi fate-serving/proxy/conf/application.properties
按照上图中修改,说明:第一个红框中配置的事Party ID,host是10000,guest是9999。第三个红框中的两个字段被注释了,要打开。
然后执行下面的命令启动服务
cd fate-serving/proxy/
sh service.sh restart
出现上图的log说明启动成功了
(3) 修改host的proxy服务route-table
cd fate-serving/proxy/conf/
vi route_table.json
{
"route_table": {
"default": {
"default": [
{
"ip": "192.168.65.161",
"port": 8000,
"useSSL": false
}
]
},
"10000": {
"serving": [
{
"ip": "192.168.65.161",
"port": 8000
}
]
}
},
"permission": {
"default_allow": true
}
}
(4) 修改guest的proxy服务route-table
由于guest的请求只会向外发送,所以只需要配置出口ip端口就好, 如下代码所示只需要配置default转发规则,则会将所有请求转发至出口ip
{
"route_table": {
"default": {
"default": [
{
"ip": "192.168.65.161",
"port": 8869
}
]
},
"9999": {
"serving": [
{
"ip": "192.168.65.162",
"port": 8000
}, {
"ip": "192.168.65.162",
"port": 8001
}
]
}
},
"permission": {
"default_allow": true
}
}
安装serving-admin
在目标服务器(192.168.65.161 192.168.65.162 )app用户下执行
(1) 下载软件并解压
cd /data/projects
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate-serving-admin-2.0.5-release.zip
mkdir fate-serving/admin
unzip fate-serving-admin-2.0.5-release.zip -d fate-serving/admin/
放一张图,虽然没有啥用,就是为了看看log
(2) 修改配置文件并启动
vi fate-serving/admin/conf/application.properties
只修改红框标注的地方,其他的不用改。注意host和guest都要修改。
然后启动服务,执行如下命令:
cd fate-serving/admin/
sh service.sh restart
出现上图的log说明启动成功了。
打开浏览器输入http://192.168.65.161:8350/
用户名和密码均输入admin后登录看到如下页面
测试
训练模型
在guest机上以app用户登录执行以下命令训练模型,这将会使用hetero_lr算法训练一个模型出来。
source /data/projects/fate/bin/init_env.sh
cd /data/projects/fate/examples/min_test_task/
python run_task.py -m 1 -gid 9999 -hid 10000 -aid 10000 -f fast
命令执行后可在浏览器输入http://192.168.65.162:8080/#/history打开FATEBoard查看建模任务运行情况。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gCnoQggO-1628237142717)(image-20210806102840046.png)]
将会陆续产生4个任务,等待4个任务status都变为success后开始下一步发布模型。
发布模型
在guest机的FATEBoard点击上步中第一个运行的job,进入job详情页。
在job详情页,先点击位置1处,再点击位置2处进入查看模型信息页面。在查看模型信息页面点击tab页log,搜索寻找到model_id和model_version的值并记录下来。
执行如下命令:
source /data/projects/fate/bin/init_env.sh
cd /data/projects/fate/python/fate_flow
vi examples/publish_load_model.json
将记录的model_id和model_version的值填入上图第三个红框处对应位置后保存退出,第一个红框修改为发起者的party id,guest的party id是9999,role里面也修改对应的party id。然后执行以下命令。
python fate_flow_client.py -f load -c examples/publish_load_model.json
看到上图所示则模型发布成功。
绑定模型
vi examples/bind_model_service.json
按上图修改内容,service_id的值可以自定义,并将记录的model_id和model_version的值填入上图红框处对应位置后保存退出,然后执行以下命令。
python fate_flow_client.py -f bind -c examples/bind_model_service.json
预测测试
在浏览器输入地址http://192.168.65.162:8350/并以admin/admin登录。
打开 Tab页 Models可看到刚才发布并绑定的service_id为mytest的模型。
然后点击Tab页Service,可查看到Environment列有名字为test的三行数据。其中name为“serving/test/inference”的是单次预测接口,“serving/test/batchInference”是批量预测接口。点击单次预测接口Operation的Verify按钮以输入测试数据进行预测。
在弹出的对话框中输入以下数据后按Verify按钮:
参考文件
https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/FATE-SERVING-2.0.html
以上是关于Fate Serving安装部署的主要内容,如果未能解决你的问题,请参考以下文章
Fate部署实战——从零开始实现Fate cluster部署