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

Lecture de 2 minute(s)
0

Comment résoudre des erreurs de limitation telles que « botocore.exceptions.ClientError: An error occurred (ThrottlingException) » (botocore.exceptions.ClientError: une erreur est survenue [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 de la ligne de commande AWS (AWS CLI) ou de la console de gestion AWS. Si les demandes d'API dépassent le taux maximal, le message d'erreur « Rate Exceeded » (Taux dépassé) s'affiche et les appels d'API sont 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()

Informations connexes

Documentation sur Boto3

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans