MLflow - TypeError:仅支持 dict 和 DataFrame 输入类型
Posted
技术标签:
【中文标题】MLflow - TypeError:仅支持 dict 和 DataFrame 输入类型【英文标题】:MLflow - TypeError: Only dict and DataFrame input types are supported 【发布时间】: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
提前感谢任何会帮助我的人
【问题讨论】:
【参考方案1】:第一个示例(“instances”: )是 MLflow 不支持的 TF Serving JSON 格式。
尝试在“pandas-split”示例中为列名添加双引号。
【讨论】:
不支持 TF 服务 JSON 的方式是什么?在 MLflow 文档中说我可以以该格式查询我的模型 -> mlflow.org/docs/latest/models.html#deploy-mlflow-models 我使用该格式作为 Postman 的 POST HTTP 请求的主体 我已经尝试过你所说的关于 pandas-split 选择的内容,但它输出了同样的错误。以上是关于MLflow - TypeError:仅支持 dict 和 DataFrame 输入类型的主要内容,如果未能解决你的问题,请参考以下文章
mlflow执行import mlflow 报错:ImportError: No module named 'pkg_resources'
Spark发布了MLflow 0.2 内置TensorFlow 继承