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

配置 Debugger 内置规则

Amazon SageMaker Debugger 的内置规则分析模型在训练期间发出的张量。SageMaker Debugger 提供 Rule API 操作,用于监控训练作业进度和错误,以成功训练模型。例如,规则可以检测梯度变得过大还是太小,模型是过度拟合还是过度训练,以及训练作业是否没有减少损失函数和实现改善。要查看可用内置规则的完整列表,请参阅 Debugger 内置规则列表

在以下主题中,您将学习如何使用 SageMaker Debugger 内置规则。

使用带有默认参数设置的 Debugger 内置规则

要在估算器中指定 Debugger 内置规则,您需要配置列表对象。以下示例代码显示了列出 Debugger 内置规则的基本结构:

from sagemaker.debugger import Rule, rule_configs rules=[ Rule.sagemaker(rule_configs.built_in_rule_name_1()), Rule.sagemaker(rule_configs.built_in_rule_name_2()), ... Rule.sagemaker(rule_configs.built_in_rule_name_n()), ... # You can also append more profiler rules in the ProfilerRule.sagemaker(rule_configs.*()) format. ]

有关内置规则的默认参数值和说明的详细信息,请参阅 Debugger 内置规则列表

要查找 SageMaker Debugger API 参考,请参阅 sagemaker.debugger.rule_configssagemaker.debugger.Rule

例如,要检查模型的整体训练性能和进度,请使用以下内置规则配置构造一个 SageMaker 估算器。

from sagemaker.debugger import Rule, rule_configs rules=[ Rule.sagemaker(rule_configs.loss_not_decreasing()), Rule.sagemaker(rule_configs.overfit()), Rule.sagemaker(rule_configs.overtraining()), Rule.sagemaker(rule_configs.stalled_training_rule()) ]

当您启动训练作业时,默认情况下,Debugger 每 500 毫秒收集一次系统资源利用率数据,每 500 个步骤收集一次损失和准确性值。Debugger 分析资源利用率,以确定您的模型是否存在瓶颈问题。loss_not_decreasingoverfitovertrainingstalled_training_rule 监控模型是否在优化损失函数而没有这些训练问题。当规则检测到训练异常时,规则评估状态将更改为 IssueFound。您可以设置自动操作,例如使用 Amazon CloudWatch Events 和 Amazon Lambda 来提供训练问题通知和停止训练作业。有关更多信息,请参阅 Amazon SageMaker Debugger 规则上的操作

使用带有自定义参数值的 Debugger 内置规则

如果您要调整内置的规则参数值并自定义张量集合正则表达式,请配置 ProfilerRule.sagemakerRule.sagemaker 类方法的 base_configrule_parameters 参数。使用 Rule.sagemaker 类方法时,您也可以通过 collections_to_save 参数自定义张量集合。使用 CollectionConfig API 配置张量集合 中提供了如何使用 CollectionConfig 类的说明。

为内置规则使用以下配置模板来自定义参数值。通过根据需要更改规则参数,您可以调整规则触发的敏感度。

  • 您在 base_config 参数中调用内置规则方法。

  • rule_parameters 参数用于调整 Debugger 内置规则列表 中列出的内置规则的默认键值。

  • collections_to_save 参数通过 CollectionConfig API 获取张量配置,这需要 nameparameters 参数。

有关 Debugger 规则类、方法和参数的更多信息,请参阅 Amazon SageMaker Python SDK 中的 SageMaker Debugger 规则类

from sagemaker.debugger import Rule, ProfilerRule, rule_configs, CollectionConfig rules=[ Rule.sagemaker( base_config=rule_configs.built_in_rule_name(), rule_parameters={ "key": "value" }, collections_to_save=[ CollectionConfig( name="tensor_collection_name", parameters={ "key": "value" } ) ] ) ]

各个规则的参数描述和值自定义示例均在 Debugger 内置规则列表 中提供。

配置 Debugger 规则的笔记本示例和代码示例

以下几个部分提供了笔记本和代码示例,讲解如何使用 Debugger 规则监控 SageMaker 训练作业。

Debugger 内置规则示例笔记本

以下示例笔记本演示了在使用 Amazon SageMaker 运行训练作业时如何使用 Debugger 内置规则:

在 SageMaker Studio 中运行示例笔记本时,您可以在 Studio 实验列表选项卡中找到所创建的训练作业试验。例如,如以下屏幕截图所示,您可以找到并打开当前训练作业的描述试验组件窗口。在“Debugger”选项卡上,您可以检查 Debugger 规则 vanishing_gradient()loss_not_decreasing() 是否并行监视训练会话。有关如何在 Studio UI 中查找训练作业试验组件的完整说明,请参阅 SageMaker Studio – 查看实验、试验和试验组件


                    正在运行的训练作业的图像,其中在 SageMaker Studio 中激活了 Debugger 内置规则

在 SageMaker 环境中使用 Debugger 内置规则的方法有两种:在准备好内置规则后部署内置规则,或者根据需要调整其参数。以下主题向您演示了如何将内置规则与示例代码结合使用。

Debugger 内置规则示例代码

以下代码示例演示如何使用 Rule.sagemaker 方法设置 Debugger 内置规则。要指定所要运行的内置规则,请使用 rules_configs API 操作调用内置规则。要查找 Debugger 内置规则和默认参数值的完整列表,请参阅 Debugger 内置规则列表

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import Rule, CollectionConfig, rule_configs # call built-in rules that you want to use. built_in_rules=[ Rule.sagemaker(rule_configs.vanishing_gradient()) Rule.sagemaker(rule_configs.loss_not_decreasing()) ] # construct a SageMaker estimator with the Debugger built-in rules sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-built-in-rules-demo', instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific arguments below rules=built_in_rules ) sagemaker_estimator.fit()
注意

Debugger 内置规则与您的训练作业并行运行。训练作业的内置规则容器的最大数量为 20 个。

有关 Debugger 规则类、方法和参数的更多信息,请参阅 Amazon SageMaker Python SDK 中的 SageMaker Debugger 规则类

要查找如何调整 Debugger 规则参数的示例,请参阅以下 使用 Debugger 内置规则并修改参数 部分。

使用 Debugger 内置规则并修改参数

下面的代码示例显示了用于调整参数的内置规则的结构。在此示例中,stalled_training_rule 每 50 个步骤收集一次 losses 张量,每 10 个步骤评估一次阶段。如果训练过程开始停滞并且在 120 秒内没有收集到任何张量输出,那么 stalled_training_rule 停止训练作业。

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import Rule, CollectionConfig, rule_configs # call the built-in rules and modify the CollectionConfig parameters base_job_name_prefix= 'smdebug-stalled-demo-' + str(int(time.time())) built_in_rules_modified=[ Rule.sagemaker( base_config=rule_configs.stalled_training_rule(), rule_parameters={ 'threshold': '120', 'training_job_name_prefix': base_job_name_prefix, 'stop_training_on_fire' : 'True' } collections_to_save=[ CollectionConfig( name="losses", parameters={ "train.save_interval": "50" "eval.save_interval": "10" } ) ] ) ] # construct a SageMaker estimator with the modified Debugger built-in rule sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name=base_job_name_prefix, instance_count=1, instance_type="ml.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific arguments below rules=built_in_rules_modified ) sagemaker_estimator.fit()

有关使用 CreateTrainingJob API 对 Debugger 内置规则进行高级配置的信息,请参阅使用 Amazon SageMaker API 配置 Debugger