如何查询TensorFlow Serving中已部署的多模型及版本等详细信息?
当然可以!TensorFlow Serving专门提供了API来让你查询服务器上部署的所有模型信息,不管是多模型还是单模型部署,都能轻松拿到你要的模型名称、版本和可调用接口。咱直接上干货:
REST方式不用额外装库,用curl或者Postman就能搞定,非常方便:
查询所有已部署的模型名称
执行这条命令,把<你的TF Serving地址>和<端口>换成你实际的地址(比如本地部署就是localhost:8501,REST默认用8501端口):curl http://<你的TF Serving地址>:<端口>/v1/models返回的JSON结果会列出所有当前部署的模型名称,类似这样:
{ "model_version_status": [ { "model_name": "image_classifier", ... }, { "model_name": "text_generator", ... } ] }查询单个模型的版本信息
想知道某个模型有哪些可用版本,替换<模型名称>后执行:curl http://<你的TF Serving地址>:<端口>/v1/models/<模型名称>返回内容里的
model_version_status字段会列出每个版本的状态(比如AVAILABLE表示可正常调用)和对应的版本号。查询模型的可调用接口(签名)
要获取某个版本模型的具体输入输出规范,也就是调用时要遵循的接口,用这条命令:curl http://<你的TF Serving地址>:<端口>/v1/models/<模型名称>/versions/<版本号>/metadata结果里的
signature_def字段会详细说明每个签名的输入参数、数据类型,以及输出结果的结构,这就是你调用模型的核心依据。
如果你的服务是用gRPC和TF Serving通信的(默认gRPC端口是8500),可以用官方的Python客户端库tensorflow-serving-api来写代码查询:
先安装依赖:
pip install tensorflow-serving-api
然后写个简单的查询示例:
import grpc from tensorflow_serving.apis import model_service_pb2_grpc, model_management_pb2, get_model_metadata_pb2 # 建立gRPC连接 channel = grpc.insecure_channel("localhost:8500") stub = model_service_pb2_grpc.ModelServiceStub(channel) # 1. 查询所有模型的状态(包含名称和版本) status_request = model_management_pb2.GetModelStatusRequest() status_response = stub.GetModelStatus(status_request) print("所有模型状态:", status_response) # 2. 查询单个模型的接口元数据 metadata_request = get_model_metadata_pb2.GetModelMetadataRequest() metadata_request.model_spec.name = "image_classifier" # 替换成你的模型名称 metadata_request.metadata_field.append("signature_def") metadata_response = stub.GetModelMetadata(metadata_request) print("模型接口元数据:", metadata_response)
如果是用Docker跑的TF Serving,你也可以通过查看容器的启动命令(比如docker inspect <容器ID>)或者挂载的模型目录来确认部署的模型,但这种方式不如API实时,毕竟API是直接从运行中的服务获取状态的。
总之,通过上面的REST或gRPC API,你完全可以拿到所有你需要的信息:已部署模型的名称、每个模型的可用版本,以及每个版本的可调用接口细节。
内容的提问来源于stack exchange,提问作者5agado




