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_urido modelo que está implantado no modelo instalado. -
Um dos seguintes:
- O
input_datano formato esperado para a chamadamlflow.pyfunc.PyFuncModel.predict()do modelo. - O
input_pathque define um arquivo contendo dados de entrada que serão carregados e usados para a chamada depredict.
- O
-
O
content_typeno formatocsvoujson. -
Um
output_pathopcional para gravar as previsões em um arquivo. Se você omitir este parâmetro, as previsões serão impressas emstdout. -
Um gerenciador de ambiente,
env_manager, que é usado para construir o ambiente para servir:- O default é
virtualenv. Recomendado para validação de serviço. localEstá disponível, mas pode ser propenso a erros na validação de serviços. Geralmente usado apenas para depuração rápida.
- O default é
-
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ãoFalse. -
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:
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 .
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.
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.
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:
- Abra um Notebook e conecte-o a um clusterque utilize uma versão Databricks Runtime , e não Databricks Runtime for Machine Learning.
- 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:
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)