1. 下载源码并打包
1.1 下载源码
在Github下载源码: 下载地址
Gitee下载源码: 下载地址 注: 不清楚gitee会不会被同步维护目前来看是作为一个镜像的仓库
建议使用"git clone",速度更快
1.2 下载插件
由于fate-serving项目使用了grpc,所以需要下载相应的插件来编译 “ *.proto “ 文件生成java文件
我们打开IDEA,选择 文件=>设置=>插件=>marketpalce
搜索 protobuf support
,并进行下载,随后重启IDEA
1.3 打包源码
选择IDEA右侧工具栏的 maven
,选择根项目生命周期中的 package
进行打包
打包结束后,分别在以下几个子模块的 target
目录下找到 fate-serving-${model}-${version}-release.zip
文件
- fate-serving-server
- fate-serving-proxy
- fate-serving-server
把他们复制到一个临时文件夹内
2. 将打包文件部署到服务器
2.1 环境搭建
- jdk
- zookeeper
zookeeper
我们这里使用docker来安装zookeeper
如果没有docker需要先安装docker
输入以下命令
docker pull zookeeper:3.5
docker run --name zookeeper -d -p 2181:2181 --restart=always zookeeper:3.5 /bin/bash
java
# 查看列表
yum -y list java*
# 选择版本下载
yum install java-11-openjdk.i686
#将jdk的安装路径加入到JAVA_HOME
vi /etc/profile
在该文件最下方加入
JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
使环境生效
. /etc/profile
2.2 创建目录结构
这里以两台服务器为例
- 1.117.25.66 (host端)
- 1.117.27.171 (gest端)
分别打开host端与guest端服务器
如果你没有下载 unzip,zip
工具还需要提前下载
yum install unzip -y
yum install zip -y
分别在两台服务器上输入以下命令
mkdir /data/projects/fate-serving/server -p
mkdir /data/projects/fate-serving/proxy -p
mkdir /data/projects/fate-serving/admin -p
将之前打包好的三个zip文件分别发送到两台服务器上
输入以下命令
unzip fate-serving-server-2.1.0-release.zip -d /data/projects/fate-serving/server
unzip fate-serving-proxy-2.1.0-release.zip -d /data/projects/fate-serving/proxy
unzip fate-serving-admin-2.1.0-release.zip -d /data/projects/fate-serving/admin
2.3 编写配置文件
server
serving-server.properties
进入 /data/projects/fate-serving
目录下的 server/conf
目录
编写server模块配置文件
cd /data/projects/fate-serving/server/conf
vim serving-server.properties
![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
<a name="IXBpN"></a>
####
<a name="Uxg0c"></a>
#### proxy
**application.properties**<br />进入 `/data/projects/fate-serving` 目录下的 `server/conf` 目录<br />编写server模块配置文件
cd /data/projects/fate-serving/proxy/conf vim application.properties
![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)
- 1: **host端配置10000,guest端配置9999**
- 2:zookeeper地址
- 3: 需要将此处的注释打开,代表proxy模块向外暴露的端口号
```bash
zk.url=localhost:2181
proxy.grpc.intra.port=8879
proxy.grpc.inter.port=8869
<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端分别如下配置
cd /data/projects/fate-serving/proxy/conf
vim route_table.json
<br />**host**
{
"route_table": {
"default": {
"default": [
{
"ip": "1.117.25.66", // host端 serving-server
"port": 8000, // host端 serving-server port
"useSSL": false
}
]
},
"10000": {
"serving": [
{
"ip": "1.117.25.66",
"port": 8000,
"useSSL": false
}
]
}
},
"permission": {
"default_allow": true
}
}
guest
由于guest端只向外发起请求,所以只需要配置dafault
{
"route_table": {
"default": {
"default": [
{
"ip": "1.117.25.66", // host端 serving-proxy
"port": 8869, // host端 serving-proxy port
"useSSL": false
}
]
}
},
"permission": {
"default_allow": true
}
}
admin
application.properties
cd /data/projects/fate-serving/admin/conf
vim application.properties
![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 启动与测试
启动
cd /data/projects/fate-serving/server
./service.sh start
cd /data/projects/fate-serving/proxy
./service.sh start
cd /data/projects/fate-serving/admin
./service.sh start
测试
在浏览器输入 x.x.x.x:8350
访问可视化面板
3. fate-flow配置
在对应的fate服务器上还需要更改fate-flow的配置,用于获取模型
打开fate-flow的配置文件(docker部署的fate和本地部署的位置不同,需要自行寻找)
- 1: 将此处改为
true
, 开启后fate-flow默认先去zookeeper中寻找,找不到才会在路由表寻找 - 2: 此处需要配置zookeeper集群的地址,如果是本机也需要具体的ip
- 3: 此处需要配置serving的地址
注意:上文配置中的zookeeper的地址是fate-serving三个服务公用的zookeeper,不需要单独创建新的zookeeper服务