【发布时间】:2021-10-31 04:12:21
【问题描述】:
我对软件 MLflow 相当陌生,我正在尝试向我开发的服务模型发出 HTTP POST 请求,但出现标题中的错误。
情况是这样的。
我将 SQLite 数据库用作后端存储,并将本地文件夹用作工件存储。
运行 mlflow 服务器的命令如下(模型处于 Staging 阶段):
mlflow models serve -m "models:/nuovo_modello/Staging" -p 1234
我在 MLflow 上注册了模型,这是模型架构:
当我尝试按如下方式发出 POST 请求时(如 TF 服务指南中所建议:https://www.tensorflow.org/tfx/serving/api_rest#request_format_2)
{ "instances": [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 4]] }
甚至在 JSON Content-Type 中如下:
curl http://127.0.0.1:1234/invocations -H "Content-Type: application/json; format=pandas-split" -d '{"columns":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99], "data":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,3,1,4]]}'
我收到此错误,但我真的不知道是什么原因造成的:
{"error_code": "BAD_REQUEST", "message": "评估模型时遇到意外错误。验证序列化的输入 Dataframe 是否与模型兼容以进行推理。", "stack_trace": "Traceback [. ..]
文件“/Path/to/the/file/venv/lib/python3.8/site-packages/mlflow/tensorflow.py”,第 584 行,在 predict\n raise TypeError(f"Only dict and DataFrame input支持类型}")\nTypeError: 仅支持 dict 和 DataFrame 输入类型
导致此错误的数据不是DataFrame 也不是dict,而是numpy.ndarray(我在调试时用 type(...) 检查了它)。
输入的形状是正确的,但我真的不知道如何解决这个问题。似乎 MLflow 无缘无故地将数据转换为 numpy.ndarray
提前感谢任何会帮助我的人
【问题讨论】:
标签: python dataframe tensorflow tensorflow-serving mlflow