本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Debugger 内置操作来响应 Debugger 规则 发现的问题。Debugger rule_configs
类提供了工具来配置操作列表,包括自动停止训练作业,以及在 Debugger 规则发现训练问题时使用 Amazon Simple Notification Service (Amazon SNS) 发送通知。以下主题将介绍完成这些任务的步骤。
设置 Amazon SNS,创建 SMDebugRules
主题,并订阅该主题
此部分将向您介绍如何设置 Amazon SNS SMDebugRules
主题、订阅该主题以及如何确认订阅,以便接收来自 Debugger 规则的通知。
创建 SMDebug规则主题
-
在左侧导航窗格中,选择主题。
-
在 Topics(主题)页面上,选择 Create topic(创建主题)。
-
在 Create topic(创建主题)页面上,在 Details(详细信息)部分中,执行以下操作:
-
对于类型,选择标准作为主题类型。
-
在名称中,输入
SMDebugRules
。
-
-
跳过所有其他可选设置,然后选择创建主题。如果您希望了解有关可选设置的更多信息,请参阅创建 Amazon SNS 主题。
订阅 SMDebug规则主题
在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/
-
在左侧导航窗格中,选择订阅。
-
在订阅页面上,选择创建订阅。
-
在创建订阅页上的详细信息部分,执行以下操作:
-
对于主题 ARN,选择SMDebug规则主题 ARN。ARN 的格式应为
arn:aws:sns:<region-id>:111122223333:SMDebugRules
。 -
对于协议,选择电子邮件或 SMS。
-
对于端点,请输入端点值,例如您用于接收通知的电子邮件地址或电话号码。
注意
确保键入正确的电子邮件地址和电话号码。电话号码必须包括
+
、国家/地区代码和电话号码,不含特殊字符或空格。例如,电话号码 +1 (222) 333-4444 的格式为+12223334444
。
-
-
跳过所有其他可选设置,然后选择创建订阅。如果您想了解有关可选设置的更多信息,请参阅订阅 Amazon SNS 主题。
订阅SMDebug规则主题后,您将通过电子邮件或电话收到以下确认消息:

有关 Amazon SNS 的更多信息,请参阅《Amazon SNS 开发人员指南》中的移动文本消息 (SMS)和电子邮件通知。
设置 IAM 角色以附加所需策略
在此步骤中,您将所需的策略添加到 IAM 角色中。
向 IAM 角色添加所需的策略
登录 AWS Management Console 并打开 IAM 控制台,网址为https://console.aws.amazon.com/iam/
。 -
在左侧导航窗格中选择策略,然后选择创建策略。
-
在创建策略页面上,请执行以下操作以创建新的 sns-access 策略:
-
选择 JSON 选项卡。
-
将以下代码中以粗体格式化的 JSON 字符串粘贴到中
"Statement"
,将 12 位数的 AWS 账户 ID 替换为您的 AWS 账户 ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sns:Publish", "sns:CreateTopic", "sns:Subscribe" ], "Resource": "arn:aws:sns:*:
111122223333
:SMDebugRules" } ] } -
在页面底部,选择查看策略。
-
在查看策略页面上,对于名称,输入
sns-access
。 -
在页面底部,选择创建策略。
-
-
返回 IAM 控制台,然后在左侧导航窗格中选择角色。
-
查找您用于 A SageMaker I 模型训练的 IAM 角色并选择该 IAM 角色。
-
在摘要页面的权限选项卡上,选择附加策略。
-
搜索 sns-access 策略,选中该策略旁边的复选框,然后选择附加策略。
有关为 Amazon SNS 设置 IAM 策略的更多示例,请参阅 Amazon SNS 访问控制示例。
使用内置操作配置 Debugger 规则
在上述步骤中成功完成所需的设置后,您可以针对调试规则配置 Debugger 内置操作,如以下示例脚本所示。您可以选择在构建 actions
列表对象时使用哪些内置操作。rule_configs
是一个帮助程序模块,提供了用于配置 Debugger 内置规则和操作的高级工具。以下内置操作可用于 Debugger:
-
rule_configs.StopTraining()
– 在 Debugger 规则发现问题时停止训练作业。 -
rule_configs.Email("
– 在 Debugger 规则发现问题时通过电子邮件发送通知。使用您在设置 SNS 主题订阅时使用的电子邮件地址。abc@abc.com
") -
rule_configs.SMS("
– 在 Debugger 规则发现问题时通过短信发送通知。使用您在设置 SNS 主题订阅时使用的电话号码。+1234567890
")注意
确保键入正确的电子邮件地址和电话号码。电话号码必须包括
+
、国家/地区代码和电话号码,不含特殊字符或空格。例如,电话号码 +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
属性指定不同的字符串),如以下示例脚本模板所示。此示例说明了如何设置 StalledTrainingRule 来采取两种不同的操作:当训练作业停顿 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 问题时发送的示例文本通知。

使用 Debugger 内置操作的注意事项
-
使用 Debugger 内置操作需要互联网连接。Amazon A SageMaker I 或 Amazon VPC 提供的网络隔离模式不支持此功能。
-
内置操作不能用于 探查器规则。
-
内置操作不能用于会出现竞价型实例训练中断的训练作业。
-
在电子邮件或短信通知中,
None
会显示在消息的末尾。此文本没有任何意义,因此您可以忽略文本None
。