Compartilhar via


Validação de pré-implantação para "Model Serving"

As diretrizes neste artigo podem ajudá-lo a detectar problemas com seu modelo antes de iniciar o processo de implantação do endpoint. O Databricks recomenda passar por essas etapas de validação para garantir uma melhor experiência de desenvolvimento ao usar o serviço de modelo.

Testar previsões antes da implantação

Antes de implantar seu modelo no endpoint de serviço, teste, em um ambiente virtual, previsões offline usando mlflow.models.predict e exemplos de entrada. O MLflow fornece APIs de validação que simulam o ambiente de implantação e permitem o teste de dependências modificadas.

Há duas opções de validação de pré-implantação: a API do Python do MLflow e a CLI do MLflow. Consulte a documentação do MLflow para testar previsões para obter diretrizes mais detalhadas.

Você pode especificar os seguintes parâmetros:

  • O model_uri do modelo que é implantado para o serviço do modelo.
  • Um dos seguintes:
    • O input_data no formato esperado para a chamada mlflow.pyfunc.PyFuncModel.predict() do modelo.
    • O input_path que define um arquivo que contém dados de entrada que serão carregados e usados para a chamada para predict.
  • O content_type no formato csv ou json.
  • Um output_path opcional para gravar as previsões em um arquivo. Se você omitir esse parâmetro, as previsões serão impressas em stdout.
  • Um gerenciador de ambiente, env_managerque é usado para criar o ambiente para servir:
    • O padrão é virtualenv. Recomendado para servir a validação.
    • local está disponível, mas potencialmente propenso a erros para a validação de serviço. Geralmente usado apenas para depuração rápida.
  • Se deseja instalar a versão atual do MLflow que está em seu ambiente com o ambiente virtual usando install_mlflow. Essa configuração usa False como padrão.
  • Se deve atualizar e testar diferentes versões de dependências de pacotes para solução de problemas ou depuração. Você pode especificar isso como uma lista de substituições ou adições de dependência de cadeia de caracteres usando o argumento de substituição, pip_requirements_override.

Por exemplo:

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"],
)

Atualizar dependências de modelo

Se houver problemas com as dependências especificadas com um modelo registrado, você poderá atualizar os requisitos usando a CLI do MLflow ou a API do Python do MLflow sem precisar registrar novamente um modelo.

O exemplo a seguir mostra como atualizar o pip_requirements.txt de um modelo registrado diretamente.

Você pode atualizar definições existentes com versões de pacote especificadas ou adicionar requisitos inexistentes ao arquivo pip_requirements.txt. Esse arquivo está dentro do artefato do modelo MLflow no local de model_uri especificado.

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"],
)

Validar a entrada do modelo antes da implantação

Os endpoints de serviço de modelo requerem um formato especial de entrada JSON. Você pode validar se a entrada do modelo funciona em um endpoint de serviço antes da implantação usando validate_serving_input no MLflow.

Veja a seguir um exemplo do código gerado automaticamente na aba de artefatos da execução, se o modelo estiver registrado com um exemplo de entrada válido.

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)

Você também pode testar quaisquer exemplos de entrada no modelo registrado usando a convert_input_example_to_serving_input API para gerar uma entrada de serviço JSON válida.

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)

Testar manualmente o serviço do modelo

Você pode testar manualmente o comportamento de serviço do modelo usando as seguintes etapas:

  1. Abra um notebook e anexe a um cluster para todos os fins que usa uma versão do Databricks Runtime, não o Databricks Runtime para Machine Learning.
  2. Carregue o modelo usando o MLflow e tente depurar a partir daí.

Você também pode carregar o modelo localmente em seu computador e depurar a partir daí. Carregue seu modelo localmente usando o seguinte:

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)