1. 下载源码并打包

1.1 下载源码

在Github下载源码: 下载地址
Gitee下载源码: 下载地址 注: 不清楚gitee会不会被同步维护目前来看是作为一个镜像的仓库
建议使用"git clone",速度更快

1.2 下载插件

由于fate-serving项目使用了grpc,所以需要下载相应的插件来编译 “ *.proto “ 文件生成java文件

我们打开IDEA,选择 文件=>设置=>插件=>marketpalce
image.png
搜索 protobuf support ,并进行下载,随后重启IDEA
image.png

1.3 打包源码

选择IDEA右侧工具栏的 maven ,选择根项目生命周期中的 package 进行打包
image.png
打包结束后,分别在以下几个子模块的 target 目录下找到
fate-serving-${model}-${version}-release.zip文件

  • fate-serving-server
  • fate-serving-proxy
  • fate-serving-server

image.png
把他们复制到一个临时文件夹内
image.png

2. 将打包文件部署到服务器

2.1 环境搭建

  • jdk
  • zookeeper

zookeeper
我们这里使用docker来安装zookeeper
如果没有docker需要先安装docker
输入以下命令

  1. docker pull zookeeper:3.5
  2. docker run --name zookeeper -d -p 2181:2181 --restart=always zookeeper:3.5 /bin/bash

java

  1. # 查看列表
  2. yum -y list java*
  3. # 选择版本下载
  4. yum install java-11-openjdk.i686
  1. #将jdk的安装路径加入到JAVA_HOME
  2. vi /etc/profile

在该文件最下方加入

  1. JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64
  2. PATH=$PATH:$JAVA_HOME/bin
  3. CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  4. export JAVA_HOME CLASSPATH PATH

使环境生效

  1. . /etc/profile

2.2 创建目录结构

这里以两台服务器为例

  • 1.117.25.66 (host端)
  • 1.117.27.171 (gest端)

分别打开host端与guest端服务器
如果你没有下载 unzip,zip 工具还需要提前下载

  1. yum install unzip -y
  2. yum install zip -y

分别在两台服务器上输入以下命令

  1. mkdir /data/projects/fate-serving/server -p
  2. mkdir /data/projects/fate-serving/proxy -p
  3. mkdir /data/projects/fate-serving/admin -p

将之前打包好的三个zip文件分别发送到两台服务器上
输入以下命令

  1. unzip fate-serving-server-2.1.0-release.zip -d /data/projects/fate-serving/server
  2. unzip fate-serving-proxy-2.1.0-release.zip -d /data/projects/fate-serving/proxy
  3. unzip fate-serving-admin-2.1.0-release.zip -d /data/projects/fate-serving/admin

2.3 编写配置文件

如果没有特别说明表示host与guest配置相同

server

serving-server.properties
进入 /data/projects/fate-serving 目录下的 server/conf 目录
编写server模块配置文件

  1. cd /data/projects/fate-serving/server/conf
  2. vim serving-server.properties
  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21812468/1632124163750-a614ad5c-0b69-4846-b1be-3e6bf3570593.png#height=396&id=ube5d61e4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=620&originWidth=1031&originalType=binary&ratio=1&size=70198&status=done&style=none&width=658.5)
  • 1: server向外暴露的端口
  • 2: 此处的adaptor为默认adaptor,以后需要根据你自己的模型编写相应的类
  • 3: fate-flow地址,分别为12.地址
  • 4: zookeeper地址 ```bash feature.single.adaptor=com.webank.ai.fate.serving.adaptor.dataaccess.MockAdapter feature.batch.adaptor=com.webank.ai.fate.serving.adaptor.dataaccess.MockBatchAdapter

model.transfer.url=http://1.117.11.147:9380/v1/model/transfer

zk.url=localhost:2181

  1. <a name="IXBpN"></a>
  2. ####
  3. <a name="Uxg0c"></a>
  4. #### proxy
  5. **application.properties**<br />进入 `/data/projects/fate-serving` 目录下的 `server/conf` 目录<br />编写server模块配置文件

cd /data/projects/fate-serving/proxy/conf vim application.properties

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21812468/1632123042100-73fe3de6-100e-4207-9334-a73ab47d6a9d.png#height=512&id=u1a24b587&margin=%5Bobject%20Object%5D&name=image.png&originHeight=655&originWidth=735&originalType=binary&ratio=1&size=64120&status=done&style=none&width=574.5)
  2. - 1: **host端配置10000guest端配置9999**
  3. - 2zookeeper地址
  4. - 3 需要将此处的注释打开,代表proxy模块向外暴露的端口号
  5. ```bash
  6. zk.url=localhost:2181
  7. proxy.grpc.intra.port=8879
  8. proxy.grpc.inter.port=8869
  1. <br />**route_table.json **<br />之后还需要路由转发表,这张表配置了proxy在接收到请求后将请求向哪里转发<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21812468/1632123382096-5a6367ca-d84e-4a16-8db3-fe32384c6a98.png#height=356&id=ua99a0e54&margin=%5Bobject%20Object%5D&name=image.png&originHeight=712&originWidth=1519&originalType=binary&ratio=1&size=181271&status=done&style=none&width=759.5)<br />根据架构图可以知道<br />**guest端的proxy向host端的proxy转发**<br />**host端的proxy向host端的sever转发**

所以guest端与host端分别如下配置

  1. cd /data/projects/fate-serving/proxy/conf
  2. vim route_table.json
  1. <br />**host**
  1. {
  2. "route_table": {
  3. "default": {
  4. "default": [
  5. {
  6. "ip": "1.117.25.66", // host serving-server
  7. "port": 8000, // host serving-server port
  8. "useSSL": false
  9. }
  10. ]
  11. },
  12. "10000": {
  13. "serving": [
  14. {
  15. "ip": "1.117.25.66",
  16. "port": 8000,
  17. "useSSL": false
  18. }
  19. ]
  20. }
  21. },
  22. "permission": {
  23. "default_allow": true
  24. }
  25. }

guest
由于guest端只向外发起请求,所以只需要配置dafault

  1. {
  2. "route_table": {
  3. "default": {
  4. "default": [
  5. {
  6. "ip": "1.117.25.66", // host serving-proxy
  7. "port": 8869, // host serving-proxy port
  8. "useSSL": false
  9. }
  10. ]
  11. }
  12. },
  13. "permission": {
  14. "default_allow": true
  15. }
  16. }

admin

application.properties

  1. cd /data/projects/fate-serving/admin/conf
  2. vim application.properties
  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21812468/1632124619887-a51c6231-cf61-4b55-8771-4529dd602f07.png#height=270&id=u433970cb&margin=%5Bobject%20Object%5D&name=image.png&originHeight=294&originWidth=713&originalType=binary&ratio=1&size=20916&status=done&style=none&width=654.5)
  • 1: 可视化面板访问端口
  • 2: zookeeper地址
  • 3: 可视化面板账号密码

2.4 启动与测试

启动

  1. cd /data/projects/fate-serving/server
  2. ./service.sh start
  3. cd /data/projects/fate-serving/proxy
  4. ./service.sh start
  5. cd /data/projects/fate-serving/admin
  6. ./service.sh start

测试
在浏览器输入 x.x.x.x:8350 访问可视化面板

3. fate-flow配置

在对应的fate服务器上还需要更改fate-flow的配置,用于获取模型
打开fate-flow的配置文件(docker部署的fate和本地部署的位置不同,需要自行寻找)
image.png

  • 1: 将此处改为 true , 开启后fate-flow默认先去zookeeper中寻找,找不到才会在路由表寻找
  • 2: 此处需要配置zookeeper集群的地址,如果是本机也需要具体的ip
  • 3: 此处需要配置serving的地址

注意:上文配置中的zookeeper的地址是fate-serving三个服务公用的zookeeper,不需要单独创建新的zookeeper服务