Partager via


Guide de débogage pour le Service de modèles

Cet article illustre les étapes de débogage pour les problèmes courants rencontrés par les utilisateurs lors de l’utilisation de points de terminaison de service de modèles. Les problèmes courants peuvent inclure les erreurs que les utilisateurs rencontrent lorsque le point de terminaison ne parvient pas à s'initialiser ou à démarrer, des échecs de compilation liés au conteneur, ou des problèmes pendant l'opération ou l'exécution du modèle sur le point de terminaison.

:::tip Valider avant le débogage Avez-vous des problèmes de déploiement ? Commencez par la validation de prédéploiement pour détecter les problèmes courants avant qu’ils ne se produisent. :::

Déboguer votre build de conteneur

Databricks recommande d’examiner les journaux d’activité pour le débogage et la résolution des erreurs dans votre modèle servant des charges de travail. Consultez Surveiller la qualité du modèle et l’intégrité des points de terminaison pour plus d’informations sur les journaux et leur affichage.

Les journaux des événements (cliquez sur l’onglet Événements ) dans l’interface utilisateur de l’espace de travail contiennent des informations sur la progression d’une build de conteneur. Une build de conteneur réussie est mise en surbrillance par un type d’événement SERVED_ENTITY_CONTAINER_EVENT avec un message Container image creation finished successfully. Si vous ne voyez aucun événement ou message de compilation une heure après la création du point de terminaison, contactez le support de Databricks pour obtenir de l’aide.

Si votre construction réussit, mais que vous rencontrez d'autres erreurs, consultez Déboguer une fois la construction du conteneur réussie. Si votre build échoue, consultez Déboguer après l’échec du build du conteneur.

Déboguer après que la création du conteneur a réussi

Même si le conteneur est généré avec succès, il peut y avoir des problèmes lorsque vous exécutez le modèle ou pendant l’opération du point de terminaison lui-même. Les sous-sections suivantes détaillent les problèmes courants et expliquent comment les résoudre.

Remarque

Si votre code de modèle retourne des erreurs MlflowException, attendez-vous à ce que le code de réponse soit mappé à une réponse 4xx. Databricks considère que ces erreurs de code de modèle sont des erreurs provoquées par le client, car elles peuvent être résolues en fonction du message d’erreur résultant. 5xx les codes d’erreur sont réservés pour communiquer les erreurs où Databricks est en panne.

Dépendance manquante

Vous pourriez obtenir une erreur telle que An error occurred while loading the model. No module named <module-name>., ce qui peut indiquer qu’une dépendance est manquante dans le conteneur. Vérifiez que vous avez bien correctement indiqué toutes les dépendances qui doivent être incluses dans la construction du conteneur. Prêtez une attention particulière aux bibliothèques personnalisées et assurez-vous que les fichiers .whl sont inclus en tant qu’artefacts.

Le modèle échoue ou expire lorsque les demandes sont envoyées au point de terminaison

Vous pouvez recevoir une erreur telle que Encountered an unexpected error while evaluating the model. Verify that the input is compatible with the model for inference. lorsque la méthode predict() est appelée sur votre modèle.

Cette erreur peut indiquer un problème de code dans la predict() fonction. Databricks vous recommande de charger le modèle à partir de MLflow dans un notebook, puis de l’appeler. Cela met en évidence les problèmes dans la fonction predict(), et vous pouvez voir où se produit l’échec dans la méthode.

Analyse de la cause racine des demandes ayant échoué

Si une demande adressée à un point de terminaison échoue, vous pouvez effectuer une analyse de la cause racine à l’aide de tables d’inférence. Si cette option est activée, les tables d’inférence journalisent automatiquement toutes les requêtes et réponses vers votre point de terminaison dans une table du catalogue Unity pour que vous puissiez les interroger.

Pour interroger des tables d’inférence :

  1. Dans votre espace de travail, accédez à l’onglet Service et sélectionnez le nom de votre point de terminaison.
  2. Dans la section Tables d’inférence , recherchez le nom complet de la table d’inférence. Par exemple : my-catalog.my-schema.my-table.
  3. Exécutez ce qui suit dans un notebook Databricks :
    %sql
    SELECT * FROM my-catalog.my-schema.my-table
    
  4. Affichez et filtrez les colonnes telles que request, responserequest_time et status_code pour comprendre les requêtes et affiner les résultats.
    %sql
    SELECT * FROM my-catalog.my-schema.my-table
    WHERE status_code != 200
    
  5. Si vous avez activé le suivi d’agent pour les agents IA, consultez la colonne Réponse pour afficher les traces détaillées. Consultez Activer les tables d’inférence pour les agents IA.

L’espace de travail dépasse la concurrence approvisionnée

Vous pouvez recevoir une erreur Workspace exceeded provisioned concurrency quota. Cela indique que vous avez atteint votre quota d'espace de travail pour la concurrence provisionnée. Pour plus d’informations sur les limites de concurrence, consultez Les limites de service de modèle et les régions .

Vous pouvez libérer ce quota en supprimant ou en arrêtant les points de terminaison inutilisés.

Cette limite peut être augmentée en fonction de la disponibilité de la région. Contactez votre équipe de compte Databricks et fournissez votre ID d’espace de travail pour demander une augmentation de concurrence.

L’espace de travail dépasse la limite des requêtes parallèles

Vous pouvez recevoir l’erreur 429 suivante : Exceeded max number of parallel requests. Please contact your Databricks representative to increase the limit. Cette limite indique que vous avez atteint la limite d’espace de travail sur le nombre maximal de requêtes qui peuvent être envoyées en parallèle. Pour plus d’informations sur cette limite, consultez les limites et les régions de service de modèle .

Databricks recommande de passer à des points de terminaison optimisés, où cette limite a été supprimée. Si vous ne pouvez pas passer à des points de terminaison optimisés, vous pouvez réduire le nombre de clients qui envoient des demandes d’inférence ou contacter votre représentant Databricks pour une augmentation de quota.

Trop de requêtes simultanées

Vous pouvez recevoir l’erreur 429 suivante : Too many concurrent requests. Consider increasing the provisioned concurrency of the served entity. Cette erreur indique que la concurrence provisionnée actuelle de votre point de terminaison ne peut pas gérer le volume de trafic entrant. Si vous avez activé la mise à l’échelle automatique pour votre point de terminaison, le système provisionne automatiquement une concurrence supplémentaire jusqu’à la limite configurée du point de terminaison pour gérer la charge accrue. Si la mise à l’échelle automatique n’est pas activée, envisagez d’augmenter manuellement la concurrence provisionnée ou d’activer la mise à l’échelle automatique pour gérer les pics de trafic.

Déboguer après l’échec de la construction du conteneur

Cette section détaille les problèmes qui peuvent se produire lorsque votre génération échoue.

OSError: [Errno 28] No space left on device

L’erreur No space left peut être due à un trop grand nombre d’artefacts volumineux enregistrés inutilement en même temps que le modèle. Vérifiez dans MLflow que les artefacts superflus ne sont pas enregistrés en même temps que le modèle et essayez de redéployer le package réduit.

Problèmes du Pare-feu Azure liés à la mise en service de modèles à partir du catalogue Unity

Vous pouvez voir l’erreur suivante : 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..

Contactez l’équipe de votre compte Databricks afin d’obtenir de l’aide pour la résolution du problème.

Échec de la compilation en raison d’un manque de disponibilité du GPU

En raison de restrictions dans l’approvisionnement et la disponibilité gpu, votre build GPU peut échouer avec cette erreur : Build could not start due to an internal error - please contact your Databricks representative..

Contactez l’équipe de votre compte Databricks afin d’obtenir de l’aide pour la résolution du problème. Selon la disponibilité de la région, l’équipe peut approvisionner davantage de ressources GPU.

Versions de package de bibliothèque installées

Databricks vous recommande de définir toutes les bibliothèques importantes en tant que dépendances de modèle pour garantir un comportement de modèle cohérent et reproductible dans les environnements. Dans les journaux de génération, vous pouvez confirmer les versions de package installées correctement.

  • Pour les versions de MLflow, si vous n’avez pas de version spécifiée, Model Service utilise la dernière version.
  • Pour le service GPU personnalisé, Model Serving installe les versions recommandées de cuda et de cuDNN selon la documentation publique de PyTorch et de Tensorflow.

Modèles de journal nécessitant flash-attn

Si vous journalisez un modèle qui nécessite flash-attn, Databricks recommande d’utiliser une version de wheel personnalisée de flash-attn. Sinon, les erreurs de génération telles que ModuleNotFoundError: No module named 'torch' peuvent se produire.

Pour utiliser une version personnalisée de la roue flash-attn, spécifiez toutes les exigences pip sous forme de liste et transmettez-les en tant que paramètre à la fonction mlflow.transformers.log_model. Vous devez également spécifier les versions pytorch, torch et torchvision compatibles avec la version CUDA spécifiée dans votre wheel flash attn.

Par exemple, Databricks recommande d’utiliser les versions et roues suivantes pour 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)