Skip to content

FATE serving2.0打包以及部署

forgivedengkai edited this page Aug 20, 2020 · 1 revision

serving-server的部署

  • 源码打包部署步骤
  1. 从github上克隆代码git clone https://github.com/FederatedAI/FATE-Serving.git

  2. 执行 cd FATE-Serving ,进入源码的根目录。

  3. 执行 mvn clean package命令

  4. 拷贝 serving-server/target/fate-serving-server-{version}-release.zip 到想要部署的路径下,并解压。(version为当前版本)

  5. 根据需要修改或者不修改部署目录下conf/serving-server.properties文件,具体的配置项见serving-server.properties的配置详解

    需要检查配置文件中以下几点:

    zk.url 是否配置正确

    model.transfer.url是否配置正确

  6. sh service.sh restart 启动应用(windows 脚本暂时不 支持,如有需要可自行编写)

    有可能出现的问题:

    jdk 没有安装成功,可以尝试执行 java -version 查看java命令是否能正常执行

  7. 检查日志与端口看启动是否正常

    默认日志目录:

    安装目录下logs文件夹,查看fate-serving-server.log 和fate-serving-server-error.log

    可以结合 ps 命令以及netstat命令查看进程以及端口状态

serving-server.properties的配置详解

源码中的配置文件没有罗列出所有配置,只保留了必需的配置,其他配置都采用了默认值。如果需要可以根据以下表格来在配置文件中新增条目。

配置项 配置项含义 默认值
port 服务监听端口 8000
remoteModelInferenceResultCacheSwitch 预测结果的缓存开关,false代表不使用缓存,true代表使用缓存,该配置跟cache.type 配合使用 false
cache.type 缓存类型,可选local/redis,其中local为进程中维持的LRU内存,不建议在生产上使用local local
local.cache.expire 内置缓存过期时间,单位:秒,该配置在cache.type=local时生效 30
local.cache.interval 内置缓存过期处理间隔,单位:秒 ,该配置在cache.type=local时生效 3
local.cache.maxsize 内置缓存最大存储数量 ,该配置在cache.type=local时生效 10000
redis.ip redis ip地址,该配置在cache.type=redis时生效 127.0.0.1
redis.port redis端口 ,该配置在cache.type=redis时生效 3306
redis.cluster.nodes redis集群节点,配置则开启集群模式 ,该配置在cache.type=redis时生效
redis.password redis密码 ,该配置在cache.type=redis时生效
redis.expire redis过期时间 ,该配置在cache.type=redis时生效 3000
redis.timeout redis链接超时时间 ,该配置在cache.type=redis时生效 2000
redis.maxIdle redis连接池最大空闲链接 ,该配置在cache.type=redis时生效 2
redis.maxTotal redis连接池最大数量 ,该配置在cache.type=redis时生效 20
serving.core.pool.size grpc服务线程池核心线程数 cpu核心数
serving.max.pool.size grpc服务线程池最大线程数 cpu核心数 * 2
serving.pool.alive.time grpc服务线程池超时时间 1000
serving.pool.queue.size grpc服务线程池队列数量 100
single.inference.rpc.timeout 单次预测超时时间 3000
batch.inference.max 单次批量预测数量 300
batch.inference.rpc.timeout 批量预测超时时间 3000
batch.split.size 批量任务拆分数量,在批量预测时会根据该参数大小将批量任务拆分成多个子任务并行计算,比如如果该配置为100,那300条预测的批量任务会拆分成3个100条子任务并行计算 100
lr.use.parallel lr模型是否启用并行计算 false
lr.split.size LR多任务拆分数量 ,该配置在lr.use.parallel=true时生效 500
feature.batch.adaptor 批量特征处理器,Host方需要配置,用于批量获取Host方特征信息,用户可根据业务情况,实现AbstractBatchFeatureDataAdaptor接口 com.webank.ai.fate.serving.adaptor.dataaccess.MockBatchAdapter
feature.single.adaptor 单次特征处理器,Host方需要配置,用于获取Host方特征信息,用户可根据业务情况,实现AbstractSingleFeatureDataAdaptor接口 com.webank.ai.fate.serving.adaptor.dataaccess.MockAdapter
model.cache.path 模型缓存地址,对于内存中存在的模型,serving-server会持久化到本地以便在重启时恢复 服务部署目录
model.transfer.url fateflow模型拉取接口地址,优先使用注册中心中的fateflow地址,若注册中心中没有找到fateflow地址,则会使用该配置地址 http://127.0.0.1:9380/v1/model/transfer
proxy 离线路由proxy地址,建议通过zookeeper来获取地址,不建议直接配置 127.0.0.1:8000
zk.url zookeeper集群地址 localhost:2181,localhost:2182,localhost:2183
useRegister 使用注册中心,开启后会将serving-server中的接口注册至zookeeper true
useZkRouter 使用zk路由,开启后rpc调用时会使用注册中心中的地址进行路由 true
acl.enable 是否使用zookeeper acl鉴权 false
acl.username acl 用户名 默认空
acl.password acl 密码 默认空

serving-proxy的部署

  1. 从github上克隆代码git clone https://github.com/FederatedAI/FATE-Serving.git (若已执行过,则不需要再次执行)

  2. 执行 cd FATE-Serving ,进入源码的根目录。

  3. 执行 mvn clean package命令 (若已执行过,则不需要再次执行)

  4. 拷贝 fate-serving-proxy/target/fate-serving-proxy-{version}-release.zip 到想要部署的路径下,并解压。(version为当前版本)

  5. 修改部署目录下 conf/application.properties文件,具体的配置项解释见下面配置文件详解

  6. 配置router_table.json ,具体的配置项解释见下面router_table.json文件详解,可以结合下文中具体的案例理解。

    对router_table.json 的修改是实时生效,不需要重启serving-proxy。配置本身为json格式,修改时需要注意是否满足json格式。

  7. sh service.sh restart 启动应用(windows 脚本暂时不 支持,如有需要可自行编写)

  8. 检查日志与端口看启动是否正常

serving-proxy配置文件application.properties的详解

配置项 配置项含义 默认值
server.port 监听的http端口 8059
coordinator 本方partid,此参数比较重要 9999
inference.service.name 转发服务名称 serving
print.input.data 访问日志中是否打印输入参数 false
print.output.data 访问日志中是否打印返回结果 false
proxy.async.coresize 异步处理http请求线程池核心线程数 10
proxy.async.maxsize 异步处理http请求线程池最大线程数 100
proxy.async.timeout 处理http请求的超时时间 5000
proxy.grpc.batch.inference.timeout 批量预测请求的超时时间 10000
proxy.grpc.inference.timeout 单笔预测请求的超时时间 3000
proxy.grpc.inter.port 对集群外暴露的grpc端口 8869
proxy.grpc.intra.port 对集群内暴露的grpc端口 8879
proxy.grpc.threadpool.coresize 处理grpc请求的线程池的核心线程数 50
proxy.grpc.threadpool.maxsize 处理grpc请求的线程池的最大线程数 100
proxy.grpc.threadpool.queuesize 处理grpc请求的线程池的队列大小 10
proxy.grpc.unaryCall.timeout unaryCall请求的超时时间 3000
useZkRouter 是否使用zk true
zk.url zk集群地址 localhost:2181,localhost:2182,localhost:2183
acl.enable 是否使用zookeeper acl鉴权 false
acl.username acl 用户名 默认空
acl.password acl 密码 默认空

serving-proxy路由表route_table.json配置

下面的json代码大致说明了router_table.json的填写规则 ,之后我们会根据具体案例来配置一次。

{
  "route_table": {
    "default": {
      "default": [
        // 此处用于配置serving-proxy默认转发地址,切记不能配置成serving-proxy自己的ip端口,会形成回环
        {
          "ip": "127.0.0.1",
          "port": 9999
        }
      ]
    }
    //  guest方使用上面的default配置就能满足大部分需求。
    ,
    //serving-proxy 在收到grpc   unaryCall接口的请求后,会根据请求中的目的partyId尝试匹配。比如请求中目的partId为10000,则会在路由表中查找是否存在10000的配置
		//此处的10000表示目的partId 为10000时的路由,匹配到10000之后,再根据请求中的角色信息role ,比如请求中role 为serving则会继续匹配下面是否有serving的配置
    "10000": {
      // 在未找到对应role的路由地址时,会使用default的配置
      "default": [
        {
          "ip": "127.0.0.1",
          "port": 8889
        }
      ],
    
      
      "serving": [
        // 当已经匹配到role为serving,则代表请求为发给serving-server的请求,这时检查是否启用了ZK为注册中心,如果已启用ZK则优先从ZK中获取目标地址,未找到时使用以下地址
        // 此处配置己端对应serving服务地址列表,ip和port对应serving-server所启动的grpc服务地址
        {
          "ip": "127.0.0.1",
          "port": 8080
        }
      ]
    }
  },
  // 此处配置当前路由表规则开启/关闭
  "permission": {
    "default_allow": true
  }
}

serving-admin的部署

serving-admin提供了集群的可视化操作界面,可以展示集群中各实例的配置、状态、模型、流量等信息,并可以执行模型的卸载、服务接口的权重调整等操作

建议安装serving-admin,通过使用serving-admin可以更方便地查看并操作模型等信息,能更方便地监控集群。

  1. 从github上克隆代码git clone https://github.com/FederatedAI/FATE-Serving.git (若已执行过,则不需要再次执行)
  2. 执行 cd FATE-Serving ,进入源码的根目录。
  3. 执行 mvn clean package -Dmaven.test.skip=true命令 (若已执行过,则不需要再次执行)
  4. 拷贝 fate-serving-admin/target/fate-serving-admin-{version}-release.zip 到想要部署的路径下,并解压。(version为当前版本)
  5. 修改部署目录下 conf/application.properties文件,具体的配置项解释见下文
  6. sh service.sh restart 启动应用(windows脚本暂时不支持,如有需要可自行编写)
  7. 通过浏览器访问admin页面,默认端口8350

serving-admin配置文件application.properties的详解

配置项 配置项含义 默认值
server.port 服务端口 8350
local.cache.expire 内置缓存过期时间,单位:秒 300
zk.url zookeeper集群地址,serving-admin需开启注册中心 localhost:2181,localhost:2182,localhost:2183
grpc.timeout grpc请求超时时间 5000
admin.username 预设用户名 admin
admin.username 预设密码 admin
acl.enable 是否使用zookeeper acl鉴权 false
acl.username acl 用户名 默认空
acl.password acl 密码 默认空
print.input.data flow日志打印请求参数 false
print.output.data flow日志打印返回参数 false