翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon CloudWatch と を使用して ルールのアクションを作成する AWS Lambda
Amazon は、Amazon SageMaker モデルトレーニングジョブログと Amazon SageMaker Debugger ルール処理ジョブログを CloudWatch 収集します。Amazon CloudWatch Events と を使用してデバッガーを設定し AWS Lambda 、デバッガールールの評価ステータスに基づいてアクションを実行します。
CloudWatch デバッガールールとトレーニングジョブのログ
トレーニングジョブログとデバッガールールジョブログを見つけるには
https://console.aws.amazon.com/cloudwatch/
で CloudWatch コンソールを開きます。 -
左のナビゲーションペインの [Logs] (ログ) ノードで、[Log Groups] (ロググループ) を選択します。
-
ロググループリストで、以下を実行します。
-
トレーニングジョブログには /aws/sagemaker/TrainingJobs を選択します。
-
デバッガールールジョブログには /aws/sagemaker/ProcessingJobs を選択します。
-
CloudWatch ログのトレーニングおよびデバッガールールジョブのステータスを使用して、トレーニングの問題が発生した場合にさらにアクションを実行できます。
を使用したトレーニングジョブのモニタリングの詳細については CloudWatch、「Amazon のモニタリング SageMaker」を参照してください。
CloudWatch と Lambda を使用してトレーニングジョブ自動終了用にデバッガーを設定する
デバッガールールはトレーニングジョブのステータスをモニタリングし、 CloudWatch イベントルールはデバッガールールトレーニングジョブの評価ステータスをモニタリングします。
ステップ 1: Lambda 関数を作成する
Lambda 関数を作成するには
https://console.aws.amazon.com/lambda/
で AWS Lambda コンソールを開きます。 -
左のナビゲーションペインで、[Functions] (関数)、[Create function] (関数の作成) の順に選択します。
-
[Create function] (関数の作成) ページで、[Author from scratch] (一から作成) オプションを選択します。
-
「基本情報」セクションに、関数名 (debugger-rule-stop-training-job など) を入力します。
-
[Runtime (ランタイム)] で [Python 3.7] を選択します。
-
[Permissions] (許可) で、ドロップダウンオプションを展開し、[Change default execution role] (デフォルトの実行ロールを変更する) を選択します。
-
実行ロール で、既存のロールを使用する を選択し、 のトレーニングジョブに使用する IAM ロールを選択します SageMaker。
注記
AmazonSageMakerFullAccess
とAWSLambdaBasicExecutionRole
が添付された実行ロールを使っていることを確認してください。そうしないと、Lambda 関数はトレーニングジョブのデバッガールールステータスの変更に適切に反応しません。どの実行ロールが使用されているかわからない場合は、Jupyter ノートブックセルで次のコードを実行して、実行ロールの出力を取得します。import sagemaker sagemaker.get_execution_role()
-
ページの下部で、[Create function] を選択します。
次の図は、入力フィールドと選択が完了した状態の [Create function] (関数の作成) ページの例を示しています。
ステップ 2: Lambda 関数を設定する
Lambda 関数を設定するには
-
設定ページの [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 コンソールエディタを使用した関数の作成」を参照してください。
-
他のすべての設定をスキップして、設定ページの上部にある [Save] (保存) を選択します。
ステップ 3: CloudWatch イベントルールを作成し、デバッガーの Lambda 関数にリンクする
CloudWatch イベントルールを作成し、デバッガーの Lambda 関数にリンクするには
https://console.aws.amazon.com/cloudwatch/
で CloudWatch コンソールを開きます。 -
左のナビゲーションペインで、[Events] (イベント) ノードの [Rules] (ルール) を選択します。
-
[ルールの作成] を選択します。
-
ステップ 1: ルールを作成するページのイベントソースセクションで、サービス名 SageMaker に を選択し、イベントタイプ にSageMakerトレーニングジョブの状態変更を選択します。[Event Pattern Preview] (イベントパターンのプレビュー) は、次の JSON 文字列の例のようになります。
{ "source": [ "aws.sagemaker" ], "detail-type": [ "SageMaker Training Job State Change" ] }
-
「ターゲット」セクションで「ターゲットを追加*」を選択し、作成した debugger-rule-stop-training-job Lambda 関数を選択します。このステップでは、 CloudWatch イベントルールを Lambda 関数にリンクします。
-
[Configure details] (詳細設定) を選択し、[Step 2: Configure rule details] (ステップ 2: ルールの詳細を設定する) ページに移動します。
-
CloudWatch ルール定義名を指定します。例えば、 などですdebugger-cw-event-rule。
-
[Create rule] (ルールの作成) を選択して終了します。
-
Lambda 関数の設定ページに戻り、ページを更新します。[Designer] (デザイナー) パネルで正しく設定されていることを確認します。 CloudWatch イベントルールは、Lambda 関数のトリガーとして登録する必要があります。設定のデザインは、次の例のようになります。
サンプルノートブックを実行して、トレーニングジョブ自動終了をテストする
次のサンプルノートブックを実行できます。これは、デバッガーの組み込みルールを使ってトレーニングジョブを停止する実験用に準備されています。
-
Amazon SageMaker Debugger - ルールからの CloudWatch イベントへの対応
このサンプルノートブックでは、勾配消失問題があるトレーニングジョブを実行します。デバッガーVanishingGradientの組み込みルールは、 SageMaker TensorFlow 推定器の構築時に使用されます。デバッガールールが問題を検出すると、トレーニングジョブは終了します。
-
SageMaker デバッガールールを使って、停止したトレーニングを検出し、アクションを呼び出す
このサンプルノートブックでは、10 分間スリープ状態にするコード行を含むトレーニングスクリプトを実行します。デバッガーの StalledTrainingRule 組み込みルールが問題を呼び出し、トレーニングジョブを停止します。
CloudWatch イベントルールを無効にして、自動トレーニングジョブ終了の使用を停止する
トレーニングジョブの自動終了を無効にする場合は、 CloudWatch イベントルールを無効にする必要があります。Lambda デザイナー パネルで、Lambda 関数にリンクされている EventBridge (CloudWatch イベント) ブロックを選択します。これは、デザイナーEventBridgeパネルの下の パネルを示しています (例えば、前のスクリーンショットを参照)。EventBridge (CloudWatch イベント): debugger-cw-event-ruleの横にあるチェックボックスを選択し、 を無効にするを選択します。後で自動終了機能を使用する場合は、 CloudWatch イベントルールを再度有効にできます。