Pular para o conteúdo principal

Validação pré-implantação para modelo de navegação

As orientações contidas neste artigo podem ajudá-lo a identificar problemas em seu modelo antes de aguardar o processo de implantação endpoint . Databricks recomenda seguir estes passos de validação para garantir uma melhor experiência de desenvolvimento ao usar o modelo de serviço.

Teste as previsões antes da implementação.

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

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

Você pode especificar os seguintes parâmetros:

  • O model_uri do modelo que está implantado no modelo instalado.

  • 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 contendo dados de entrada que serão carregados e usados para a chamada de predict.
  • O content_type no formato csv ou json .

  • Um output_path opcional para gravar as previsões em um arquivo. Se você omitir este parâmetro, as previsões serão impressas em stdout.

  • Um gerenciador de ambiente, env_manager, que é usado para construir o ambiente para servir:

    • O default é virtualenv. Recomendado para validação de serviço.
    • local Está disponível, mas pode ser propenso a erros na validação de serviços. 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. Esta configuração tem como valor padrão False.

  • Se deve atualizar e testar diferentes versões de dependências de pacotes para solucionar problemas ou... Você pode especificar isso como uma lista de substituições ou adições de dependências de strings usando o argumento de substituição, pip_requirements_override.

Por exemplo:

Python
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 do modelo

Se houver algum problema com as dependências especificadas com modelos registrados, você pode atualizar os requisitos usando a CLIMLflow ou mlflow.models.model.update_model_requirements() na API Python MLflow sem precisar log outro modelo.

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

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

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

Valide os dados de entrada do modelo antes da implantação.

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

Segue abaixo um exemplo do código gerado automaticamente na tab de artefatos da execução, caso seu modelo seja de logs com um exemplo de entrada válido.

Python
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 em relação aos modelos registrados usando a API convert_input_example_to_serving_input para gerar uma entrada de serviço JSON válida.

Python
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 modelo de serviço

Você pode testar manualmente o comportamento de exibição do modelo seguindo os passos abaixo:

  1. Abra um Notebook e conecte-o a um clusterque utilize uma versão Databricks Runtime , e não Databricks Runtime for Machine Learning.
  2. Carregue o modelo usando MLflow e tente a partir daí.

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

Python
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)