使用亚马逊创建规则操作 CloudWatch 和Amazon Lambda - 亚马逊 SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用亚马逊创建规则操作 CloudWatch 和Amazon Lambda

亚马逊 CloudWatch 收集亚马逊 SageMaker 模型训练任务日志和 Amazon SageMaker Debugger 规则处理任务日志。使用 Amazon Ev CloudWatch ents 配置调试器并Amazon Lambda根据调试器规则评估状态采取措施。

CloudWatch 调试器规则和训练作业日志

查找训练作业日志和调试器规则作业日志
  1. 通过 https://console.aws.amazon.com/cloudwatch/ 打开 CloudWatch 主机。

  2. 在左侧导航窗格的 “志” 节点下,选择 “日志组”。

  3. 在日志组列表中,执行以下操作:

    • 选择 /aws/sagemaker/TrainingJobs 获取训练作业日志。

    • 选择 /aws/sagemaker/ProcessingJobs 作为调试器规则作业日志。

出现训练问题时,您可以使用 CloudWatch 日志中的训练和调试器规则作业状态来采取进一步的操作。

有关使用监控培训作业的更多信息 CloudWatch,请参阅监控亚马逊 SageMaker

使用 CloudWatch 和 Lambda 设置调试器以自动终止训练Job

调试器规则监控训练作业状态, CloudWatch 事件规则监视调试器规则训练作业评估状态。

步骤 1:创建 Lambda 函数

创建 Lambda 函数
  1. 打开 Amazon Lambda 控制台,地址:https://console.aws.amazon.com/lambda/

  2. 在左侧导航窗格中,选择函数,然后选择 Create 函数,然后选择 Create 函数

  3. 创建函数页面上,选择从头开始创作选项。

  4. 基本信息部分中,输入函数名称(例如,debugger-rule-stop-training-job)。

  5. 对于 Runtime (运行时),选择 Python 3.7

  6. 对于 “权限”,展开下拉选项,然后选择 “更改默认执行角色”。

  7. 对于执行角色,选择使用现有角色,然后选择用于训练任务的 IAM 角色 SageMaker。

    注意

    确保使用带有AmazonSageMakerFullAccessAWSLambdaBasicExecutionRole附加的执行角色。否则,Lambda 函数将无法正确响应训练作业的调试器规则状态更改。如果您不确定使用的是哪个执行角色,请在 Jupyter 笔记本单元中运行以下代码以检索执行角色输出:

    import sagemaker sagemaker.get_execution_role()
  8. 在页面底部,选择创建函数

下图显示了已完成输入字段和选择的创建函数页面的示例。


                        “创建函数” 页面。

步骤 2:配置 Lambda 函数

要配置 Lambda 函数
  1. 在配置页面的函数代码部分,将以下 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 控制台编辑器创建函数

  2. 跳过所有其他设置,然后选择配置页面顶部的保存

步骤 3:创建 CloudWatch 事件规则并链接到调试器的 Lambda 函数

创建 CloudWatch 事件规则并链接到调试器的 Lambda 函数
  1. 通过 https://console.aws.amazon.com/cloudwatch/ 打开 CloudWatch 主机。

  2. 在左侧导航窗格中,选择 Events(事件)下方的规则,选择规则)。

  3. 选择 Create rule(创建规则)。

  4. 在 “步骤 1:创建规则” 页的 “事件源” 部分,选择 “SageMaker服务名称”,然后为 “事件类型” 选择 “SageMaker训练Job 状态更改”。事件模式预览应与以下示例 JSON 字符串类似:

    { "source": [ "aws.sagemaker" ], "detail-type": [ "SageMaker Training Job State Change" ] }
  5. 目标部分中,选择添加目标*,然后选择您创建的debugger-rule-stop-training-jo b Lambda 函数。此步骤将 CloudWatch 事件规则与 Lambda 函数关联起来。

  6. 选择配置详细信息并转到步骤 2:配置规则详细信息页面。

  7. 指定 CloudWatch 规则定义名称。例如,debugger-cw-event-rule

  8. 选择创建规则完成操作。

  9. 返回 Lambda 函数配置页面并刷新页面,然后刷新页面。确认它在 “设计器” 面板中配置正确。应将 CloudWatch 事件规则注册为 Lambda 函数的触发器。配置设计应与以下示例类似:

    
                                用于 CloudWatch 配置的设计器面板。

运行示例笔记本来测试自动终止训练Job

您可以运行以下示例笔记本,这些笔记本准备好尝试使用 Debugger 的内置规则停止训练作业。

禁用 CloudWatch 事件规则以停止使用自动训练Job 终止

如果要禁用自动终止训练作业,则需要禁用 CloudWatch 事件规则。在 Lambda D esigner 面板中,选择链接到 Lambda 函数的 EventBridge (CloudWatch 事件)块。这将显示设计EventBridge面板下方的面板(例如,参见前面的屏幕截图)。选中 EventBridge (CloudWatch 事件): 旁边的复选框 debugger-cw-event-rule,然后选择禁用。如果您想稍后使用自动终止功能,可以再次启用 CloudWatch 事件规则。