【问题标题】:Get info of exposed models in Tensorflow Serving获取 Tensorflow Serving 中暴露模型的信息
【发布时间】:2018-06-15 06:09:32
【问题描述】:

一旦我有一个服务于多个模型的 TF 服务器,有没有办法查询这样的服务器以了解服务的模型?

那么是否有可能获得有关每个此类模型的信息,例如名称、接口,甚至更重要的是,服务器上存在哪些模型版本并且可能提供服务?

【问题讨论】:

    标签: tensorflow tensorflow-serving


    【解决方案1】:

    确实很难找到有关此的一些信息,但有可能获得一些模型元数据。

    request = get_model_metadata_pb2.GetModelMetadataRequest()
    request.model_spec.name = 'your_model_name'
    request.metadata_field.append("signature_def")
    response = stub.GetModelMetadata(request, 10)
        
    print(response.model_spec.version.value)
    print(response.metadata['signature_def'])
    

    希望对你有帮助。

    更新

    可以从 REST API 获取这些信息。刚刚得到

    http://{serving_url}:8501/v1/models/{your_model_name}/metadata
    

    结果是json,在这里你可以很容易地找到模型规范和签名定义。

    【讨论】:

    • 知道如何解码 response.metadata['signature_def'] 中包含的字节吗?
    • 此答案对于开发人员看到以下错误的情况也很有用:GetModelMetadataRequest must specify at least one metadata_field
    • 是否可以获得所有在 Tensorflow 服务中服务的模型的列表?
    【解决方案2】:

    可以获得模型状态以及模型元数据。在另一个答案中,仅请求元数据并且响应 response.metadata['signature_def'] 仍需要解码。

    我发现解决方案是使用内置的protobuf方法MessageToJson()转换为json字符串。然后可以将其转换为带有json.loads()的python字典

    import grpc
    import json
    from tensorflow_serving.apis import predict_pb2
    from tensorflow_serving.apis import prediction_service_pb2_grpc
    from tensorflow_serving.apis import model_service_pb2_grpc
    from tensorflow_serving.apis import get_model_status_pb2
    from tensorflow_serving.apis import get_model_metadata_pb2
    from google.protobuf.json_format import MessageToJson
    
    PORT = 8500
    model = "your_model_name"
    
    channel = grpc.insecure_channel('localhost:{}'.format(PORT))
    
    request = get_model_status_pb2.GetModelStatusRequest()
    request.model_spec.name = model
    result = stub.GetModelStatus(request, 5)  # 5 secs timeout
    print("Model status:")
    print(result)
    
    stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
    request = get_model_metadata_pb2.GetModelMetadataRequest()
    request.model_spec.name = model
    request.metadata_field.append("signature_def")
    result = stub.GetModelMetadata(request, 5)  # 5 secs timeout
    result = json.loads(MessageToJson(result))
    print("Model metadata:")
    print(result)
    

    【讨论】:

      【解决方案3】:

      要继续解码过程,可以按照 Tyler 的方法将消息转换为 JSON,或者更本机地解包到 SignatureDefMap 并从那里获取

      signature_def_map = get_model_metadata_pb2.SignatureDefMap()
      response.metadata['signature_def'].Unpack(signature_def_map)
      print(signature_def_map.signature_def.keys())
      

      【讨论】:

        【解决方案4】:

        要使用 REST API 请求数据,对于所服务的特定模型的附加数据,您可以发出(通过 curl、Postman 等):

        GET http://host:port/v1/models/${MODEL_NAME}
        GET http://host:port/v1/models/${MODEL_NAME}/metadata
        

        更多信息请查看https://www.tensorflow.org/tfx/serving/api_rest

        【讨论】:

          猜你喜欢
          • 2018-08-03
          • 1970-01-01
          • 2018-02-01
          • 2018-02-26
          • 2019-03-08
          • 2018-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多