本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon CloudWatch 创建规则操作和Amazon Lambda
Amazon CloudWatch 收集 Amazon SageMaker 模型训练作业日志和 Amazon SageMaker 调试器规则处理作业日志。使用 Amazon CloudWatch Events 配置调试器和Amazon Lambda以根据调试器规则评估状态采取行动。
用于调试器规则和培训作业的 CloudWatch Logs
查找训练作业日志和调试器规则作业日志
访问 https://console.aws.amazon.com/cloudwatch/
,打开 CloudWatch 控制台。 -
在左侧导航窗格中,日志节点,选择日志组.
-
在日志组列表中,执行以下操作:
-
选择/aws/sagemaker/TrainingJobs用于培训工作日志。
-
选择/AWS/Sagemaker/处理工作对于调试器规则作业日志。
-
在出现培训问题时,您可以使用 CloudWatch 日志中的训练和调试器规则作业状态采取进一步的操作。
有关使用 CloudWatch 监控训练作业的更多信息,请参阅监控 Amazon SageMaker.
使用 CloudWatch 和 Lambda 为自动终止训练 Job 设置调试器
调试器规则监控训练作业状态,CloudWatch Event 规则监视调试器规则训练作业评估状态。
第 1 步:创建 Lambda 函数
创建 Lambda 函数
打开 Amazon Lambda 控制台,地址:https://console.aws.amazon.com/lambda/
。 -
在左侧导航窗格中,选择函数然后选择创建函数.
-
在存储库的创建函数页面上,选择从头开始创作选项。
-
在基本信息部分中,输入函数名称(例如,调试器-规则-停止训练-工作)。
-
对于 Runtime (运行时),选择 Python 3.7。
-
适用于Permissions (权限),展开下拉选项,然后选择更改默认执行角色.
-
适用于执行角色,选择使用现有角色然后选择 IAM 角色,用于在 SageMaker 上培训作业。
注意 确保你使用执行角色
AmazonSageMakerFullAccess和AWSLambdaBasicExecutionRole附加。否则,Lambda 函数将无法对训练作业的调试器规则状态更改做出正确反应。如果您不确定正在使用哪个执行角色,请在 Jupyter notebook 单元格中运行以下代码以检索执行角色输出:import sagemaker sagemaker.get_execution_role() -
在页面底部,选择创建函数。
下图显示了创建函数页面中的输入字段和选择已完成。
第 2 步:配置 Lambda 函数
要配置 Lambda 函数
-
在函数代码将以下 Python 脚本粘贴到 Lambda 代码编辑器窗格中。这些区域有:
lambda_handler函数监控 CloudWatch 收集的调试器规则评估状态并触发StopTrainingJobAPI 操作。这些区域有:Amazon SDK for Python (Boto3)client对于 SageMaker 提供了高级别方法,stop_training_job,这会触发StopTrainingJobAPI 操作。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 代码编辑器接口的更多信息,请参阅使用AmazonLambda 控制台编辑器.
-
跳过所有其他设置然后选择Save(保存)在配置页面的顶部。
第 3 步:创建 CloudWatch 事件规则并链接到适用于调试器的 Lambda 函数
要创建 CloudWatch Events 规则并链接到适用于调试器的 Lambda 函数
访问 https://console.aws.amazon.com/cloudwatch/
,打开 CloudWatch 控制台。 -
在左侧导航窗格中,选择Rule在事件节点。
-
选择 Create rule (创建规则)。
-
在事件源的 部分第 1 步:创建规则页面上,选择SageMaker为了服务名称,然后选择SageMaker 培训 Job 状态更改为了事件类型. 事件模式预览应类似于以下示例 JSON 字符串:
{ "source": [ "aws.sagemaker" ], "detail-type": [ "SageMaker Training Job State Change" ] } -
在目标部分,选择添加目标 *,然后选择调试器-规则-停止训练-工作您创建的 Lambda 函数。此步骤将 CloudWatch Events 规则与 Lambda 函数相关联。
-
选择配置细节然后转至步骤 2: 配置规则详细信息页.
-
指定 CloudWatch 规则定义名称。例如,调试器-cw-事件规则.
-
选择创建规则要完成操作。
-
返回 Lambda 函数配置页面并刷新页面。确认它是否在设计师面板。应将 CloudWatch Event 规则注册为 Lambda 函数的触发器。配置设计应类似于以下示例:
运行示例笔记本测试自动化培训 Job 终止
您可以运行以下示例笔记本,这些笔记本已准备好尝试使用调试器的内置规则停止训练作业。
-
Amazon SageMaker 调试器-根据规则对 CloudWatch Events 作出反应
此示例笔记本运行的培训作业存在渐变问题消失。调试程序VanishingGradient构建 SageMaker TensorFlow 估计器时使用内置规则。当调试器规则检测到问题时,培训作业将终止。
-
使用 SageMaker 调试器规则检测停滞的训练并调用操作
此示例笔记本运行一个训练脚本,其代码行强制其睡眠 10 分钟。调试程序已停止的训练规则内置规则会调用问题并停止训练作业。
禁用 CloudWatch Event 规则以停止使用自动培训 Job 终止
如果要禁用自动终止培训作业,则需要禁用 CloudWatch Events 规则。在 Lambda 中设计师面板中,选择EventBridge (CloudWatch Events)链接到 Lambda 函数的块。这显示了EventBridge下面的面板设计师面板(例如,请参阅上一个屏幕截图)。选中 旁边的复选框EventBridge(CloudWatch 事件):调试器-cw 事件规则,然后选择禁用. 如果您想以后使用自动终止功能,可以再次启用 CloudWatch Events 规则。