Comment puis-je résoudre les exceptions de limitation et « rate exceeded » (taux dépassé) dans le kit SDK SageMaker Python ?

Date de la dernière mise à jour : 19/04/2021

Comment résoudre des erreurs de limitation telles que « botocore.exceptions.ClientError: An error occurred (ThrottlingException) » (botocore.exceptions.ClientError: une erreur s'est produite [ThrottlingException]) lors de l'utilisation du kit SDK Amazon SageMaker Python ?

Brève description

Les appels d'API en direction de n'importe quel service AWS ne peuvent pas excéder le taux maximal autorisé pour chaque compte et région AWS. Ces appels d'API peuvent provenir d'une application, de l'interface en ligne de commande AWS ou de la console de gestion AWS. Si les requêtes d'API dépassent le taux maximal, le message d'erreur « Rate Exceeded » (Taux dépassé) s'affiche et les appels d'API deviennent limités.

Cette erreur peut s'afficher lors de l'appel des API SageMaker en raison de la configuration de nouvelle tentative par défaut dans Boto3. Vous pouvez remplacer cette configuration pour augmenter le nombre de nouvelles tentatives et les délais d'attente pour la connexion et la lecture d'une réponse.

Vous pouvez résoudre cette erreur en ajoutant un client SageMaker boto3 avec une configuration de nouvelle tentative personnalisée au client du kit SDK SageMaker Python.

Solution

1.    Créez un client SageMaker boto3 avec une configuration de nouvelle tentative personnalisée. Exemple:

import boto3 
from botocore.config import Config
sm_boto = boto3.client('sagemaker', config=Config(connect_timeout=5, read_timeout=60, retries={'max_attempts': 20}))
print(sm_boto.meta.config.retries)

2.    Créez un client de kit SDK SageMaker Python à l'aide du client boto3 de l'étape précédente. Exemple:

import sagemaker
sagemaker_session = sagemaker.Session(sagemaker_client = sm_boto)
region = sagemaker_session.boto_session.region_name
print(sagemaker_session.sagemaker_client.meta.config.retries)

3.    Testez une API SageMaker avec plusieurs requêtes du kit SDK SageMaker Python. Exemple:

import multiprocessing
def worker(TrainingJobName):
    print(sagemaker_session.sagemaker_client
          .describe_training_job(TrainingJobName=TrainingJobName)
          ['TrainingJobName'])
    return

if __name__ == '__main__':
    jobs = []
    TrainingJobName = 'your-job-name'
    for i in range(10):
        p = multiprocessing.Process(target=worker, args=(TrainingJobName,))
        jobs.append(p)
        p.start()

4.    Créez une instance de la classe sagemaker.estimator.Estimator avec le paramètre sagemaker_session. Exemple:

estimator = sagemaker.estimator.Estimator(container,
                                             role, 
                                             train_instance_count=1, 
                                             train_instance_type='ml.c4.4xlarge',
                                             train_volume_size = 30,
                                             train_max_run = 360000,
                                             input_mode= 'File',
                                             output_path=s3_output_location,
                                             sagemaker_session=sagemaker_session )

5.    Pour confirmer que la configuration de nouvelle tentative résout les exceptions de limitation, lancez une tâche d'entraînement à partir de l'estimateur que vous avez créé à l'étape précédente :

estimator.fit()

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?