一旦我有一个服务多个模型的 TF 服务器,有没有办法查询这样的服务器以了解服务哪些模型?
是否有可能获得有关每个此类模型的信息,例如名称、接口,甚至更重要的是,服务器上存在哪些版本的模型并可能提供服务?
确实很难找到有关此的一些信息,但有可能获得一些模型元数据。
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,您可以轻松找到模型规范和签名定义。
要继续解码过程,请遵循 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())
要使用 REST API 请求数据,对于所提供的特定模型的附加数据,您可以发出(通过curl、Postman 等):
GET http://host:port/v1/models/${MODEL_NAME}
GET http://host:port/v1/models/${MODEL_NAME}/metadata
从代码来看,http 和 grpc 都不支持列出所有已部署的模型:
https://github.com/tensorflow/serving/tree/master/tensorflow_serving/model_servers