针对规则的 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、创建 SMDebugRules 主题并订阅该主题

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

注意

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

创建 SMDebugRules 主题
  1. 访问 https://console.aws.amazon.com/sns/v3/home,登录 Amazon Web Services Management Console 并打开 Amazon SNS 控制台。

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

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

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

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

    2. Name (名称) 中,输入 SMDebugRules

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

订阅 SMDebugRules 主题

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

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

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

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

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

    2. 对于 Protocol (协议),选择 Email (电子邮件)SMS

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

      注意

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

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

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


                    Amazon SNS SMDebugRules 主题的订阅确认电子邮件。

有关 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",使用您的 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" } ] }
    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 属性指定不同的字符串),如以下示例脚本模板所示。此示例说明了如何设置 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 内置操作就会发送通知电子邮件和文本消息。以下屏幕截图显示了在出现训练作业停顿问题时,训练作业的电子邮件通知示例。


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

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


                    Debugger 在检测到 StalledTraining 问题时发送的示例短信通知。

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

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

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

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

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