Amazon CloudWatch と を使用して ルールのアクションを作成する AWS Lambda - Amazon SageMaker

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

Amazon CloudWatch と を使用して ルールのアクションを作成する AWS Lambda

Amazon は、Amazon SageMaker モデルトレーニングジョブログと Amazon SageMaker Debugger ルール処理ジョブログを CloudWatch 収集します。Amazon CloudWatch Events と を使用してデバッガーを設定し AWS Lambda 、デバッガールールの評価ステータスに基づいてアクションを実行します。

CloudWatch デバッガールールとトレーニングジョブのログ

トレーニングジョブログとデバッガールールジョブログを見つけるには
  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

  2. 左のナビゲーションペインの [Logs] (ログ) ノードで、[Log Groups] (ロググループ) を選択します。

  3. ロググループリストで、以下を実行します。

    • トレーニングジョブログには /aws/sagemaker/TrainingJobs を選択します。

    • デバッガールールジョブログには /aws/sagemaker/ProcessingJobs を選択します。

CloudWatch ログのトレーニングおよびデバッガールールジョブのステータスを使用して、トレーニングの問題が発生した場合にさらにアクションを実行できます。

を使用したトレーニングジョブのモニタリングの詳細については CloudWatch、「Amazon のモニタリング SageMaker」を参照してください。

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

デバッガールールはトレーニングジョブのステータスをモニタリングし、 CloudWatch イベントルールはデバッガールールトレーニングジョブの評価ステータスをモニタリングします。

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

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

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

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

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

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

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

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

    注記

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

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

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


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

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

Lambda 関数を設定するには
  1. 設定ページの [Function code] (関数コード) セクションで、Lambda コードエディタペインに次の Python スクリプトを貼り付けます。lambda_handler 関数は、 によって収集されたデバッガールールの評価ステータスをモニタリング CloudWatch し、 StopTrainingJob API オペレーションをトリガーします。client の AWS SDK for Python (Boto3) SageMaker には、 StopTrainingJob API オペレーションをトリガーする高レベルのメソッド 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. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。

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

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

  4. ステップ 1: ルールを作成するページのイベントソースセクションで、サービス名 SageMaker に を選択し、イベントタイプ SageMakerトレーニングジョブの状態変更を選択します。[Event Pattern Preview] (イベントパターンのプレビュー) は、次の 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 設定のデザイナーパネル。

サンプルノートブックを実行して、トレーニングジョブ自動終了をテストする

次のサンプルノートブックを実行できます。これは、デバッガーの組み込みルールを使ってトレーニングジョブを停止する実験用に準備されています。

CloudWatch イベントルールを無効にして、自動トレーニングジョブ終了の使用を停止する

トレーニングジョブの自動終了を無効にする場合は、 CloudWatch イベントルールを無効にする必要があります。Lambda デザイナー パネルで、Lambda 関数にリンクされている EventBridge (CloudWatch イベント) ブロックを選択します。これは、デザイナーEventBridgeパネルの下の パネルを示しています (例えば、前のスクリーンショットを参照)。EventBridge (CloudWatch イベント): debugger-cw-event-ruleの横にあるチェックボックスを選択し、 を無効にするを選択します。後で自動終了機能を使用する場合は、 CloudWatch イベントルールを再度有効にできます。