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 implantado no serviço de modelos.
  • 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 na 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 sujeito a erros ao servir a validação. Geralmente é usado apenas para depuração rápida.
  • Se deseja instalar a versão atual do MLflow que está no seu ambiente no ambiente virtual usando install_mlflow. Essa configuração usa False como padrão.
  • Determina se deve atualizar e testar diferentes versões das dependências dos pacotes para resolução de problemas ou depuração. Você pode especificar isso na forma de uma lista de substituições ou adições de dependências de string usando o argumento override, 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á contido no artefato do modelo MLflow, no local especificado em model_uri.

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)