¿Cómo puedo solucionar las excepciones de velocidad superada y limitación del SageMaker Python SDK?

2 minutos de lectura
0

¿Cómo puedo solucionar errores de limitación como «botocore.exceptions.ClientError: Se ha producido un error (ThrottlingException)» al utilizar el Amazon SageMaker Python SDK?

Descripción breve

Las llamadas a la API a cualquier servicio de AWS no pueden exceder la tasa máxima permitida de solicitudes de API por cuenta y por región de AWS. Estas llamadas a la API pueden provenir de una aplicación, la interfaz de línea de comandos de AWS (AWS CLI) o la consola de administración de AWS. Si las solicitudes a la API superan la velocidad máxima, recibirá el error «Tasa superada» y las llamadas a la API están limitadas.

Es posible que aparezca este error al llamar a las API de SageMaker debido a la Configuración predeterminada de reintentos en Boto3. Puede anular esta configuración para aumentar el número de reintentos y los tiempos de espera para conectarse y leer una respuesta.

Puede solucionar este error añadiendo un cliente boto3 de SageMaker con una configuración de reintentos personalizada al cliente SageMaker Python SDK.

Resolución

  1. Cree un cliente boto3 de SageMaker con una configuración de reintentos personalizada. Ejemplo:
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)
  1. Cree un cliente SageMaker Python SDK con el cliente boto3 del paso anterior. Ejemplo:
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)
  1. Pruebe una API de SageMaker con varias solicitudes del SageMaker Python SDK. Ejemplo:
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()
  1. Cree una instancia de la clase sagemaker.estimator.Estimator con el parámetro sagemaker_session. Ejemplo:
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 )
  1. Para confirmar que la configuración de reintentos soluciona las excepciones de limitación, inicie un trabajo de entrenamiento desde el estimador creado en el paso anterior:
estimator.fit()

Información relacionada

Documentación de Boto3

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años