Pular para o conteúdo principal

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

info

Visualização

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

Este artigo demonstra as etapas de depuração 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.

Acesso e revisão logs

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.

nota

Se seu código de modelo retornar erros MlflowException, espere que o código de resposta seja mapeado para uma resposta 4xx. A Databricks considera esses erros de código de modelo como erros causados pelo cliente, pois eles podem ser resolvidos com base na mensagem de erro resultante. Os códigos de erro 5xx são reservados para comunicar erros em que o Databricks está em falta.

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.

modelos registrados que exigem flash-attn

Se o senhor estiver registrando um modelo que requer flash-attn, a Databricks recomenda o uso de uma versão de roda personalizada de flash-attn. Caso contrário, podem ocorrer erros de compilação, como ModuleNotFoundError: No module named 'torch'.

Para usar uma versão de roda personalizada de flash-attn, especifique todos os requisitos de pip como uma lista e passe-os como um parâmetro para sua função mlflow.transformers.log_model. O senhor também deve especificar as versões PyTorch, torch e torchvision que são compatíveis com a versão CUDA especificada na roda flash attn.

Por exemplo, a Databricks recomenda usar as seguintes versões e rodas para CUDA 11.8:

Python

logged_model=mlflow.transformers.log_model(
transformers_model=test_pipeline,
artifact_path="artifact_path",
pip_requirements=["--extra-index-url https://download.pytorch.org/whl/cu118", "mlflow==2.13.1", "setuptools<70.0.0", "torch==2.0.1+cu118", "accelerate==0.31.0", "astunparse==1.6.3", "bcrypt==3.2.0", "boto3==1.34.39", "configparser==5.2.0", "defusedxml==0.7.1", "dill==0.3.6", "google-cloud-storage==2.10.0", "ipython==8.15.0", "lz4==4.3.2", "nvidia-ml-py==12.555.43", "optree==0.12.1", "pandas==1.5.3", "pyopenssl==23.2.0", "pytesseract==0.3.10", "scikit-learn==1.3.0", "sentencepiece==0.1.99", "torchvision==0.15.2+cu118", "transformers==4.41.2", "https://github.com/Dao-AILab/flash-attention/releases/download/v2.5.8/flash_attn-2.5.8+cu118torch2.0cxx11abiFALSE-cp311-cp311-linux_x86_64.whl"],
input_example=input_example,
registered_model_name=registered_model_name)

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.

Python

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 seu 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.

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)

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.

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)

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.

serviço logs looping

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 você observar esse comportamento, tente as seguintes etapas:

  1. Abra um Notebook e anexe a um clusters todo-propósito que use 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:

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)

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.