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

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

调试程序 规则的内置操作

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

步骤 1:设置 Amazon SNS、创建 SMDebugRules 主题和订阅 主题

本部分将指导您如何设置 Amazon SNS SMDebugRules 主题、订阅主题并确认订阅以接收来自调试程序规则的通知。

注意

有关 计费的更多信息Amazon SNS,请参阅 Amazon SNS 定价Amazon SNS FAQs

创建 SMDebugRules 主题

  1. 通过以下网址登录 AWS 管理控制台 并打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v3/home

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

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

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

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

    2. 名称中,输入 SMDebugRules.

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

订阅SMDebugRules主题

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

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

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

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

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

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

    3. 对于 Endpoint (终端节点),输入终端节点值,例如您要接收通知的电子邮件地址或电话号码。

      注意

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

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

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


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

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

步骤 2:设置 IAM 角色以附加所需的 策略

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

将所需的策略添加到您的 IAM 角色

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 在左侧导航窗格中,选择 Policies (策略),然后选择 Create policy (创建策略)。

  3. Create policy (创建策略) 页面上,执行以下操作以创建新的 sns-access 策略:

    1. 选择 JSON 选项卡。

    2. 将以下代码中粗体格式化的 JSON 字符串粘贴到 中"Statement",将 12-digitAWS账户 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" } ] }
    3. 在页面底部,选择查看策略

    4. Review policy (查看策略) 页面上,对于 Name (名称),输入 sns-access

    5. 在页面底部,选择 Create policy (创建策略)。

  4. 返回 IAM 控制台,然后在左侧导航窗格中选择 Roles (角色)。

  5. 查找用于IAM模型训练SageMaker的角色并选择该IAM角色。

  6. Summary (摘要) 页面的 Permissions (权限) 选项卡上,选择 Attach policies (附加策略)。

  7. 搜索 sns-access 策略,选中该策略旁边的复选框,然后选择 Attach policy (附加策略)。

有关为 设置IAM策略的更多示例Amazon SNS,请参阅访问控制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 以执行两种不同的操作:在训练作业停止 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)

在训练作业运行时,调试程序内置操作会在规则发现您的训练作业存在问题时发送通知电子邮件和文本消息。以下屏幕截图显示了训练作业存在停滞训练作业问题的电子邮件通知的示例。


                    在检测到调试程序问题StalledTraining时由 发送的示例电子邮件通知。

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


                    在检测到调试程序问题StalledTraining时由 发送的示例文本通知。

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

  • 要使用调试程序内置操作,需要 Internet 连接。Amazon SageMaker 或 提供的网络隔离模式下不支持此功能Amazon VPC。

  • 内置操作不能用于 调试程序 ProfilerRule

  • 内置操作无法用于具有 Spot 训练中断的训练作业。

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