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 输入类型的主要内容,如果未能解决你的问题,请参考以下文章

Github 作为 mlflow 中的工件 repo

mlflow R 安装 MLFLOW_PYTHON_BIN

mlflow执行import mlflow 报错:ImportError: No module named 'pkg_resources'

Spark发布了MLflow 0.2 内置TensorFlow 继承

“这是一个 distutils 安装的项目......”调用 install_mlflow() 时

如何在 mlflow 中添加系数、p 值和相关变量名称?