Fate Serving安装部署

Posted AI浩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fate Serving安装部署相关的知识,希望对你有一定的参考价值。

摘要

fate-serving是FATE的在线部分,在使用FATE进行联邦建模完成之后,可以使用fate-serving进行在线联合预测。 FATE-SERVING 2.0 支持的特性:

  1. 单笔预测,2.0.*版本guest方与host方将并行计算,从而降低了耗时。
  2. 批量预测,2.0.*版本开始引入的新的特性,一次请求可以批量提交一批需要预测的数据,极大地提高了吞吐量。
  3. 并行计算,在1.3.*版本中guest方的预测与host方的预测是串行,从2.0版本开始guest方与host方将采用并行预测的方式,各方预测时可以根据特征数量拆分成子任务再并行计算。
  4. 可视化的集群操作界面,引入新的组件serving-admin,它将提供集群的可视化操作界面,包括模型的管理、流量的监控、配置的查看、服务的管理等操作。
  5. 新的模型持久化/恢复方式,在serving-server重启时1.3.版本采用了回放推送模型的请求的方式来实例重启时恢复模型 ,2.0. 版本使用了直接恢复内存数据的方式恢复模型。
  6. java版的SDK,使用该SDK可以使用FATE-SERVING带有的服务治理相关的功能,如服务自动发现、路由等功能。
  7. 新的扩展模块,将需要用户自定义开发的部分(如:host方的特征获取adaptor接口开发)放到该模块,从而与核心源码分离。
  8. 支持多种缓存方式,FATE-SERVING在1.3.*版本强依赖redis,从2.0.*版本开始,不再强依赖redis。可以选择不使用缓存、使用本地内存缓存、使用redis。
  9. 更改内部预测流程,重构了核心代码,去除调了前后处理等组件,使用了统一的异常处理。算法组件不再跟rpc接口紧耦合。
  10. 提供命令行工具,能够查询配置、模型信息

架构图

部署架构
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部署

Tensorflow Serving介绍及部署安装

TF serving模型部署 bazel编译安装

docker 部署FATE

使用tensorflow-serving部署tensorflow模型

隐私计算FATE-模型训练