SageMaker Python SDK のレート超過とスロットリング例外を解決するにはどうすればよいですか?

最終更新日: 2021 年 4 月 19 日

Amazon SageMaker Python SDK を使用している際に発生する「botocore.exceptions.ClientError: An error occurred (ThrottlingException)」などのスロットリングエラーを解決するにはどうすればよいですか?

簡単な説明

AWS のサービスへの API 呼び出しは、アカウントごとおよび AWS リージョンごとに許可される最大 API リクエストレートを超えることはできません。これらの API 呼び出しの発生源はアプリケーション、AWS コマンドラインインターフェイス (AWS CLI)、AWS マネジメントコンソールのいずれかになる場合があります。API リクエストが最大レートを超えると、「Rate Exceeded」エラーが表示され、API 呼び出しが調整されます。

Boto3 のデフォルトの再試行設定により、SageMaker API を呼び出すときにこのエラーが表示されることがあります。この設定を上書きして、再試行回数と、応答の接続および読み取りのタイムアウトを延長することができます。

カスタム再試行設定を持つ SageMaker boto3 クライアントを SageMaker Python SDK クライアントに追加してこのエラーを解決できます。

解決方法

1.    カスタム再試行設定を使用して SageMaker boto3 クライアントを作成します。例:

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.    前のステップの boto3 クライアントを使用して SageMaker Python SDK クライアントを作成します。例:

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.    SageMaker Python SDK からの複数のリクエストで SageMaker API をテストします。例:

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.    sagemaker_session パラメータを使用して、sagemaker.estimator.Estimator クラスのインスタンスを作成します。例:

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.    再試行構成によってスロットリング例外が解決されることを確認するには、前の手順で作成した見積もりツールからトレーニングジョブを起動します。

estimator.fit()

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?