针对规则的 Debugger 内置操作 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

针对规则的 Debugger 内置操作

使用 Debugger 内置操作来响应 Debugger 规则 发现的问题。Debugger rule_configs 类提供了工具来配置操作列表,包括自动停止训练作业,以及在 Debugger 规则发现训练问题时使用 Amazon Simple Notification Service (Amazon SNS) 发送通知。

第 1 步:设置 Amazon SNS、创建 SM DebugRules 主题并订阅该主题

此部分将向您介绍如何设置 Amazon SNS SMDebugRules 主题、订阅该主题以及如何确认订阅,以便接收来自 Debugger 规则的通知。

注意

有关 Amazon SNS 账单的更多信息,请参阅 Amazon SNS 定价Amazon SNS 常见问题

创建 SM DebugRules 主题
  1. 登录 Amazon Web Services Management Console 并打开亚马逊 SNS 控制台,网址为 https://console.aws.amazon.com/sns/v3/home。

  2. 在左侧导航窗格中,选择主题

  3. Topics(主题)页面上,选择 Create topic(创建主题)。

  4. Create topic(创建主题)页面上,在 Details(详细信息)部分中,执行以下操作:

    1. 对于类型,选择标准作为主题类型。

    2. 名称中,输入 SMDebugRules

  5. 跳过所有其他可选设置,然后选择创建主题。如果您希望了解有关可选设置的更多信息,请参阅创建 Amazon SNS 主题

订阅 SM DebugRules 主题

  1. 通过 https://console.aws.amazon.com/sns/v3/home 打开 Amazon SNS 控制台。

  2. 在左侧导航窗格中,选择订阅

  3. Subscriptions(订阅)页面上,选择 Create subscription(创建订阅)。

  4. Create subscription(创建订阅)页上的 Details(详细信息)部分中,执行以下操作:

    1. 对于主题 ARN,请选择 SM 主题 DebugRules ARN。ARN 的格式应为 arn:aws:sns:<region-id>:111122223333:SMDebugRules

    2. 对于协议,选择电子邮件SMS

    3. 对于端点,请输入端点值,例如您用于接收通知的电子邮件地址或电话号码。

      注意

      确保键入正确的电子邮件地址和电话号码。电话号码必须包括 +、国家/地区代码和电话号码,不含特殊字符或空格。例如,电话号码 +1 (222) 333-4444 的格式为 +12223334444

  5. 跳过所有其他可选设置,然后选择创建订阅。如果您想了解有关可选设置的更多信息,请参阅订阅 Amazon SNS 主题

订阅 SM DebugRules 主题后,您将通过电子邮件或电话收到以下确认消息:

Amazon SNS S M DebugRules 主题的订阅确认电子邮件。

有关 Amazon SNS 的更多信息,请参阅《Amazon SNS 开发人员指南》中的移动文本消息 (SMS)电子邮件通知

步骤 2:设置 IAM 角色以附加所需策略

在此步骤中,您将所需的策略添加到 IAM 角色中。

向 IAM 角色添加所需的策略
  1. 登录 Amazon Web Services Management Console 并打开 IAM 控制台,网址为 https://console.aws.amazon.com/iam/

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

  3. 创建策略页面上,请执行以下操作以创建新的 sns-access 策略:

    1. 选择 JSON 选项卡。

    2. 将以下代码中以粗体格式化的 JSON 字符串粘贴到中"Statement",将 12 位数的 Amazon 账户 ID 替换为您的 Amazon 账户 ID。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sns:Publish", "sns:CreateTopic", "sns:Subscribe" ], "Resource": "arn:aws:sns:*:111122223333:SMDebugRules" } ] }
    3. 在页面底部,选择查看策略

    4. 查看策略页面上,对于名称,输入 sns-access

    5. 在页面底部,选择创建策略

  4. 返回 IAM 控制台,然后在左侧导航窗格中选择角色

  5. 查找您用于 SageMaker 模型训练的 IAM 角色并选择该 IAM 角色。

  6. 摘要页面的权限选项卡上,选择附加策略

  7. 搜索 sns-access 策略,选中该策略旁边的复选框,然后选择附加策略

有关为 Amazon SNS 设置 IAM 策略的更多示例,请参阅 Amazon SNS 访问控制示例

步骤 3:使用内置操作配置 Debugger 规则

在上述步骤中成功完成所需的设置后,您可以针对调试规则配置 Debugger 内置操作,如以下示例脚本所示。您可以选择在构建 actions 列表对象时使用哪些内置操作。rule_configs 是一个帮助程序模块,提供了用于配置 Debugger 内置规则和操作的高级工具。以下内置操作可用于 Debugger:

  • rule_configs.StopTraining() – 在 Debugger 规则发现问题时停止训练作业。

  • rule_configs.Email("abc@abc.com") – 在 Debugger 规则发现问题时通过电子邮件发送通知。使用您在设置 SNS 主题订阅时使用的电子邮件地址。

  • rule_configs.SMS("+1234567890") – 在 Debugger 规则发现问题时通过短信发送通知。使用您在设置 SNS 主题订阅时使用的电话号码。

    注意

    确保键入正确的电子邮件地址和电话号码。电话号码必须包括 +、国家/地区代码和电话号码,不含特殊字符或空格。例如,电话号码 +1 (222) 333-4444 的格式为 +12223334444

您可以使用获取内置操作并配置操作列表的 rule_configs.ActionList() 方法进行包装,以此来使用内置操作或操作的子集。

将所有三个内置操作添加到单个规则

如果要将所有三个内置操作分配给单个规则,请在构造估算器时配置 Debugger 内置操作列表。使用以下模板来构造估算器,Debugger 将根据您用于监控训练作业进度的任意规则停止训练作业,并通过电子邮件和文本发送通知。

from sagemaker.debugger import Rule, rule_configs # Configure an action list object for Debugger rules actions = rule_configs.ActionList( rule_configs.StopTraining(), rule_configs.Email("abc@abc.com"), rule_configs.SMS("+1234567890") ) # Configure rules for debugging with the actions parameter rules = [ Rule.sagemaker( base_config=rule_configs.built_in_rule(), # Required rule_parameters={"paramter_key": value }, # Optional actions=actions ) ] estimator = Estimator( ... rules = rules ) estimator.fit(wait=False)

创建多个内置操作对象以将不同的操作分配给单个规则

如果您要指定根据单个规则的不同阈值来触发内置操作,则可以创建多个内置操作对象,如以下脚本所示。要在运行相同的规则时避免冲突错误,您必须提交不同的规则作业名称(为规则的 name 属性指定不同的字符串),如以下示例脚本模板所示。此示例说明了如何设置 StalledTraining规则 来采取两种不同的操作:当训练作业停顿 60 秒时发送电子邮件至 abc@abc.com,如果停顿 120 秒则停止训练作业。

from sagemaker.debugger import Rule, rule_configs import time base_job_name_prefix= 'smdebug-stalled-demo-' + str(int(time.time())) # Configure an action object for StopTraining action_stop_training = rule_configs.ActionList( rule_configs.StopTraining() ) # Configure an action object for Email action_email = rule_configs.ActionList( rule_configs.Email("abc@abc.com") ) # Configure a rule with the Email built-in action to trigger if a training job stalls for 60 seconds stalled_training_job_rule_email = Rule.sagemaker( base_config=rule_configs.stalled_training_rule(), rule_parameters={ "threshold": "60", "training_job_name_prefix": base_job_name_prefix }, actions=action_email ) stalled_training_job_rule_text.name="StalledTrainingJobRuleEmail" # Configure a rule with the StopTraining built-in action to trigger if a training job stalls for 120 seconds stalled_training_job_rule = Rule.sagemaker( base_config=rule_configs.stalled_training_rule(), rule_parameters={ "threshold": "120", "training_job_name_prefix": base_job_name_prefix }, actions=action_stop_training ) stalled_training_job_rule.name="StalledTrainingJobRuleStopTraining" estimator = Estimator( ... rules = [stalled_training_job_rule_email, stalled_training_job_rule] ) estimator.fit(wait=False)

在训练作业运行时,只要规则发现训练作业中存在问题,Debugger 内置操作就会发送通知电子邮件和文本消息。以下屏幕截图显示了在出现训练作业停顿问题时,训练作业的电子邮件通知示例。

调试器检测到 StalledTraining 问题时发送的电子邮件通知示例。

以下屏幕截图显示了调试器在规则发现 StalledTraining 问题时发送的示例文本通知。

调试器检测到 StalledTraining 问题时发送的示例文本通知。

使用 Debugger 内置操作的注意事项

  • 使用 Debugger 内置操作需要互联网连接。Amazon SageMaker 或 Amazon VPC 提供的网络隔离模式不支持此功能。

  • 内置操作不能用于 探查器规则

  • 内置操作不能用于会出现竞价型实例训练中断的训练作业。

  • 在电子邮件或短信通知中,None 会显示在消息的末尾。此文本没有任何意义,因此您可以忽略文本 None