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

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

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

Amazon CloudWatch 收集 Amazon SageMaker 模型训练作业日志和 Amazon SageMaker 调试器规则处理作业日志。使用 Amazon CloudWatch Events 配置调试器和Amazon Lambda以根据调试器规则评估状态采取行动。

用于调试器规则和培训作业的 CloudWatch Logs

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

  1. 访问 https://console.aws.amazon.com/cloudwatch/,打开 CloudWatch 控制台。

  2. 在左侧导航窗格中,日志节点,选择日志组.

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

    • 选择/aws/sagemaker/TrainingJobs用于培训工作日志。

    • 选择/AWS/Sagemaker/处理工作对于调试器规则作业日志。

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

有关使用 CloudWatch 监控训练作业的更多信息,请参阅监控 Amazon SageMaker.

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

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

第 1 步:创建 Lambda 函数

创建 Lambda 函数

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

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

  3. 在存储库的创建函数页面上,选择从头开始创作选项。

  4. 基本信息部分中,输入函数名称(例如,调试器-规则-停止训练-工作)。

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

  6. 适用于Permissions (权限),展开下拉选项,然后选择更改默认执行角色.

  7. 适用于执行角色,选择使用现有角色然后选择 IAM 角色,用于在 SageMaker 上培训作业。

    注意

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

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

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


                        “创建函数” 页。

第 2 步:配置 Lambda 函数

要配置 Lambda 函数

  1. 函数代码将以下 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 控制台编辑器.

  2. 跳过所有其他设置然后选择Save(保存)在配置页面的顶部。

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

要创建 CloudWatch Events 规则并链接到适用于调试器的 Lambda 函数

  1. 访问 https://console.aws.amazon.com/cloudwatch/,打开 CloudWatch 控制台。

  2. 在左侧导航窗格中,选择Rule事件节点。

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

  4. 事件源的 部分第 1 步:创建规则页面上,选择SageMaker为了服务名称,然后选择SageMaker 培训 Job 状态更改为了事件类型. 事件模式预览应类似于以下示例 JSON 字符串:

    { "source": [ "aws.sagemaker" ], "detail-type": [ "SageMaker Training Job State Change" ] }
  5. 目标部分,选择添加目标 *,然后选择调试器-规则-停止训练-工作您创建的 Lambda 函数。此步骤将 CloudWatch Events 规则与 Lambda 函数相关联。

  6. 选择配置细节然后转至步骤 2: 配置规则详细信息页.

  7. 指定 CloudWatch 规则定义名称。例如,调试器-cw-事件规则.

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

  9. 返回 Lambda 函数配置页面并刷新页面。确认它是否在设计师面板。应将 CloudWatch Event 规则注册为 Lambda 函数的触发器。配置设计应类似于以下示例:

    
                                CloudWatch 配置的设计器面板。

运行示例笔记本测试自动化培训 Job 终止

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

禁用 CloudWatch Event 规则以停止使用自动培训 Job 终止

如果要禁用自动终止培训作业,则需要禁用 CloudWatch Events 规则。在 Lambda 中设计师面板中,选择EventBridge (CloudWatch Events)链接到 Lambda 函数的块。这显示了EventBridge下面的面板设计师面板(例如,请参阅上一个屏幕截图)。选中 旁边的复选框EventBridge(CloudWatch 事件):调试器-cw 事件规则,然后选择禁用. 如果您想以后使用自动终止功能,可以再次启用 CloudWatch Events 规则。