Amazon SageMaker Python SDK を使用している際に発生する「botocore.exceptions.ClientError: An error occurred (ThrottlingException)」(botocore.exceptions.ClientError: エラーが発生しました (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()
関連情報
Boto3 ドキュメント