tensorflow serving 动态加载更新模型

tensorflow serving是tensorflow用户服务器部署的方案,对于机器学习模型来说,是一个灵活的、高效能的服务系统,用来设计生产环境。tensorflow服务器保证相同的服务器架构和API,使得开发新的算法和实验变得容易。在这里不做过多介绍。
目前,tfs的模型加载有两种方式,第一种是通过在执行命令行时加载一个单模型的model_base_path的路径。:

bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server --port=8500 --model_name=test --model_base_path=/models/test/

或者使用一个模型配置文件,示例如下:

/usr/local/bin/tensorflow_model_server --port=9000 --model_config_file=/serving/models.conf

这个模型配置文件格式官网上是没有的,得去github上去看,为了伸手党看着方便我直接放出来:

model_config_list: {
  config: {
    name: "mymodel",
    base_path: "/some/filesystem/path",
    model_platform: "tensorflow",
    model_version_policy: {
       specific: {
        versions: 101,
        versions: 202
       }
    }
  },
   config: {
    name: "mymodel2",
    base_path: "/some/filesystem/path2",
    model_platform: "tensorflow",
    model_version_policy: {
       latest: {
        num_versions: N
       }
    }
  },
}

tensorflow模型支持同一个模型的不同版本的更新,但是现在模型加载了如果要新加一个模型的话除了重启服务外,暂时没有办法,通过在github里面的issue和pr里面各种找啊找,包括在源码里面看,总算找到了他的一种通过gRPC的接口进行模型热更新的方法,不需要重启服务,直接更新就可以了。但是还是个实验阶段,所以不一定能保证万无一失,为了伸手党们看着方便,我直接放代码了,要看懂的话,还是要对protobuf和gRPC的使用有一些了解。

from tensorflow_serving.apis import model_service_pb2
from tensorflow_serving.apis import model_service_pb2_grpc
from tensorflow_serving.apis import model_management_pb2
from tensorflow_serving.config import model_server_config_pb2
from tensorflow_serving.util import status_pb2

import grpc
import sys
def run():
  channel = grpc.insecure_channel('yourip:yourport')
  stub = model_service_pb2_grpc.ModelServiceStub(channel)
  request = model_management_pb2.ReloadConfigRequest()  ##message ReloadConfigRequest
  model_server_config = model_server_config_pb2.ModelServerConfig()

  config_list = model_server_config_pb2.ModelConfigList()##message ModelConfigList
  ####try to add
  one_config = config_list.config.add() #
  one_config.name= "test1"
  one_config.base_path = "/home/model/model1"
  one_config.model_platform="tensorflow"

  model_server_config.model_config_list.CopyFrom(config_list) #one of

  request.config.CopyFrom(model_server_config)

  print(request.IsInitialized())
  print(request.ListFields())

  responese = stub.HandleReloadConfigRequest(request,10)
  if responese.status.error_code ==0:
      print("reload sucessfully")
  else:
      print("reload error!")
      print(responese.status.error_code)
      print(responese.status.error_message)
run()

这个里面我重新定义了一个模型,需要加的话自己根据自己的需要再加吧。

你可能感兴趣的:(配置问题)