CloudWatch と Lambda を使用してトレーニングジョブの自動終了用にデバッガーを設定する - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CloudWatch と Lambda を使用してトレーニングジョブの自動終了用にデバッガーを設定する

デバッガールールはトレーニングジョブのステータスをモニタリングし、 CloudWatch イベントルールはデバッガールールトレーニングジョブの評価ステータスをモニタリングします。以下のセクションでは、 CloudWatch と Lambda を使用してトレーニングジョブの終了を自動化するために必要なプロセスの概要を説明します。

ステップ 1: Lambda 関数を作成する

Lambda 関数を作成するには
  1. で AWS Lambda コンソールを開きますhttps://console.aws.amazon.com/lambda/

  2. 左のナビゲーションペインで、[Functions] (関数)、[Create function] (関数の作成) の順に選択します。

  3. [Create function] (関数の作成) ページで、[Author from scratch] (一から作成) オプションを選択します。

  4. 基本情報 セクションで、関数名 (debugger-rule-stop-training-job など) を入力します。

  5. [ランタイム][Python 3.7] を選択します。

  6. [Permissions] (許可) で、ドロップダウンオプションを展開し、[Change default execution role] (デフォルトの実行ロールを変更する) を選択します。

  7. 実行ロール で、既存のロールを使用 を選択し、 SageMaker AI でのトレーニングジョブに使用するIAMロールを選択します。

    注記

    AmazonSageMakerFullAccessAWSLambdaBasicExecutionRole が添付された実行ロールを使っていることを確認してください。そうしないと、Lambda 関数はトレーニングジョブのデバッガールールステータスの変更に適切に反応しません。どの実行ロールが使用されているかわからない場合は、Jupyter ノートブックセルで次のコードを実行して、実行ロールの出力を取得します。

    import sagemaker sagemaker.get_execution_role()
  8. ページの下部で、[関数の作成] を選択します。

次の図は、入力フィールドと選択が完了した状態の [Create function] (関数の作成) ページの例を示しています。

[Create function] (関数の作成) ページ。

ステップ 2: Lambda 関数を設定する

Lambda 関数を設定するには
  1. 設定ページの [Function code] (関数コード) セクションで、Lambda コードエディタペインに次の Python スクリプトを貼り付けます。lambda_handler 関数は、 によって収集されたデバッガールールの評価ステータスをモニタリング CloudWatch し、 StopTrainingJobAPIオペレーションをトリガーします。client for SageMaker AI AWS SDK for Python (Boto3) には、StopTrainingJobAPIオペレーションをトリガーする高レベルのメソッド stop_training_jobが用意されています。

    import json import boto3 import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): training_job_name = event.get("detail").get("TrainingJobName") logging.info(f'Evaluating Debugger rules for training job: {training_job_name}') eval_statuses = event.get("detail").get("DebugRuleEvaluationStatuses", None) if eval_statuses is None or len(eval_statuses) == 0: logging.info("Couldn't find any debug rule statuses, skipping...") return { 'statusCode': 200, 'body': json.dumps('Nothing to do') } # should only attempt stopping jobs with InProgress status training_job_status = event.get("detail").get("TrainingJobStatus", None) if training_job_status != 'InProgress': logging.debug(f"Current Training job status({training_job_status}) is not 'InProgress'. Exiting") return { 'statusCode': 200, 'body': json.dumps('Nothing to do') } client = boto3.client('sagemaker') for status in eval_statuses: logging.info(status.get("RuleEvaluationStatus") + ', RuleEvaluationStatus=' + str(status)) if status.get("RuleEvaluationStatus") == "IssuesFound": secondary_status = event.get("detail").get("SecondaryStatus", None) logging.info( f'About to stop training job, since evaluation of rule configuration {status.get("RuleConfigurationName")} resulted in "IssuesFound". ' + f'\ntraining job "{training_job_name}" status is "{training_job_status}", secondary status is "{secondary_status}"' + f'\nAttempting to stop training job "{training_job_name}"' ) try: client.stop_training_job( TrainingJobName=training_job_name ) except Exception as e: logging.error( "Encountered error while trying to " "stop training job {}: {}".format( training_job_name, str(e) ) ) raise e return None

    Lambda コードエディタインターフェイスの詳細については、AWS 「Lambda コンソールエディタを使用した関数の作成」を参照してください。

  2. 他のすべての設定をスキップして、設定ページの上部にある [Save] (保存) を選択します。

ステップ 3: CloudWatch イベントルールを作成し、デバッガーの Lambda 関数にリンクする

CloudWatch イベントルールを作成し、デバッガーの Lambda 関数にリンクするには
  1. で CloudWatch コンソールを開きますhttps://console.aws.amazon.com/cloudwatch/

  2. 左のナビゲーションペインで、[Events] (イベント) ノードの [Rules] (ルール) を選択します。

  3. ルールの作成を選択します。

  4. ステップ 1: ルールの作成ページのイベントソースセクションで、サービス名の SageMaker AI を選択し、イベントタイプの SageMaker AI トレーニングジョブの状態変更を選択します。イベントパターンプレビューは、次のJSON文字列例のようになります。

    { "source": [ "aws.sagemaker" ], "detail-type": [ "SageMaker Training Job State Change" ] }
  5. 「ターゲット」セクションで「ターゲットの追加」を選択し、作成した debugger-rule-stop-training-job Lambda 関数を選択します。このステップでは、 CloudWatch イベントルールを Lambda 関数にリンクします。

  6. [Configure details] (詳細設定) を選択し、[Step 2: Configure rule details] (ステップ 2: ルールの詳細を設定する) ページに移動します。

  7. CloudWatch ルール定義名を指定します。例えば、debugger-cw-event-rule と指定します。

  8. [Create rule] (ルールの作成) を選択して終了します。

  9. Lambda 関数の設定ページに戻り、ページを更新します。[Designer] (デザイナー) パネルで正しく設定されていることを確認します。 CloudWatch イベントルールは、Lambda 関数のトリガーとして登録する必要があります。設定のデザインは、次の例のようになります。

    CloudWatch 設定のデザイナーパネル。