

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

# 为规则使用 Debugger 内置操作
<a name="debugger-built-in-actions"></a>

使用 Debugger 内置操作来响应 [Debugger 规则](debugger-built-in-rules.md#debugger-built-in-rules-Rule) 发现的问题。Debugger `rule_configs` 类提供了工具来配置操作列表，包括自动停止训练作业，以及在 Debugger 规则发现训练问题时使用 Amazon Simple Notification Service (Amazon SNS) 发送通知。以下主题将介绍完成这些任务的步骤。

**Topics**
+ [设置 Amazon SNS，创建 `SMDebugRules` 主题，并订阅该主题](#debugger-built-in-actions-sns)
+ [设置 IAM 角色以附加所需策略](#debugger-built-in-actions-iam)
+ [使用内置操作配置 Debugger 规则](#debugger-built-in-actions-on-rule)
+ [使用 Debugger 内置操作的注意事项](#debugger-built-in-actions-considerations)

## 设置 Amazon SNS，创建 `SMDebugRules` 主题，并订阅该主题
<a name="debugger-built-in-actions-sns"></a>

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

**注意**  
[有关亚马逊 SNS 账单的更多信息，请参阅亚马逊 SNS 定价和[亚马逊 SNS](https://www.amazonaws.cn/sns/pricing/)。 FAQs](https://www.amazonaws.cn/sns/faqs/)

**创建 SMDebug规则主题**

1. [登录 Amazon Web Services 管理控制台 并在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/](https://console.amazonaws.cn/sns/v3/home)

1. 在左侧导航窗格中，选择**主题**。

1. 在 **Topics**（主题）页面上，选择 **Create topic**（创建主题）。

1. 在 **Create topic**（创建主题）页面上，在 **Details**（详细信息）部分中，执行以下操作：

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

   1. 在**名称**中，输入 **SMDebugRules**。

1. 跳过所有其他可选设置，然后选择**创建主题**。如果您希望了解有关可选设置的更多信息，请参阅[创建 Amazon SNS 主题](https://docs.amazonaws.cn/sns/latest/dg/sns-create-topic.html)。

**订阅 SMDebug规则主题**

1. [在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/](https://console.amazonaws.cn/sns/v3/home)

1. 在左侧导航窗格中，选择**订阅**。

1. 在**订阅**页面上，选择**创建订阅**。

1. 在**创建订阅**页上的**详细信息**部分，执行以下操作：

   1. 对于**主题 ARN**，选择**SMDebug规则**主题 ARN。ARN 的格式应为 `arn:aws:sns:<region-id>:111122223333:SMDebugRules`。

   1. 对于**协议**，选择**电子邮件**或 **SMS**。

   1. 对于**端点**，请输入端点值，例如您用于接收通知的电子邮件地址或电话号码。
**注意**  
确保键入正确的电子邮件地址和电话号码。电话号码必须包括 `+`、国家/地区代码和电话号码，不含特殊字符或空格。例如，电话号码 \$11 (222) 333-4444 的格式为 **\$112223334444**。

1. 跳过所有其他可选设置，然后选择**创建订阅**。如果您想了解有关可选设置的更多信息，请参阅[订阅 Amazon SNS 主题](https://docs.amazonaws.cn/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)。

订阅**SMDebug规则**主题后，您将通过电子邮件或电话收到以下确认消息：

![\[Amazon SNS SMDebug规则主题的订阅确认电子邮件。\]](http://docs.amazonaws.cn/sagemaker/latest/dg/images/debugger/debugger-built-in-action-subscription-confirmation.png)


有关 Amazon SNS 的更多信息，请参阅**《Amazon SNS 开发人员指南》中的[移动文本消息 (SMS)](https://docs.amazonaws.cn/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html)和[电子邮件通知](https://docs.amazonaws.cn/sns/latest/dg/sns-email-notifications.html)。

## 设置 IAM 角色以附加所需策略
<a name="debugger-built-in-actions-iam"></a>

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

**向 IAM 角色添加所需的策略**

1. 登录 Amazon Web Services 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/)。

1. 在左侧导航窗格中选择**策略**，然后选择**创建策略**。

1. 在**创建策略**页面上，请执行以下操作以创建新的 sns-access 策略：

   1. 选择 **JSON** 选项卡。

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

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": [
                      "sns:Publish",
                      "sns:CreateTopic",
                      "sns:Subscribe"
                  ],
                  "Resource": "arn:aws:sns:*:111122223333:SMDebugRules"
              }
          ]
      }
      ```

------

   1. 在页面底部，选择**查看策略**。

   1. 在**查看策略**页面上，对于**名称**，输入 **sns-access**。

   1. 在页面底部，选择**创建策略**。

1. 返回 IAM 控制台，然后在左侧导航窗格中选择**角色**。

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

1. 在**摘要**页面的**权限**选项卡上，选择**附加策略**。

1. 搜索 **sns-access** 策略，选中该策略旁边的复选框，然后选择**附加策略**。

有关为 Amazon SNS 设置 IAM 策略的更多示例，请参阅 [Amazon SNS 访问控制示例](https://docs.amazonaws.cn/sns/latest/dg/sns-access-policy-use-cases.html)。

## 使用内置操作配置 Debugger 规则
<a name="debugger-built-in-actions-on-rule"></a>

在上述步骤中成功完成所需的设置后，您可以针对调试规则配置 Debugger 内置操作，如以下示例脚本所示。您可以选择在构建 `actions` 列表对象时使用哪些内置操作。`rule_configs` 是一个帮助程序模块，提供了用于配置 Debugger 内置规则和操作的高级工具。以下内置操作可用于 Debugger：
+ `rule_configs.StopTraining()` – 在 Debugger 规则发现问题时停止训练作业。
+ `rule_configs.Email("abc@abc.com")` – 在 Debugger 规则发现问题时通过电子邮件发送通知。使用您在设置 SNS 主题订阅时使用的电子邮件地址。
+ `rule_configs.SMS("+1234567890")` – 在 Debugger 规则发现问题时通过短信发送通知。使用您在设置 SNS 主题订阅时使用的电话号码。
**注意**  
确保键入正确的电子邮件地址和电话号码。电话号码必须包括 `+`、国家/地区代码和电话号码，不含特殊字符或空格。例如，电话号码 \$11 (222) 333-4444 的格式为 **\$112223334444**。

您可以使用获取内置操作并配置操作列表的 `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` 属性指定不同的字符串），如以下示例脚本模板所示。此示例说明了如何设置 [StalledTrainingRule](debugger-built-in-rules.md#stalled-training) 来采取两种不同的操作：当训练作业停顿 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 问题时发送的电子邮件通知示例。\]](http://docs.amazonaws.cn/sagemaker/latest/dg/images/debugger/debugger-built-in-action-email.png)


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

![\[调试器检测到 StalledTraining 问题时发送的示例文本通知。\]](http://docs.amazonaws.cn/sagemaker/latest/dg/images/debugger/debugger-built-in-action-text.png)


## 使用 Debugger 内置操作的注意事项
<a name="debugger-built-in-actions-considerations"></a>
+ 使用 Debugger 内置操作需要互联网连接。Amazon A SageMaker I 或 Amazon VPC 提供的网络隔离模式不支持此功能。
+ 内置操作不能用于 [探查器规则](debugger-built-in-profiler-rules.md#debugger-built-in-profiler-rules-ProfilerRule)。
+ 内置操作不能用于会出现竞价型实例训练中断的训练作业。
+ 在电子邮件或短信通知中，`None` 会显示在消息的末尾。此文本没有任何意义，因此您可以忽略文本 `None`。