guia de depuração para manutenção do modelo

Prévia

O Mosaic AI Model Serving está em Public Preview e é compatível com os sites us-east1 e us-central1.

Este artigo demonstra a depuração dos passos para problemas comuns que os usuários podem encontrar ao trabalhar com o modelo de endpoint servindo. Os problemas comuns podem incluir erros que os usuários encontram quando o endpoint não consegue inicializar ou começar, falhas de construção relacionadas ao contêiner ou problemas durante as operações ou a execução do modelo no endpoint.

Registros de acesso e revisão

Databricks recomenda revisar a compilação logs para depuração e solução de problemas de erros em suas cargas de trabalho de modelo de serviço. Consulte Monitorar a qualidade do modelo e a endpoint saúde para obter informações sobre logs e como view corrigi-las.

Verifique o evento logs para o modelo na UI workspace e verifique se há uma mensagem de criação de contêiner bem-sucedida. Se o senhor não vir uma mensagem de compilação após uma hora, entre em contato com o suporte da Databricks para obter ajuda.

Se a compilação for bem-sucedida, mas o senhor encontrar outros erros, consulte depuração após a compilação bem-sucedida do contêiner. Se a compilação falhar, consulte depuração após falha na compilação do contêiner.

Versões instaladas da biblioteca pacote

Em sua compilação logs, o senhor pode confirmar as versões do pacote que estão instaladas.

Para as versões do MLflow, se o senhor não tiver uma versão especificada, o servindo modelo usará a versão mais recente.

Antes das verificações de validação da implantação do modelo

A Databricks recomenda aplicar as orientações desta seção antes de servir seu modelo. Os parâmetros a seguir podem detectar problemas antecipadamente antes de aguardar o endpoint. Consulte Validar a entrada do modelo antes da implantação para validar a entrada do modelo antes de implantá-lo.

Teste as previsões antes da implantação

Antes de implantar seu modelo no servidor endpoint, teste as previsões off-line com um ambiente virtual usando mlflow.models.predict e exemplos de entrada. Consulte a documentação do MLflow para testar previsões para obter orientações mais detalhadas.


input_example = {
                  "messages":
                  [
                    {"content": "How many categories of products do we have? Name them.", "role": "user"}
                  ]
                }

mlflow.models.predict(
   model_uri = logged_chain_info.model_uri,
   input_data = input_example,
)

Valide a entrada do modelo antes da implantação

O endpoint servindo modelo espera um formato especial de entrada json para validar se a entrada do modelo funciona em um servidor endpoint antes da implementação. O senhor pode usar o site validate_serving_input no MLflow para fazer essa validação.

A seguir, um exemplo do código gerado automaticamente nos artefatos da execução tab se o seu modelo for 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)

O senhor também pode testar quaisquer exemplos de entrada em relação aos modelos registrados usando 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)

depuração após o sucesso da construção do contêiner

Mesmo que o contêiner seja criado com sucesso, pode haver problemas quando o modelo for executado ou durante as operações do próprio endpoint. As subseções a seguir detalham problemas comuns e como solucionar problemas e depurar

Dependência ausente

Você pode receber um erro como An error occurred while loading the model. No module named <module-name>.. Esse erro pode indicar que uma dependência está ausente do contêiner. Verifique se você indicou corretamente todas as dependências que devem ser incluídas na construção do contêiner. Preste atenção especial à biblioteca personalizada e certifique-se de que os arquivos .whl sejam incluídos como artefatos.

Logs de serviço em loop

Se a compilação do contêiner falhar, verifique os logs de serviço para ver se há um looping quando o endpoint tenta carregar o modelo. Se o senhor observar esse comportamento, tente os seguintes passos:

  1. Abra um Notebook e anexe a um clusters todo-propósito que usa uma versão Databricks Runtime, não Databricks Runtime para Machine Learning.

  2. Carregue o modelo usando MLflow e tente a depuração 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)

O modelo falha quando as solicitações são enviadas ao endpoint

Você pode receber um erro como Encountered an unexpected error while evaluating the model. Verify that the input is compatible with the model for inference. quando predict() é chamado em seu modelo.

Há um problema de código na função predict(). Databricks recomenda que o senhor carregue o modelo do site MLflow em um notebook e o chame. Isso destaca os problemas na função predict() e você pode ver onde a falha está acontecendo no método.

o espaço de trabalho excede a simultaneidade de provisionamento

Você pode receber um erro Workspace exceeded provisioned concurrency quota.

Você pode aumentar a simultaneidade dependendo da disponibilidade da região. Entre em contato com a equipe Databricks account e forneça seu ID workspace para solicitar um aumento de concorrência.

depuração após falha na construção do contêiner

Esta seção detalha os problemas que podem ocorrer quando sua compilação falha.

OSError: [Errno 28] No space left on device

O erro No space left pode ser devido ao excesso de artefatos grandes sendo registrados ao lado do modelo desnecessariamente. Verifique em MLflow se artefatos estranhos não estão registrados ao lado do modelo e tente reimplantar o pacote reduzido.