本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon CloudWatch 和在規則上創建操作 AWS Lambda
Amazon CloudWatch 收集 Amazon SageMaker 模型培訓任務日誌和 Amazon SageMaker 調試器規則處理任務日誌。使用 Amazon CloudWatch 事件設定偵錯工具,並 AWS Lambda 根據偵錯程式規則評估狀態採取行動。
CloudWatch 偵錯程式規則和訓練工作的記錄檔
尋找訓練任務日誌和偵錯工具規則任務日誌
開啟主 CloudWatch 控台,網址為 https://console.aws.amazon.com/cloudwatch/
。 -
在左側導覽窗格中的 Log(日誌)節點下,選擇 Log groups (日誌群組)。
-
在日誌群組清單中,執行下列動作:
-
針對訓練工作記錄選擇 /aws/s/ TrainingJobs。
-
針對偵錯程式規則工作記錄選擇 /aws/sagemaker/ ProcessingJobs。
-
您可以使用 CloudWatch 記錄檔中的訓練和偵錯工具規則工作狀態,在發生訓練問題時採取進一步的動作。
如需使用監控訓練任務的詳細資訊 CloudWatch,請參閱監控 Amazon SageMaker。
使用 CloudWatch 和 Lambda 為自動化訓練 Job 終止設定偵錯工具
偵錯程式規則會監視訓練工作狀態,而 CloudWatch 事件規則則則會監視偵錯程式規則訓練工作評估狀態。
步驟 1:建立 Lambda 函數
若要建立 Lambda 函數
開啟主 AWS Lambda 控台,網址為 https://console.aws.amazon.com/lambda/
。 -
在導覽面板上,選擇 Functions(函數),然後選擇 Create function(建立函式)。
-
在 Create function (建立函式) 頁面上,選擇 Author from scratch (從頭開始撰寫)。
-
在 [基本資訊] 區段中,輸入函數名稱 (例如 debugger-rule-stop-training-job)。
-
針對 Runtime (執行時間),選擇 Python 3.7。
-
針對 Permissions(許可),請展開下拉式清單選項,然後選擇Change default execution(變更預設執行角色)。
-
對於執行角色,請選擇使用現有角色,然後選擇用於訓練工作的 IAM 角色 SageMaker。
注意
確保您使用的執行角色附加了
AmazonSageMakerFullAccess
和AWSLambdaBasicExecutionRole
。否則,Lambda 函數將無法正確回應訓練工作的偵錯工具規則狀態變更。如果您不確定正在使用哪個執行角色,請在 Jupyter 筆記本儲存格中執行下列程式碼,以擷取執行角色輸出:import sagemaker sagemaker.get_execution_role()
-
請在頁面底部,選擇 Create function (建立函式)。
下圖顯示 Create function(建立函式)頁面的範例,其輸入欄位和選取已完成。
步驟 2:設定 Lambda 函數
配置 Lambda 函數
-
在設定頁面的 Function code(函數程式碼)區段中,將下列 Python 指令碼貼到 Lambda 程式碼編輯器窗格中。此
lambda_handler
函數會監視由 API 作業收集的除錯程式規則評估狀態, CloudWatch 並觸發StopTrainingJob
API 作業。的 SageMaker 提 AWS SDK for Python (Boto3)client
供了一個高級別的方法stop_training_job
,它會觸發StopTrainingJob
API 操作。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 函數
開啟主 CloudWatch 控台,網址為 https://console.aws.amazon.com/cloudwatch/
。 -
在左側導覽窗格內的 Events (事件) 下,選擇 Rules(規則)。
-
選擇建立規則。
-
在「步驟 1:建立規則」頁面的「事件來源」段落中,選擇「SageMaker服務名稱」,然後選擇「事件類型」的「SageMaker訓練 Job 狀態變更」。事件模式預覽看起來應該如下列範例的 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 調試器-對規則中的 CloudWatch 事件做出反應
這個範例筆記本執行的訓練工作有梯度消失的問題。在構建 SageMaker TensorFlow 估計器使用調試器VanishingGradient內置規則。偵錯工具規則偵測到問題時,就會終止訓練工作。
-
使用偵 SageMaker 錯工具規則偵測停止的訓練並叫用動作
這個範例筆記本會執行具有程式碼行的訓練指令碼,強制它進入睡眠 10 分鐘。偵錯工具 StalledTrainingRule 內建規則會調用問題並停止訓練工作。
停用 CloudWatch 事件規則以停止使用自動化訓練 Job 終止
如果您想要停用自動化訓練工作終止,則需要停用 CloudWatch 事件規則。在 Lambda 設計工具面板中,選擇連結至 Lambda 函數的 EventBridge (CloudWatch 事件) 區塊。這會在「設計工具 EventBridge」面板下方顯示面板 (例如,請參閱上一個螢幕擷取畫面)。選取 EventBridge (CloudWatch 事件): 旁邊的核取方塊 debugger-cw-event-rule,然後選擇停用。如果您想稍後使用自動終止功能,可以再次啟用 CloudWatch 事件規則。