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

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

调试器规则的内置操作

使用调试器内置操作来响应调试程序规则. 调试程序rule_configs类提供了用于配置操作列表的工具,包括在调试器规则发现培训问题时自动停止培训作业和使用 Simple Notification Service (Amazon SNS) 发送通知。

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

本部分将指导您完成如何设置 Amazon SNSSMDebugRules主题,订阅它,然后确认订阅以接收来自调试器规则的通知。

注意

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

创建 SMDebugger 主题

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

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

  3. 在存储库的主题页面上,选择创建主题.

  4. 在存储库的创建主题页面上的详细信息部分,执行以下操作:

    1. 适用于类型中,选择标准主题类型。

    2. 名称中,输入 SMDebugRules

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

订阅 SMDedebug 主题

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

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

  3. 订阅页面上,选择创建订阅

  4. 创建订阅页上,在详细信息部分中,执行以下操作:

    1. 适用于主题 ARN中,选择SME 调试格式主题 ARN。ARN 的格式应为arn:aws:sns:<region-id>:111122223333:SMDebugRules.

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

    3. 适用于终端节点中,输入终端节点值,例如要接收通知的电子邮件地址或电话号码。

      注意

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

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

订阅SME 调试格式主题时,您会收到以下确认消息通过电子邮件或电话:


                    针对 Amazon SNS 的订阅确认电子邮件SME 调试格式主题。

有关 Amazon SNS 的更多信息,请参阅移动短信 (短信)电子邮件通知中的Amazon SNS 开发人员指南.

第 2 步:设置您的 IAM 角色以附加必需的策略

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

将所需策略添加到 IAM 角色

  1. 登录 Amazon Web Services Management Console,打开 IAM 控制台 https://console.aws.amazon.com/iam/

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

  3. 在存储库的创建策略页上,执行以下操作来创建新的 SNS 访问策略:

    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. 在存储库的Permissions (权限)选项卡上的摘要页面上,选择附加策略.

  7. 搜索SNS 访问策略,请选中策略旁边的复选框,然后选择附加策略.

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

第 3 步:使用内置操作配置调试器规则

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

  • rule_configs.StopTraining()— 当调试器规则发现问题时停止培训作业。

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

  • rule_configs.SMS("+1234567890")— 当调试器规则发现问题时,通过文本消息发送通知。使用您在设置 SNS 主题订阅时使用的电话号码。

    注意

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

您可以使用所有内置操作或动作的子集,方法是使用rule_configs.ActionList()方法,该方法采用内置操作并配置操作列表。

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

如果要将所有三个内置操作分配给单个规则,请在构建估计器时配置调试器内置操作列表。使用以下模板构建估计器,调试器将停止培训作业,并通过电子邮件和文本发送通知,用于监视训练作业进度的任何规则。

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执行两种不同的操作:发送电子邮件至abc@abc.com当训练作业停顿 60 秒,如果拖延 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)

在培训作业运行时,每当规则发现培训作业问题时,调试器内置操作都会发送通知电子邮件和文本消息。以下屏幕截图显示了培训作业停顿问题的培训作业的电子邮件通知示例。


                    调试器在检测到暂存培训问题时发送的示例电子邮件通知。

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


                    调试器在检测到暂存培训问题时发送的示例文本通知。

使用调试程序内置操作的注意事项

  • 要使用调试器内置操作,需要互联网连接。亚马逊 SageMaker 或亚马逊 VPC 提供的网络隔离模式不支持此功能。

  • 内置操作不能用于调试程序配置文件规则.

  • 内置操作不能用于现场训练中断的培训作业。

  • 在电子邮件或文本通知中,None出现在消息末尾。这没有任何意义,所以你可以忽略文本None.