View a markdown version of this page

SageMaker Guide de dépannage du SDK Python - Amazon SageMaker AI

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

SageMaker Guide de dépannage du SDK Python

Vous pouvez utiliser le SDK SageMaker Python pour interagir avec Amazon SageMaker AI dans vos scripts Python ou vos blocs-notes Jupyter. Bien que le kit SDK fournisse un flux de travail simplifié, vous pouvez rencontrer diverses exceptions ou erreurs. Ce guide de résolution des problèmes vise à vous aider à comprendre et à résoudre les problèmes courants susceptibles de survenir lors de l' SageMaker utilisation du SDK Python. Il couvre les scénarios liés à la création de tâches d’entraînement, de tâches de traitement et de points de terminaison, ainsi que les pratiques générales de gestion des exceptions. En suivant les instructions fournies dans les sections suivantes, vous pouvez diagnostiquer et résoudre efficacement les problèmes courants.

Le SDK SageMaker Python agit comme un wrapper pour les opérations d' SageMaker API de bas niveau. Le rôle IAM que vous utilisez pour accéder au kit SDK doit pouvoir accéder aux opérations sous-jacentes. L'ajout de la politique d'accès complet à l' SageMaker IA à votre rôle IAM est le moyen le plus simple de vous assurer que vous êtes autorisé à utiliser le SDK SageMaker Python. Pour plus d'informations sur la politique d'accès complet à l' SageMaker IA, consultez Amazon SageMaker AI Full Access.

Bien que moins pratique, le fait de fournir des autorisations plus détaillées constitue une approche sécurisée de l’utilisation du kit SDK. Chacune des sections suivantes présente des informations sur les autorisations requises.

Création d’une tâche d’entraînement

Important

Si vous n'ajoutez pas la politique d'accès complet à l' SageMaker IA à votre rôle IAM, celui-ci doit être autorisé à appeler les DescribeTrainingJobopérations CreateTrainingJobet.

Il nécessite également des autorisations pour :

  • Accès aux input/output données dans S3

  • exécuter des instances Amazon EC2 ;

  • CloudWatch Métriques du journal

Si votre mission de SageMaker formation doit accéder aux ressources d'un Amazon Virtual Private Cloud (Amazon VPC), assurez-vous de configurer les paramètres VPC et les groupes de sécurité nécessaires lors de la création de la tâche de traitement.

Lorsque vous créez une tâche d’entraînement, vous pouvez rencontrer des exceptions botocore.exceptions.ClientError ou ValueError.

ValueError

Les exceptions ValueError se produisent en cas de problème avec les valeurs ou les paramètres que vous transmettez à une fonction. Utilisez la liste suivante pour voir des exemples d’exceptions ValueError et la façon de les corriger.

  • ValueError: either image_uri or algorithm_arn is required. None was provided:

    • Si vous utilisez la fonction AlgorithmEstimator, fournissez algorithm_arn.

    • Si vous utilisez la fonction Estimator, fournissez estimator_arn.

  • ValueError: Unknown input channel: train is not supported by: scikit-decision-trees-15423055-57b73412d2e93e9239e4e16f83298b8f

    Vous obtenez cette erreur lorsque vous fournissez un canal d’entrée non valide. Un canal d’entrée est une source de données ou un paramètre que le modèle attend.

    Sur la page Types d’algorithmes, vous pouvez accéder au modèle pour trouver des informations sur ses canaux d’entrée.

    Vous pouvez également trouver des informations sur les canaux d'entrée dans la section Utilisation de la AWS Marketplace page de l'algorithme.

    Utilisez la procédure suivante pour obtenir des informations sur les canaux d’entrée d’un algorithme.

    Pour obtenir des informations sur les canaux d’entrée d’un algorithme
    1. Accédez à la console SageMaker AI.

    2. Dans le panneau de navigation de gauche, choisissez Entraînement.

    3. Sélectionnez Algorithmes.

    4. Choisissez Rechercher un algorithme.

    5. Trouvez votre algorithme dans la liste qui s’affiche.

    6. Sélectionnez l’onglet Utilisation.

    7. Accédez au titre Spécification de canal.

botocore.exceptions.ClientError

botocore.exceptions.ClientErrordes exceptions se produisent lorsqu'un AWS service sous-jacent lance une exception. Cela peut être dû à diverses raisons, telles que des paramètres incorrects, des problèmes d’autorisations ou des contraintes de ressources. Utilisez la liste suivante pour découvrir le contexte des exceptions botocore.exceptions.ClientError et des informations sur la manière de les corriger.

  • ResourceLimitExceeded— Votre AWS compte n'a pas accès aux instances Amazon EC2 nécessaires pour exécuter la tâche de formation. Pour obtenir l’accès, demandez une augmentation de quota. Pour en savoir plus sur les augmentations de quotas, consultez Service Quotas. Utilisez la liste suivante pour en savoir plus sur les exceptions botocore.exceptions.ClientError.

  • ValidationException : des exceptions de validation apparaissent lorsque vous avez utilisé le mauvais type d’instance Amazon EC2 pour la tâche d’entraînement. Ils peuvent également apparaître lorsque le rôle IAM que vous utilisez n’est pas autorisé à effectuer la tâche d’entraînement.

Mise à jour d’une tâche d’entraînement

Important

Si vous n'ajoutez pas la politique gérée par l' SageMaker IA à votre rôle IAM, vous devez accorder au rôle l'accès aux autorisations suivantes :

  • s3:GetObject : fournit les autorisations permettant de lire les artefacts de modèle depuis les compartiments Amazon S3.

  • s3:PutObject : le cas échéant, fournit les autorisations nécessaires pour écrire des mises à jour des artefacts de modèle.

  • iam:GetRole : fournit les autorisations permettant d’obtenir des informations sur le rôle IAM nécessaire pour exécuter la tâche d’entraînement.

  • sagemaker:UpdateTrainingJob— Fournit les autorisations nécessaires pour modifier les tâches de formation à l'aide de l'UpdateTrainingJobopération.

  • logs:PutLogEvents— Fournit les autorisations nécessaires pour écrire des CloudWatch journaux sur Amazon Logs pendant le processus de mise à jour.

Lorsque vous mettez à jour une tâche d’entraînement, vous pouvez rencontrer une erreur botocore.exceptions.ParamValidationError ou botocore.exceptions.ClientError.

botocore.exceptions.ClientError

L’erreur ClientError correspond au message suivant :

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateTrainingJob operation: Invalid UpdateTrainingJobRequest, the request cannot be empty

Si vous rencontrez cette erreur, vous devez inclure l’un des paramètres suivants ainsi que le nom de la tâche d’entraînement :

  • profiler_rule_configs (liste) : liste des configurations de règles de profilage. Par défaut, il n’existe aucune configuration de règles de profilage.

  • profiler_config(dict) — La configuration d' SageMaker AI Profiler collecte des métriques et les envoie. Par défaut, il n’existe aucune configuration de profileur.

  • resource_config (dict) : la configuration des ressources des tâches d’entraînement. Vous pouvez mettre à jour la période keep-alive si le statut du groupe d’instances pré-initialisées est Available. Aucun autre champ ne peut être mis à jour.

  • remote_debug_config (dict) : configuration pour RemoteDebug. Le dictionnaire peut contenir EnableRemoteDebug(bool).

botocore.exceptions.ParamValidationError

botocore.exceptions.ParamValidationError présente l’erreur suivante :

botocore.exceptions.ParamValidationError: Parameter validation failed: Invalid type for parameter ProfilerRuleConfigurations, value: {'DisableProfiler': False}, type: <class 'dict'>, valid types: <class 'list'>, <class 'tuple'>

Cette exception peut se produire si le paramètre n’est pas fourni au format attendu par la fonction update_training_job. Par exemple, elle s’attend à ce que le paramètre profiler_rule_configs soit une liste. Si le paramètre est transmis sous forme de dictionnaire à la place, l’erreur est générée.

Création d’une tâche de traitement

Important

Si vous n'ajoutez pas la politique gérée par l' SageMaker IA à votre rôle IAM, vous devez accorder au rôle l'accès aux autorisations suivantes :

  • sagemaker:CreateProcessingJob : fournit les autorisations pour créer une tâche de traitement

  • sagemaker:DescribeProcessingJob : fournit des autorisations d’obtenir des informations sur une tâche de traitement

  • s3:GetObject : fournit les autorisations permettant de lire les artefacts de modèle depuis les compartiments Amazon S3.

  • s3:PutObject : le cas échéant, fournit les autorisations nécessaires pour écrire des mises à jour des artefacts de modèle.

  • logs:PutLogEvents— Permet d'écrire des journaux sur Amazon CloudWatch Logs pendant le processus de mise à jour.

Si votre tâche de traitement doit accéder aux ressources au sein d’un cloud privé Amazon Virtual Private Cloud, vous devez spécifier ses security_group_ids et subnets dans l’estimateur que vous créez. Pour un exemple de la manière dont vous pouvez accéder aux ressources au sein d’un Amazon VPC, consultez Secure Training and Inference with VPC.

Lorsque vous créez une tâche de traitement, vous pouvez rencontrer un ValueError, un UnexpectedStatusException ou un botocore.exceptions.ClientError.

ValueError

Voici un exemple de ValueError :

ValueError: code preprocess.py wasn't found. Please make sure that the file exists.

Le chemin que vous avez spécifié n’était pas correct. Vous pouvez spécifier un chemin relatif ou absolu vers votre fichier de script. Pour plus d'informations sur la définition des chemins d'accès à vos fichiers, consultez sagemaker.processing. RunArgs.

UnexpectedStatusException

Voici un exemple de UnexpectedStatusException :

UnexpectedStatusException: Error for Processing job sagemaker-scikit-learn-2024-07-02-14-08-55-993: Failed. Reason: AlgorithmError: , exit code: 1

Le retraçage qui accompagne l’exception peut vous aider à en identifier la cause première :

Traceback (most recent call last): File "/opt/ml/processing/input/code/preprocessing.py", line 51, in <module> df = pd.read_csv(input_data_path) . . . File "pandas/_libs/parsers.pyx", line 689, in pandas._libs.parsers.TextReader._setup_parser_source FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist: b'/opt/ml/processing/input/census-income.csv'

L’erreur "FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist" indique que le fichier d’entrée census-income.csv est introuvable dans le chemin spécifié /opt/ml/processing/input/. Vérifiez que les données d’entrée sont correctement fournies et que le script de prétraitement les copie dans le chemin attendu.

botocore.exceptions.ClientError

Voici un exemple de botocore.exceptions.ClientError :

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the CreateProcessingJob operation: RoleArn: Cross-account pass role is not allowed.

L'"Cross-account pass role is not allowed in create processing job"erreur se produit lorsque vous tentez de créer une tâche de SageMaker traitement à l'aide d'un rôle IAM provenant d'un autre AWS compte. Cette fonctionnalité de sécurité garantit que les rôles et les autorisations sont gérés au sein de chaque compte. Pour résoudre ce problème, essayez ce qui suit :

  1. Vérifiez que le rôle IAM est dans le même compte que la tâche de traitement. Les rôles entre comptes nécessitent une autorisation explicite.

  2. Si vous utilisez un rôle provenant d’un autre compte, mettez à jour sa politique d’approbation pour permettre au compte qui crée la tâche de traitement d’assumer ce rôle.

  3. Assurez-vous que le rôle dispose des autorisations nécessaires pour traiter les tâches, telles que sagemaker:CreateProcessingJob ou iam:PassRole.

Création d’un point de terminaison

Important

Si vous n'ajoutez pas la politique gérée par l' SageMaker IA à votre rôle IAM, vous devez accorder au rôle l'accès aux autorisations suivantes :

  • sagemaker:CreateModel : fournit les autorisations nécessaires pour créer le modèle que vous déployez sur le point de terminaison.

  • sagemaker:CreateEndpointConfig : fournit les autorisations pour créer une configuration du point de terminaison qui définit le comportement du point de terminaison, tel que le type et le nombre d’instances.

  • sagemaker:CreateEndpoint : fournit les autorisations nécessaires pour créer la configuration du point de terminaison à l’aide du point de terminaison que vous avez spécifié

En outre, vous avez besoin d’autorisations pour décrire et répertorier les modèles, les points de terminaison et les configurations des points de terminaison.

Lorsque vous créez un point de terminaison, vous pouvez rencontrer une exception UnexpectedStatusException ou une erreur botocore.exceptions.ClientError.

Voici un exemple de UnexpectedStatusException :

UnexpectedStatusException: Error hosting endpoint gpt2-large-2024-07-03-15-28-20-448: Failed. Reason: The primary container for production variant AllTraffic did not pass the ping health check. Please check CloudWatch logs for this endpoint.. Try changing the instance type or reference the troubleshooting page https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-troubleshooting.html

Le message d'erreur vous demande de consulter les CloudWatch journaux Amazon. Utilisez la procédure suivante pour vérifier les journaux.

Pour consulter les CloudWatch journaux
  1. Accédez à la console Amazon SageMaker AI.

  2. Dans le panneau de navigation de gauche, choisissez Points de terminaison.

  3. Sélectionnez le point de terminaison qui a échoué.

  4. Sur la page des détails du point de terminaison, choisissez Afficher les connexions CloudWatch.

Une fois que vous avez trouvé les journaux, recherchez le problème spécifique. Voici un exemple de CloudWatch journal :

NotImplementedError: gptq quantization is not supported for AutoModel, you can try to quantize it with text-generation-server quantize ORIGINAL_MODEL_ID NEW_MODEL_ID

Pour en savoir plus sur la résolution de l’erreur botocore.exceptions.ClientError, consultez Conseils sur le traitement des exceptions.

Mise à jour d’un point de terminaison

Important

Si vous n'ajoutez pas la politique gérée par l' SageMaker IA à votre rôle IAM, vous devez accorder au rôle l'accès aux autorisations suivantes :

  • sagemaker:UpdateEndpoint : fournit les autorisations pour mettre à jour un point de terminaison existant, par exemple en modifiant le type ou le nombre d’instances du point de terminaison.

  • sagemaker:UpdateEndpointWeightsAndCapacities : fournit les autorisations pour créer une configuration du point de terminaison qui définit le comportement du point de terminaison, tel que le type et le nombre d’instances.

  • sagemaker:DescribeEndpoint : fournit des autorisations pour décrire la configuration actuelle du point de terminaison, qui est souvent requise avant la mise à jour.

En outre, vous pourriez avoir besoin d’autorisations pour décrire et répertorier les points de terminaison et leurs configurations.

Vous pouvez rencontrer une erreur ValueError, telle que la suivante :

ValueError: Endpoint with name 'abc' does not exist; please use an existing endpoint name

L'erreur indique que le nom du point de terminaison spécifié ne correspond à aucun point de terminaison existant dans votre AWS compte. Pour résoudre cette erreur, appliquez la procédure suivante :

Pour résoudre le problème d’une erreur de valeur
  1. Utilisez le code suivant pour répertorier tous vos points de terminaison :

    import sagemaker sagemaker_session = sagemaker.Session() # List all endpoints endpoints = sagemaker_session.sagemaker_client.list_endpoints() print(endpoints)
  2. Vérifiez que le point de terminaison que vous avez spécifié pour la fonction update_endpoint figure dans la liste.

  3. Assurez-vous que vous opérez dans la bonne AWS région. SageMaker Les points de terminaison de l'IA sont spécifiques à chaque région.

  4. Assurez-vous que le rôle IAM que vous utilisez est autorisé à répertorier, décrire ou mettre à jour les points de terminaison.

Conseils sur le traitement des exceptions

Si vous ne trouvez pas d’informations susceptibles de vous aider à résoudre votre problème spécifique, les exemples de code suivants peuvent vous inspirer pour gérer les exceptions.

Voici un exemple générique que vous pouvez utiliser pour détecter la plupart des exceptions.

import sagemaker from botocore.exceptions import ParamValidationError, ClientError try: sagemaker.some_api_call(SomeParam='some_param') except ClientError as error: # Put your error handling logic here raise error except ParamValidationError as error: raise ValueError('The parameters you provided are incorrect: {}'.format(error)) except ValueError as error: # Catch generic ValueError exceptions

Il existe deux catégories principales d’erreurs :

  • Erreurs spécifiques au SDK SageMaker Python

  • Erreurs spécifiques au AWS service sous-jacent

Les erreurs spécifiques au AWS service sous-jacent sont toujours botocore.exceptions.ClientError des exceptions. botocore.exceptions.ClientError possède un objet Error et un objet ResponseMetadata. Voici le modèle d’une erreur client :

{ 'Error': { 'Code': 'SomeServiceException', 'Message': 'Details/context around the exception or error' }, 'ResponseMetadata': { 'RequestId': '1234567890ABCDEF', 'HostId': 'host ID data will appear here as a hash', 'HTTPStatusCode': 400, 'HTTPHeaders': {'header metadata key/values will appear here'}, 'RetryAttempts': 0 } }

Voici un exemple de gestion des erreurs spécifiques que vous pouvez effectuer avec botocore.exceptions.ClientError :

try: sagemaker.some_api_call(SomeParam='some_param') except botocore.exceptions.ClientError as err: if err.response['Error']['Code'] == 'InternalError': # Generic error # We grab the message, request ID, and HTTP code to give to customer support print('Error Message: {}'.format(err.response['Error']['Message'])) print('Request ID: {}'.format(err.response['ResponseMetadata']['RequestId'])) print('Http code: {}'.format(err.response['ResponseMetadata']['HTTPStatusCode'])) raise err else if err.response['Error']['Code'] == 'ValidationException': raise ValueError(err.response['Error']['Message'])

Pour plus d'informations sur la façon dont vous pouvez gérer les ClientError exceptions, voir Analyse des réponses aux erreurs et détection des exceptions provenant de Services AWS.