本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用亚马逊创建规则操作 CloudWatch 和Amazon Lambda
亚马逊 CloudWatch 收集亚马逊 SageMaker 模型训练任务日志和 Amazon SageMaker Debugger 规则处理任务日志。使用 Amazon Ev CloudWatch ents 配置调试器并Amazon Lambda根据调试器规则评估状态采取措施。
CloudWatch 调试器规则和训练作业日志
查找训练作业日志和调试器规则作业日志
通过 https://console.aws.amazon.com/cloudwatch/
打开 CloudWatch 主机。 -
在左侧导航窗格的 “日志” 节点下,选择 “日志组”。
-
在日志组列表中,执行以下操作:
-
选择 /aws/sagemaker/TrainingJobs 获取训练作业日志。
-
选择 /aws/sagemaker/ProcessingJobs 作为调试器规则作业日志。
-
出现训练问题时,您可以使用 CloudWatch 日志中的训练和调试器规则作业状态来采取进一步的操作。
有关使用监控培训作业的更多信息 CloudWatch,请参阅监控亚马逊 SageMaker。
使用 CloudWatch 和 Lambda 设置调试器以自动终止训练Job
调试器规则监控训练作业状态, CloudWatch 事件规则监视调试器规则训练作业评估状态。
步骤 1:创建 Lambda 函数
创建 Lambda 函数
打开 Amazon Lambda 控制台,地址:https://console.aws.amazon.com/lambda/
。 -
在左侧导航窗格中,选择函数,然后选择 Create 函数,然后选择 Create 函数
-
在创建函数页面上,选择从头开始创作选项。
-
在基本信息部分中,输入函数名称(例如,debugger-rule-stop-training-job)。
-
对于 Runtime (运行时),选择 Python 3.7。
-
对于 “权限”,展开下拉选项,然后选择 “更改默认执行角色”。
-
对于执行角色,选择使用现有角色,然后选择用于训练任务的 IAM 角色 SageMaker。
注意
确保使用带有
AmazonSageMakerFullAccess
和AWSLambdaBasicExecutionRole
附加的执行角色。否则,Lambda 函数将无法正确响应训练作业的调试器规则状态更改。如果您不确定使用的是哪个执行角色,请在 Jupyter 笔记本单元中运行以下代码以检索执行角色输出:import sagemaker sagemaker.get_execution_role()
-
在页面底部,选择创建函数。
下图显示了已完成输入字段和选择的创建函数页面的示例。

步骤 2:配置 Lambda 函数
要配置 Lambda 函数
-
在配置页面的函数代码部分,将以下 Python 脚本粘贴到 Lambda 代码编辑器窗格中。该
lambda_handler
函数监视由收集的调试器规则评估状态 CloudWatch 并触发StopTrainingJob
API 操作。f SageMaker or 提供了一种高级方法stop_training_job
,Amazon SDK for Python (Boto3)client
用于触发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 代码编辑器接口的更多信息,请参阅使用 LAmazon ambda 控制台编辑器创建函数。
-
跳过所有其他设置,然后选择配置页面顶部的保存。
步骤 3:创建 CloudWatch 事件规则并链接到调试器的 Lambda 函数
创建 CloudWatch 事件规则并链接到调试器的 Lambda 函数
通过 https://console.aws.amazon.com/cloudwatch/
打开 CloudWatch 主机。 -
在左侧导航窗格中,选择 Events(事件)下方的规则,选择规则)。
-
选择 Create rule(创建规则)。
-
在 “步骤 1:创建规则” 页的 “事件源” 部分,选择 “SageMaker服务名称”,然后为 “事件类型” 选择 “SageMaker训练Job 状态更改”。事件模式预览应与以下示例 JSON 字符串类似:
{ "source": [ "aws.sagemaker" ], "detail-type": [ "SageMaker Training Job State Change" ] }
-
在目标部分中,选择添加目标*,然后选择您创建的debugger-rule-stop-training-jo b Lambda 函数。此步骤将 CloudWatch 事件规则与 Lambda 函数关联起来。
-
选择配置详细信息并转到步骤 2:配置规则详细信息页面。
-
指定 CloudWatch 规则定义名称。例如,debugger-cw-event-rule。
-
选择创建规则完成操作。
-
返回 Lambda 函数配置页面并刷新页面,然后刷新页面。确认它在 “设计器” 面板中配置正确。应将 CloudWatch 事件规则注册为 Lambda 函数的触发器。配置设计应与以下示例类似:
运行示例笔记本来测试自动终止训练Job
您可以运行以下示例笔记本,这些笔记本准备好尝试使用 Debugger 的内置规则停止训练作业。
-
Amazon SageMaker 调试器-对规则中的 CloudWatch 事件做出反应
此示例笔记本运行的训练作业存在渐变消失的问题。在构造 SageMaker TensorFlow 估计器时使用调试器VanishingGradient内置规则。当调试器规则检测到问题时,训练作业将终止。
-
使用调 SageMaker 试器规则检测停止的训练并调用操作
此示例笔记本使用一行代码运行训练脚本,强制其休眠 10 分钟。调试器StalledTrainingRule内置规则调用问题并停止训练作业。
禁用 CloudWatch 事件规则以停止使用自动训练Job 终止
如果要禁用自动终止训练作业,则需要禁用 CloudWatch 事件规则。在 Lambda D esigner 面板中,选择链接到 Lambda 函数的 EventBridge (CloudWatch 事件)块。这将显示设计器EventBridge面板下方的面板(例如,参见前面的屏幕截图)。选中 EventBridge (CloudWatch 事件): 旁边的复选框 debugger-cw-event-rule,然后选择禁用。如果您想稍后使用自动终止功能,可以再次启用 CloudWatch 事件规则。