Partilhar via


Validação pré-implementação para Model Serving

As orientações deste artigo podem ajudá-lo a detetar problemas com o seu modelo antes de esperar pelo processo de implementação do endpoint. A Databricks recomenda passar por estes passos de validação para garantir uma melhor experiência de desenvolvimento ao utilizar o serviço de modelos.

Testar previsões antes da implantação

Antes de implantar o seu modelo no endpoint de serviço, teste previsões offline com um ambiente virtual usando exemplos de entrada e de mlflow.models.predict. 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 pré-implantação: a API Python MLflow e a CLI MLflow. Consulte a documentação do MLflow em sobre testar previsões em para obter orientações mais detalhadas.

Você pode especificar os seguintes parâmetros:

  • O model_uri do modelo que é implantado para servir o modelo.
  • Um dos seguintes:
    • O input_data no formato esperado para a mlflow.pyfunc.PyFuncModel.predict() chamada do modelo.
    • O input_path que define um arquivo contendo dados de entrada que serão carregados e usados para a chamada para predict.
  • O content_type em csv ou json formato.
  • Um opcional output_path 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_manager, que é usado para construir o ambiente para servir:
    • A predefinição é virtualenv. Recomendado para validação de serviço.
    • local está disponível, mas potencialmente propenso a erros para servir a validaçã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_mlflowo . O padrão desta configuração é False.
  • Se deseja atualizar e testar diferentes versões de dependências de pacote 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 do modelo

Se houver algum problema com as dependências especificadas com um modelo registrado, você poderá atualizar os requisitos usando a CLI MLflow ou mlflow.models.model.update_model_requirements() na API Python MLflow sem precisar registrar outro modelo.

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

Você pode atualizar as 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 especificado 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 pontos finais de disponibilização de modelos esperam um formato especial de entrada JSON. Pode validar que a entrada do seu modelo funciona num endpoint de serviço antes da implantação usando validate_serving_input no MLflow.

Segue-se um exemplo do código gerado automaticamente no separador de artefactos da execução se o seu modelo for registado 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)

Também pode testar quaisquer exemplos de entrada contra o modelo registado usando a convert_input_example_to_serving_input API para gerar um JSON de entrada válido para processamento.

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 a implementação do modelo

Pode testar manualmente o comportamento de serviço do modelo usando os seguintes passos:

  1. Abra um bloco de anotações e anexe a um cluster multiuso que usa uma versão do Databricks Runtime, não do Databricks Runtime for Machine Learning.
  2. Carregue o modelo usando MLflow e tente depurar a partir daí.

Você também pode carregar o modelo localmente no seu PC 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)