Compartir vía


Guía de depuración para servicio de modelos

En este artículo se muestran los pasos de depuración para problemas comunes que los usuarios pueden encontrar al trabajar con puntos de conexión de servicio de modelos. Los problemas comunes podrían incluir errores que se producen cuando el punto de conexión no se inicializa o inicia, errores de compilación relacionados con el contenedor o problemas durante la operación o ejecución del modelo en el punto de conexión.

Acceso y revisión de los registros

Databricks recomienda revisar los registros de compilación para depurar y solucionar errores en las cargas de trabajo de servicio de modelos. Vea Supervisión de la calidad del modelo y el estado del punto de conexión para obtener información sobre los registros y cómo verlos.

Nota:

Si el código del modelo devuelve errores MlflowException, espere que el código de respuesta se asigne a una respuesta 4xx. Databricks considera que estos errores de código de modelo son errores causados por el cliente, ya que se pueden resolver en función del mensaje de error resultante. 5xx Los códigos de error están reservados para comunicar errores en los que Databricks está en error.

Compruebe los registros de eventos del modelo en la interfaz de usuario del área de trabajo y compruebe si hay un mensaje de compilación de contenedor correcta. Si no ve un mensaje de compilación después de una hora, póngase en contacto con el soporte técnico de Databricks para obtener ayuda.

Si la compilación se realiza correctamente, pero se producen otros errores, vea Depuración después de que la compilación del contenedor se realice correctamente. Si se produce un error en la compilación, vea Depuración después del error de compilación del contenedor.

Versiones de paquetes de biblioteca instaladas

En los registros de compilación, puede confirmar las versiones del paquete que están instaladas.

  • En el caso de las versiones de MLflow, si no tiene una versión especificada, Model Serving usa la versión más reciente.
  • Para el servicio de GPU personalizado, Model Serving instala las versiones recomendadas de y cuda según la documentación pública de cuDNN PyTorch y Tensorflow.

Modelos de registro que requieren flash-attn

Si va a registrar un modelo que requiere flash-attn, Databricks recomienda usar una versión de rueda personalizada de flash-attn. De lo contrario, se pueden producir errores de compilación como ModuleNotFoundError: No module named 'torch' .

Para usar una versión de rueda personalizada de flash-attn, especifique todos los requisitos de pip como una lista y páselo como un parámetro en la función mlflow.transformers.log_model. También debe especificar las versiones de PyTorch, Torch y TorchVision que son compatibles con la versión de CUDA especificada en su flash attn wheel.

Por ejemplo, Databricks recomienda usar las siguientes versiones y ruedas para CUDA 11.8:


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 de las comprobaciones de validación de implementación de modelos

Databricks recomienda aplicar las instrucciones de esta sección antes de poner en producción el modelo. Los siguientes parámetros pueden detectar problemas al principio antes de llegar al punto final. Consulte Validar la entrada del modelo antes de la implementación para validar la entrada del modelo antes de implementar el modelo.

Probar predicciones antes de la implementación

Antes de implementar el modelo en el punto de conexión de servicio, pruebe las predicciones en modo offline usando un entorno virtual con mlflow.models.predict y ejemplos de entrada. Consulte la documentación de MLflow para probar predicciones para obtener instrucciones más detalladas.


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

Validación de la entrada del modelo antes de la implementación

Los puntos de conexión de servicio de modelos esperan un formato especial de entrada de json para validar que la entrada del modelo funciona en un punto de conexión de servicio antes de la implementación. Puede usar validate_serving_input en MLflow para realizar dicha validación.

A continuación se muestra un ejemplo del código generado automáticamente en la pestaña artefactos de la ejecución si el modelo se registra con un ejemplo 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)

También puede probar cualquier ejemplo de entrada en el modelo registrado usando la API convert_input_example_to_serving_input para generar una entrada para servir 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)

Depuración después de que la compilación del contenedor se realice correctamente

Incluso si el contenedor se compila correctamente, puede haber problemas al ejecutar el modelo o durante el funcionamiento del propio punto de conexión. En las subsecciones siguientes se detallan los problemas comunes y cómo solucionarlos y depurarlos

Dependencia que falta

Es posible que se produzca un error como An error occurred while loading the model. No module named <module-name>.. Este error podría indicar que falta una dependencia del contenedor. Compruebe que ha indicado correctamente todas las dependencias que se deben incluir en la compilación del contenedor. Preste especial atención a las bibliotecas personalizadas y asegúrese de que los archivos .whl se incluyen como artefactos.

Bucle de registros de servicio

Si se produce un error en la compilación del contenedor, compruebe los registros de servicio para ver si los observa en bucle cuando el punto de conexión intenta cargar el modelo. Si ve este comportamiento, pruebe los pasos siguientes:

  1. Abra un cuaderno y adjunte a un clúster multiuso que use una versión de Databricks Runtime, no Databricks Runtime para Machine Learning.
  2. Cargue el modelo mediante MLflow e intente depurar desde allí.

También puede cargar el modelo localmente en el equipo y depurar desde allí. Cargue el modelo localmente mediante lo siguiente:

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)

Se produce un error en el modelo o se agota el tiempo de espera cuando se envían solicitudes al punto de conexión

Es posible que reciba un error como Encountered an unexpected error while evaluating the model. Verify that the input is compatible with the model for inference. cuando se llama a predict() en el modelo.

Hay un problema de código en la función predict(). Databricks recomienda cargar el modelo desde MLflow en un cuaderno y llamarlo. Al hacerlo, se resaltan los problemas de la función predict() y puede ver dónde se produce el error en el método.

Análisis de la causa principal de las solicitudes con error

Si se produce un error en una solicitud a un punto de conexión, puede realizar análisis de la causa principal mediante tablas de inferencia. Las tablas de inferencia registran automáticamente todas las solicitudes y respuestas al punto de conexión en una tabla de catálogo de Unity para consultarlas.

Para consultar tablas de inferencia:

  1. En el área de trabajo, vaya a la pestaña Servicio y seleccione el nombre del punto de conexión.
  2. En la sección Tablas de inferencia , busque el nombre completo de la tabla de inferencia. Por ejemplo: my-catalog.my-schema.my-table.
  3. Ejecute lo siguiente en un cuaderno de Databricks:
    %sql
    SELECT * FROM my-catalog.my-schema.my-table
    
  4. Vea y filtre por columnas como request, responserequest_timey status_code para comprender las solicitudes y restringir los resultados.
    %sql
    SELECT * FROM my-catalog.my-schema.my-table
    WHERE status_code != 200
    
  5. Si ha habilitado el seguimiento de agentes para agentes de IA, consulte la columna Respuesta para ver seguimientos detallados. Consulte Habilitación de tablas de inferencia para agentes de IA.

El área de trabajo supera la simultaneidad aprovisionada

Es posible que se produzca un error Workspace exceeded provisioned concurrency quota.

Puede aumentar la simultaneidad en función de la disponibilidad de la región. Póngase en contacto con el equipo de la cuenta de Databricks y proporcione el identificador del área de trabajo para solicitar un aumento de simultaneidad.

Depuración después del error de compilación del contenedor

En esta sección se detallan los problemas pueden aparecer cuando se produce un error en la compilación.

OSError: [Errno 28] No space left on device

El error No space left se puede deber a que se registran demasiados artefactos grandes junto con el modelo innecesariamente. Compruebe en MLflow que los artefactos extraños no se registran junto con el modelo e intente volver a implementar el paquete reducido.

Problemas de Azure Firewall con el servicio de modelos desde Unity Catalog

Es posible que vea el error: Build could not start due to an internal error. If you are serving a model from UC and Azure Firewall is enabled, this is not supported by default..

Póngase en contacto con el equipo de cuentas de Databricks para ayudar a resolverlo.

Error de compilación debido a la falta de disponibilidad de GPU

Es posible que vea un error: Build could not start due to an internal error - please contact your Databricks representative..

Póngase en contacto con el equipo de cuentas de Databricks para ayudar a resolverlo.