我目前正在尝试建立一个TensorFlow Serving客户端,其任务是处理以下格式的消息队列:
{
"model_url":"http://path/to/some/model",
"image_url":"http://path/to/some/image"
}
换句话说,每条消息都说明应使用哪种模型预测哪个图像。理想情况下,我不必在队列中指定任何其他信息即可使其工作。
但是,有两个问题。输入图像的大小可以变化,而预期的输入大小是固定的(由模型确定)。因此,客户端必须对图像进行版本调整。为此,它必须知道预期的输入大小是多少。
所以我的具体问题是:如果我知道的话model_url
,有没有办法向TensorFlow Serving服务器发出请求,从而告诉我预期的输入形状是什么样的?类似地,我需要知道与模型提供的预测相关的标签(例如,如果我们正在进行图像分类,则为“猫”,“狗”等)。
我正在寻找的将遵循以下伪代码:
request_dict = {
"meta_info":["input_shape", "labels"]
}
response = requests.post(model_url, data=json.dumps(request_dict))
input_shape = response["input_shape"]
labels = response["labels"]
是的,您可以通过将请求发送到/metadata
TF服务器的路径来从模型中请求所有形状的输入和输出。
最简单的形式:
import requests
metadata_url = f'http://{host}:{port}/v1/models/{modelname}/metadata'
response = request.get(metadata_url).json()
响应将是一个字典,其中包含模型的完整signaturedef规范(即所有输入和输出的形状)。
如果使用REST API,这可能是最简单的。有关更多示例,请参见https://www.tensorflow.org/serving/api_rest(在“元数据API”下)。还应该知道,可以同时公开用于gRPC流量(用于实际有效负载流量)和HTTP流量(用于请求模型元数据)的端口。运行服务器时只需指定两个端口。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句