本文中的指南可帮助你在等待终结点部署过程之前捕获模型的问题。 Databricks 建议执行这些验证步骤,以确保在使用模型服务时获得更好的开发体验。
部署前测试预测
在将模型部署到服务终结点之前,请使用虚拟环境并使用 mlflow.models.predict 输入示例测试脱机预测。 MLflow 提供验证 API,用于模拟部署环境并允许测试修改的依赖项。
有两个预部署验证选项: MLflow Python API 和 MLflow CLI。 请参阅 MLflow 文档 以获取有关测试预测的更详细指导。
可以指定以下参数:
- 部署到模型服务的模型的
model_uri。 - 以下其中一项:
- 对模型进行
input_data调用的预期格式的mlflow.pyfunc.PyFuncModel.predict()。 - 定义包含将加载并用于调用
input_path的输入数据的文件的predict。
- 对模型进行
-
content_type或csv格式的json。 - 用于将预测写入文件的可选
output_path。 如果省略此参数,则预测将输出到stdout。 - 环境管理器,
env_manager用于生成用于提供服务的环境:- 默认值为
virtualenv。 建议用于服务验证。 -
local可用,但在进行服务验证时可能会出错。 通常用于快速调试。
- 默认值为
- 是否使用
install_mlflow通过虚拟环境安装环境中当前版本的 MLflow。 此设置默认设置为False。 - 是否更新和测试不同版本的包依赖项,以便进行故障排除或调试。 可以使用替代参数
pip_requirements_override将其指定为一个字符串依赖项替代或添加项列表。
例如:
import mlflow
run_id = "..."
model_uri = f"runs:/{run_id}/model"
mlflow.models.predict(
model_uri=model_uri,
input_data={"col1": 34.2, "col2": 11.2, "col3": "green"},
content_type="json",
env_manager="virtualenv",
install_mlflow=False,
pip_requirements_override=["pillow==10.3.0", "scipy==1.13.0"],
)
更新模型依赖项
如果与记录的模型指定的依赖项存在任何问题,则可以使用 MLflow CLI 或在 mlflow.models.model.update_model_requirements() MLflow Python API 中更新要求,而无需记录另一个模型。
以下示例演示如何就地更新 pip_requirements.txt 已记录的模型。
可以使用指定的包版本更新现有定义,或者向 pip_requirements.txt 文件添加不存在的要求。 此文件位于指定 model_uri 位置的 MLflow 模型项目中。
from mlflow.models.model import update_model_requirements
update_model_requirements(
model_uri=model_uri,
operation="add",
requirement_list=["pillow==10.2.0", "scipy==1.12.0"],
)
在部署之前验证模型输入
提供终结点的模型需要 JSON 输入的特殊格式。 可以在 MLflow 中使用 validate_serving_input 部署之前验证模型输入是否适用于服务终结点。
下面是如果您的模型配有有效输入示例进行记录时,在运行过程的工件选项卡中自动生成的代码示例。
from mlflow.models import validate_serving_input
model_uri = 'runs:/<run_id>/<artifact_path>'
serving_payload = """{
"messages": [
{
"content": "How many product categories are there?",
"role": "user"
}
]
}
"""
# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)
还可以使用 convert_input_example_to_serving_input API 针对记录的模型测试任何输入示例,以生成有效的 JSON 服务输入。
from mlflow.models import validate_serving_input
from mlflow.models import convert_input_example_to_serving_input
model_uri = 'runs:/<run_id>/<artifact_path>'
# Define INPUT_EXAMPLE with your own input example to the model
# A valid input example is a data instance suitable for pyfunc prediction
serving_payload = convert_input_example_to_serving_input(INPUT_EXAMPLE)
# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)
手动测试为模型提供服务
可以使用以下步骤手动测试模型的服务行为:
- 打开笔记本并附加到使用 Databricks Runtime 版本的 All-Purpose 群集,而不是用于机器学习的 Databricks Runtime。
- 使用 MLflow 加载模型并尝试从那里进行调试。
还可以在电脑本地加载模型,并从那里进行调试。 使用以下内容在本地加载模型:
import os
import mlflow
os.environ["MLFLOW_TRACKING_URI"] = "databricks://PROFILE"
ARTIFACT_URI = "model_uri"
if '.' in ARTIFACT_URI:
mlflow.set_registry_uri('databricks-uc')
local_path = mlflow.artifacts.download_artifacts(ARTIFACT_URI)
print(local_path)
conda env create -f local_path/artifact_path/conda.yaml
conda activate mlflow-env
mlflow.pyfunc.load_model(local_path/artifact_path)