¿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
- 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)
- 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)
- 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()
- 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 )
- 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