Como resolver a taxa excedida do SageMaker Python SDK e as exceções de controle de utilização?

2 minuto de leitura
0

Como resolver erros de controle de utilização, como “botocore.exceptions.ClientError: Ocorreu um erro (ThrottlingException)” ao usar o Amazon SageMaker Python SDK?

Breve descrição

As chamadas de API para qualquer serviço da AWS não podem exceder a taxa máxima permitida de solicitação de API por conta e por região da AWS. Essas chamadas de API podem ser de um aplicativo, da AWS Command Line Interface (AWS CLI) ou do Console de Gerenciamento da AWS. Se as solicitações de API excederem a taxa máxima, você receberá o erro “Taxa excedida” e as chamadas de API serão controladas.

Você pode receber esse erro ao chamar as APIs do SageMaker devido à configuração padrão de nova tentativa no Boto3. Você pode substituir essa configuração para aumentar o número de novas tentativas e os tempos limite para conectar e ler uma resposta.

Você pode resolver esse erro adicionando um cliente boto3 do SageMaker com uma configuração de nova tentativa personalizada ao cliente SageMaker Python SDK.

Resolução

1.    Como criar um cliente boto3 do SageMaker com uma configuração de nova tentativa personalizada. Exemplo:

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.    Como criar um cliente SageMaker Python SDK usando o cliente boto3 da etapa anterior. Exemplo:

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.    Como testar uma API do SageMaker com várias solicitações do SageMaker Python SDK. Exemplo:

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.    Como criar uma instância da classe sagemaker.estimator.Estimator com o parâmetro sagemaker_session. Exemplo:

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.    Para confirmar que a configuração de nova tentativa resolve as exceções de controle, inicie um trabalho de treinamento a partir do estimador criado na etapa anterior:

estimator.fit()

Informações relacionadas

Documentação do Boto3

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos