针对规则的 Debugger 内置操作
使用 Debugger 内置操作来响应 Debugger 规则 发现的问题。Debugger rule_configs
类提供了工具来配置操作列表,包括自动停止训练作业,以及在 Debugger 规则发现训练问题时使用 Amazon Simple Notification Service (Amazon SNS) 发送通知。
步骤 1:设置 Amazon SNS、创建 SMDebugRules 主题并订阅该主题
此部分将向您介绍如何设置 Amazon SNS SMDebugRules
主题、订阅该主题以及如何确认订阅,以便接收来自 Debugger 规则的通知。
注意
有关 Amazon SNS 账单的更多信息,请参阅 Amazon SNS 定价
创建 SMDebugRules 主题
访问 https://console.aws.amazon.com/sns/v3/home
,登录 Amazon Web Services Management Console 并打开 Amazon SNS 控制台。 -
在左侧导航窗格中,选择主题。
-
在 Topics(主题)页面上,选择 Create topic(创建主题)。
-
在 Create topic(创建主题)页面上,在 Details(详细信息)部分中,执行以下操作:
-
对于类型,选择标准作为主题类型。
-
在 Name (名称) 中,输入
SMDebugRules
。
-
-
跳过所有其他可选设置,然后选择创建主题。如果您希望了解有关可选设置的更多信息,请参阅创建 Amazon SNS 主题。
订阅 SMDebugRules 主题
通过 https://console.aws.amazon.com/sns/v3/home
打开 Amazon SNS 控制台。 -
在左侧导航窗格中,选择订阅。
-
在 Subscriptions(订阅)页面上,选择 Create subscription(创建订阅)。
-
在 Create subscription(创建订阅)页上的 Details(详细信息)部分中,执行以下操作:
-
对于主题 ARN,选择 SMDebugRules 主题 ARN。ARN 的格式应为
arn:aws:sns:<region-id>:111122223333:SMDebugRules
。 -
对于 Protocol (协议),选择 Email (电子邮件) 或 SMS。
-
对于端点,请输入端点值,例如您用于接收通知的电子邮件地址或电话号码。
注意
确保键入正确的电子邮件地址和电话号码。电话号码必须包括
+
、国家/地区代码和电话号码,不含特殊字符或空格。例如,电话号码 +1 (222) 333-4444 的格式为+12223334444
。
-
-
跳过所有其他可选设置,然后选择创建订阅。如果您想了解有关可选设置的更多信息,请参阅订阅 Amazon SNS 主题。
订阅 SMDebugRules 主题之后,您会通过电子邮件或电话收到以下确认消息:
有关 Amazon SNS 的更多信息,请参阅《Amazon SNS 开发人员指南》中的移动文本消息 (SMS)和电子邮件通知。
步骤 2:设置 IAM 角色以附加所需策略
在此步骤中,您将所需的策略添加到 IAM 角色中。
向 IAM 角色添加所需的策略
登录Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在左侧导航窗格中选择策略,然后选择创建策略。
-
在创建策略页面上,请执行以下操作以创建新的 sns-access 策略:
-
请选择 JSON 选项卡。
-
将以下代码中粗体格式的 JSON 字符串粘贴到
"Statement"
,使用您的 Amazon 账户 ID 替换 12 位数的 Amazon 账户 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 控制台,然后在左侧导航窗格中选择角色。
-
查找用于 SageMaker 模型训练的 IAM 角色,然后选择该 IAM 角色。
-
在摘要页面的权限选项卡上,选择附加策略。
-
搜索 sns-access 策略,选中该策略旁边的复选框,然后选择附加策略。
有关为 Amazon SNS 设置 IAM 策略的更多示例,请参阅 Amazon SNS 访问控制示例。
步骤 3:使用内置操作配置 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 parameterrules
= [ 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 Emailaction_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 secondsstalled_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 secondsstalled_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 内置操作的注意事项
-
使用 Debugger 内置操作需要互联网连接。Amazon SageMaker 或 Amazon VPC 提供的网络隔离模式不支持此功能。
-
内置操作不能用于 探查器规则。
-
内置操作不能用于会出现竞价型实例训练中断的训练作业。
-
在电子邮件或短信通知中,
None
会显示在消息的末尾。此文本没有任何意义,因此您可以忽略文本None
。