

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

# Amazon CloudWatch と を使用したルールに対するアクション AWS Lambda
<a name="debugger-cloudwatch-lambda"></a>

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

## サンプルノートブックの例
<a name="debugger-test-stop-training"></a>

次のサンプルノートブックを実行できます。これらは、Amazon CloudWatch および AWS Lambdaを使用して、Debugger の組み込みルールに基づいてアクションを使い、トレーニングジョブを停止する実験用です。
+ [Amazon SageMaker Debugger - Reacting to CloudWatch Events from Rules](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_action_on_rule/tf-mnist-stop-training-job.html)

  このサンプルノートブックでは、勾配消失問題があるトレーニングジョブを実行します。デバッガーの [VanishingGradient](debugger-built-in-rules.md#vanishing-gradient) 組み込みルールが、SageMaker AI TensorFlow 推定器の構築中に使用されます。デバッガールールが問題を検出すると、トレーニングジョブは終了します。
+ [Detect Stalled Training and Invoke Actions Using SageMaker Debugger Rule](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_action_on_rule/detect_stalled_training_job_and_actions.html)

  このサンプルノートブックでは、10 分間スリープ状態にするコード行を含むトレーニングスクリプトを実行します。デバッガーの [StalledTrainingRule](debugger-built-in-rules.md#stalled-training) 組み込みルールが問題を呼び出し、トレーニングジョブを停止します。

**Topics**
+ [サンプルノートブックの例](#debugger-test-stop-training)
+ [Debugger ルールとトレーニングジョブに関する CloudWatch Logs にアクセスする](debugger-cloudwatch-metric.md)
+ [CloudWatch と Lambda を使ってトレーニングジョブを自動終了するように Debugger を設定する](debugger-stop-training.md)
+ [CloudWatch Events ルールを無効にして、トレーニングジョブ自動終了の使用を停止する](debugger-disable-cw.md)

# Debugger ルールとトレーニングジョブに関する CloudWatch Logs にアクセスする
<a name="debugger-cloudwatch-metric"></a>

CloudWatch Logs のトレーニングジョブとデバッガールールジョブのステータスを使って、トレーニングの問題が発生した場合にさらにアクションを実行できます。次の手順は、関連する CloudWatch Logs にアクセスする方法を示しています。CloudWatch を使用したトレーニングジョブのモニタリングの詳細については、「[Monitor Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-overview.html)」を参照してください。

**トレーニングジョブのログと Debugger ルールジョブのログにアクセスするには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

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

1. ロググループリストで、以下を実行します。
   + トレーニングジョブのログの場合は、**/aws/sagemaker/TrainingJobs** を選択します。
   + デバッガールールジョブのログの場合は、**/aws/sagemaker/ProcessingJobs** を選択します。

# CloudWatch と Lambda を使ってトレーニングジョブを自動終了するように Debugger を設定する
<a name="debugger-stop-training"></a>

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

**Topics**
+ [ステップ 1: Lambda 関数を作成する](#debugger-lambda-function-create)
+ [ステップ 2: Lambda 関数を設定する](#debugger-lambda-function-configure)
+ [ステップ 3: CloudWatch Events ルールを作成し、Debugger の Lambda 関数にリンクする](#debugger-cloudwatch-events)

## ステップ 1: Lambda 関数を作成する
<a name="debugger-lambda-function-create"></a>

**Lambda 関数を作成するには**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) で AWS Lambda コンソールを開きます。

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

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

1. **[Basic information]** (基本情報) セクションに、**[Function name]** (関数名) を入力します (例: **debugger-rule-stop-training-job**)。

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

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

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

   ```
   import sagemaker
   sagemaker.get_execution_role()
   ```

1. ページの下部で、**[関数の作成]** を選択します。

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

![\[[Create function] (関数の作成) ページ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-lambda-create.png)


## ステップ 2: Lambda 関数を設定する
<a name="debugger-lambda-function-configure"></a>

**Lambda 関数を設定するには**

1. 設定ページの **[Function code]** (関数コード) セクションで、Lambda コードエディタペインに次の Python スクリプトを貼り付けます。`lambda_handler` 関数は、CloudWatch によって収集されたデバッガールールの評価ステータスをモニタリングし、`StopTrainingJob` API オペレーションをトリガーします。`client` for AWS SDK for Python (Boto3) SageMaker AI は、 `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 コンソールエディタを使用した関数の作成](https://docs.aws.amazon.com/lambda/latest/dg/code-editor.html)」を参照してください。

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

## ステップ 3: CloudWatch Events ルールを作成し、Debugger の Lambda 関数にリンクする
<a name="debugger-cloudwatch-events"></a>

**CloudWatch Events ルールを作成し、デバッガーの Lambda 関数にリンクするには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

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

1. **[‬ルールを作成]‭** を選択します。

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

   ```
   {
       "source": [
           "aws.sagemaker"
       ],
       "detail-type": [
           "SageMaker Training Job State Change"
       ]
   }
   ```

1. **[Targets]** (ターゲット) セクションで、**[Add target\$1]** (ターゲットの追加\$1) を選択し、作成した **debugger-rule-stop-training-job** Lambda 関数を選択します。このステップは、CloudWatch Events ルールと Lambda 関数をリンクします。

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

1. CloudWatch ルール定義名を指定します。例えば、**debugger-cw-event-rule** などです。

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

1. Lambda 関数の設定ページに戻り、ページを更新します。**[Designer]** (デザイナー) パネルで正しく設定されていることを確認します。CloudWatch Events ルールが、Lambda 関数のトリガーとして登録されているはずです。設定のデザインは、次の例のようになります。  
<a name="lambda-designer-example"></a>![\[CloudWatch 設定のデザイナーパネル。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-lambda-designer.png)

# CloudWatch Events ルールを無効にして、トレーニングジョブ自動終了の使用を停止する
<a name="debugger-disable-cw"></a>

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