我有一个训练有素的模型,我正在尝试通过 Docker 容器中的张量流服务来部署图像分类器。当我运行 python 代码通过 REST 请求时,我收到 404 响应。请求如下所示:
json_response = requests.post('http://localhost:8501/models/model_name:predict', data=data)
json_response.raise_for_status()
prediction = json_response.json()['predictions'][0]
print(prediction)
使用curl检查模型信息后,我得到以下响应:
<HTML><HEAD>
<TITLE>404 Not Found</TITLE>
</HEAD><BODY>
<H1>Not Found</H1>
</BODY></HTML>
我按照 tensorflow 网站上关于使用 docker 提供服务的说明进行操作,并且在设置过程中没有出现任何错误。
我相信这可能与我保存模型的方式有关,因为 tf_serving 指南中的示例有效,但我使用了 tensorflow 中概述的 SavedModel 格式,其代码如下:
tmpdir = tempfile.mkdtemp()
save_path = os.path.join(tmpdir, "model_name/1/")
print(list(model.signatures.keys())) # ["serving_default"]
infer = model.signatures["serving_default"] # 5 classes
print(infer.structured_outputs)
tf.saved_model.save(model, save_path)
之前代码的打印语句:
['serving_default']
{'dense_2': TensorSpec(shape=(None, 5), dtype=tf.float32, name='dense_2')}
在张量流 SavedModel 指南中,它显示了名为“预测”的结构化输出,这可能是问题的一部分。
作为参考,我正在使用冻结的 MobileNetV2 的迁移学习,并添加了一些层。
我对 Tensorflow 和 Tensorflow Serving 都很陌生,所以如果这是一个我可能错过的简单问题,请原谅我。
您是如何开始服务的?确保您的发布请求中的模型名称与模型配置中的名称相同。