-
Notifications
You must be signed in to change notification settings - Fork 78
FATE serving2.0打包以及部署
- 源码打包部署步骤
-
从github上克隆代码git clone https://github.com/FederatedAI/FATE-Serving.git
-
执行 cd FATE-Serving ,进入源码的根目录。
-
执行 mvn clean package命令
-
拷贝 serving-server/target/fate-serving-server-{version}-release.zip 到想要部署的路径下,并解压。(version为当前版本)
-
根据需要修改或者不修改部署目录下conf/serving-server.properties文件,具体的配置项见serving-server.properties的配置详解
需要检查配置文件中以下几点:
zk.url 是否配置正确
model.transfer.url是否配置正确
-
sh service.sh restart 启动应用(windows 脚本暂时不 支持,如有需要可自行编写)
有可能出现的问题:
jdk 没有安装成功,可以尝试执行 java -version 查看java命令是否能正常执行
-
检查日志与端口看启动是否正常
默认日志目录:
安装目录下logs文件夹,查看fate-serving-server.log 和fate-serving-server-error.log
可以结合 ps 命令以及netstat命令查看进程以及端口状态
源码中的配置文件没有罗列出所有配置,只保留了必需的配置,其他配置都采用了默认值。如果需要可以根据以下表格来在配置文件中新增条目。
配置项 | 配置项含义 | 默认值 |
---|---|---|
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 密码 | 默认空 |
-
从github上克隆代码git clone https://github.com/FederatedAI/FATE-Serving.git (若已执行过,则不需要再次执行)
-
执行 cd FATE-Serving ,进入源码的根目录。
-
执行 mvn clean package命令 (若已执行过,则不需要再次执行)
-
拷贝 fate-serving-proxy/target/fate-serving-proxy-{version}-release.zip 到想要部署的路径下,并解压。(version为当前版本)
-
修改部署目录下 conf/application.properties文件,具体的配置项解释见下面配置文件详解
-
配置router_table.json ,具体的配置项解释见下面router_table.json文件详解,可以结合下文中具体的案例理解。
对router_table.json 的修改是实时生效,不需要重启serving-proxy。配置本身为json格式,修改时需要注意是否满足json格式。
-
sh service.sh restart 启动应用(windows 脚本暂时不 支持,如有需要可自行编写)
-
检查日志与端口看启动是否正常
配置项 | 配置项含义 | 默认值 |
---|---|---|
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 密码 | 默认空 |
下面的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可以更方便地查看并操作模型等信息,能更方便地监控集群。
- 从github上克隆代码git clone https://github.com/FederatedAI/FATE-Serving.git (若已执行过,则不需要再次执行)
- 执行 cd FATE-Serving ,进入源码的根目录。
- 执行 mvn clean package -Dmaven.test.skip=true命令 (若已执行过,则不需要再次执行)
- 拷贝 fate-serving-admin/target/fate-serving-admin-{version}-release.zip 到想要部署的路径下,并解压。(version为当前版本)
- 修改部署目录下 conf/application.properties文件,具体的配置项解释见下文
- sh service.sh restart 启动应用(windows脚本暂时不支持,如有需要可自行编写)
- 通过浏览器访问admin页面,默认端口8350
配置项 | 配置项含义 | 默认值 |
---|---|---|
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 |