我得到这个错误时,服务模型到数据库使用MLflow,
无法识别的内容类型参数:格式。重要提示:MLflow模型评分协议在MLflow版本2.0中已更改。如果您看到此错误,则可能使用了过时的评分请求格式。要解决此错误,请更新请求格式或调整MLflow模型的要求文件以指定旧版本的MLflow(例如,将"mlflow"要求说明符更改为"mlflow == 1.30.0")。如果使用MLflow客户端发出请求(例如,通过mlflow. pyfunc. spark_udf()),将MLflow客户端升级到版本〉= 2.0,以便使用新的请求格式。有关MLflow 2.0中更新的MLflow模型评分协议的详细信息,请参阅www.example.com。https://mlflow.org/docs/latest/models.html#deploy-mlflow-models.
我正在寻找正确的格式来用于我的Json输入,因为我正在使用的格式看起来像这个例子:
[
{
"input1":12,
"input2":290.0,
"input3":'red'
}
]
我真的不知道它是否与我的mlfow版本有关(目前我使用的是mlflow==1.24.0
),我不能更新版本,因为我没有一些特权。我也尝试了建议的解决方案here,并得到:
TypeError:spark_udf() got an unexpected keyword argument 'env_manager'
到目前为止,我没有找到任何文档来解决这个问题。
谢谢你的帮助,提前。
1条答案
按热度按时间bvhaajcl1#
在记录模型时,MLflow版本为1.24,但在Databrick中将其用作API时,将为其创建一个新环境。此新环境将安装MLflow的2.0+版本。如错误消息所示,您可以指定MLflow版本或更新请求格式。
如果使用的是Classic Model Serving,则应指定版本;如果使用的是Serverless Model Serving,则应更新请求格式。如果必须使用Classic Model Serving且不想升级,请滚动到底部。
指定MLflow版本
在记录模型时,您可以指定一个新的Conda环境,或者添加额外的pip需求,这些需求将在模型运行时使用。
更新请求
另一种方法是更新JSON请求格式,但这仅在使用Databrick的Serverless时有效。
在错误消息末尾的MLflow docs链接中,您可以看到所有格式,根据您提供的数据,我建议使用
dataframe_split
或dataframe_records
。一个二个一个一个
采用MLflow 2.0+的经典型号
如果您使用经典模型服务,不想指定MLflow版本,并且想使用UI进行推理,请不要在记录模型时记录
input_example
。我知道这不符合MLflow的"最佳实践",但由于一些调查,我相信在您这样做时,数据块存在问题。当您记录
input_example
时,MLFlow会记录有关示例的信息,包括type
和pandas_orient
。此信息用于生成推理配方。正如您在生成的curl命令中看到的,它设置format=pandas-records
(不生成JSON)。但这会返回 * Unrecognized content type ... * 错误。对我来说,当我完全删除
format=pandas-records
时,一切都按预期运行。因此,我相信如果您记录一个示例并使用UI,那么Databricks会为您将此格式添加到请求中。这会导致错误,即使您正确地执行了所有操作。而在无服务器模式下,生成的curl根本不包含此参数。