Come posso risolvere la frequenza superata e le eccezioni di limitazione di SageMaker Python SDK?

2 minuti di lettura
0

Come posso risolvere errori di limitazione come "botocore.exceptions.ClientError: Si è verificato un errore (ThrottlingException)" durante l'utilizzo di Amazon SageMaker Python SDK?

Breve descrizione

Le chiamate API a qualsiasi servizio AWS non possono superare il tasso massimo di richieste API consentito per account e per regione AWS. Queste chiamate API potrebbero provenire da un'applicazione, dall'interfaccia della linea di comando AWS (AWS CLI) o dalla Console di gestione AWS. Se le richieste API superano la velocità massima, riceverai l’errore "Tasso superato" e le ulteriori chiamate API saranno limitate.

Potresti ricevere questo errore quando chiami le API SageMaker a causa della configurazione predefinita dei tentativi in Boto3. È possibile sovrascrivere questa configurazione per aumentare il numero di tentativi e i timeout per la connessione e la lettura di una risposta.

È possibile risolvere questo errore aggiungendo un client boto3 SageMaker con una configurazione di tentativi personalizzata al client SageMaker Python SDK.

Risoluzione

1.    Crea un client boto3 SageMaker con una configurazione di tentativi personalizzata. Esempio:

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.    Crea un client SageMaker Python SDK utilizzando il client boto3 del passaggio precedente. Esempio:

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.    Prova un'API SageMaker con più richieste da SageMaker Python SDK. Esempio:

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.    Crea un'istanza della classe sagemaker.estimator.Estimator con il parametro sagemaker_session. Esempio:

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.    Per confermare che la configurazione di tentativi risolva le eccezioni di limitazione, avvia un processo di addestramento utilizzando l’estimator creato nel passaggio precedente:

estimator.fit()

Informazioni correlate

Documentazione Boto3

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa