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

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

配置 调试程序 内置规则

Amazon SageMaker 调试程序 规则将分析模型训练期间发出的张量。调试程序 提供了 Rule API 操作以监控训练作业进度和错误,从而成功训练您的模型。例如,这些规则可以检测梯度是否变得太大或太小、模型是否过度拟合或过度训练以及训练作业是否不会减少损失函数并改进。要查看可用内置规则的完整列表,请参阅调试程序 内置规则的列表

注意

内置规则在 Amazon SageMaker 处理容器中准备并由 SageMaker 调试程序 完全托管。默认情况下,调试程序 为所有 ProfilerReport 训练作业启动 SageMaker 规则,而不为 调试程序 评估程序指定任何 SageMaker 特定的规则参数。规则调用以下所有内置规则来监控系统瓶颈和分析框架指标:ProfilerReport

调试程序将分析报告保存在默认的 S3 存储桶中。默认 S3 存储桶 URI 的格式为 s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/rule-output/。 有关如何下载分析报告的更多信息,请参阅SageMaker 调试程序 分析报告。SageMaker 调试程序 完全管理内置规则并并行分析您的训练作业。有关计费的更多信息,请参阅 Amazon SageMaker 定价页面的 Amazon SageMaker Studio 不另外收费部分。

在以下主题中,了解如何使用 调试程序 内置规则。

将 调试程序 内置规则与默认参数设置结合使用

要在评估程序中指定 调试程序 内置规则,您需要配置 rules 列表对象。以下示例代码显示了列出 调试程序 内置规则的基本结构:

from sagemaker.debugger import Rule, ProfilerRule, rule_configs rules=[ ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_1()), ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_2()), ... ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_n()), 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()) ]

有关默认参数值和内置规则描述的更多信息,请参阅调试程序 内置规则的列表

例如,要检查模型的整体训练性能和进度,请使用以下内置规则配置构建 SageMaker 评估程序。

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

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

将 调试程序 内置规则与自定义参数值结合使用

如果要调整内置规则参数值并自定义张量集合正则表达式,请为 base_configrule_parameters 类方法配置 ProfilerRule.sagemakerRule.sagemaker 参数。对于 Rule.sagemaker 类方法,您还可以通过 collections_to_save 参数自定义张量集合。有关如何使用 CollectionConfig 类的说明在 使用收集 API 操作配置 调试程序 张量集合 中提供。

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

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

from sagemaker.debugger import Rule, ProfilerRule, rule_configs, CollectionConfig rules=[ ProfilerRule.sagemaker( base_config=rule_configs.BuiltInProfilerRuleName(), rule_parameters={ "key": "value" } ) 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" } ) ] ) ]

调试程序 内置规则的列表中为每个规则提供了参数描述和值自定义示例。

用于配置 调试程序 规则的示例笔记本和代码示例

在以下部分中,提供了有关如何使用 调试程序 规则监控 SageMaker 训练作业的笔记本和代码示例。

调试程序 内置规则示例笔记本

以下示例笔记本说明了如何在使用 调试程序 运行训练作业时使用 Amazon SageMaker 内置规则:

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


                    在 调试程序 Studio 中运行训练作业并激活 SageMaker 内置规则的图像

在 调试程序 环境中使用 SageMaker 内置规则的方法有两种:在准备内置规则时部署这些规则,或者根据需要调整它们的参数。以下主题说明如何将内置规则与示例代码结合使用。

调试程序 内置规则示例代码

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

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', train_instance_count=1, train_instance_type="ml.m4.xlarge", framework_version="2.1.0", py_version="py3", # debugger-specific arguments below rules=built_in_rules ) sagemaker_estimator.fit()
注意

内置规则与训练作业并行运行。调试程序训练作业的最大内置规则容器数为 20。

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

要查找如何调整 调试程序 规则参数的示例,请参阅以下将 调试程序 内置规则与参数修改结合使用部分。

将 调试程序 内置规则与参数修改结合使用

以下代码示例显示了用于调整参数的内置规则的结构。在此示例中,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, train_instance_count=1, train_instance_type="ml.m4.xlarge", framework_version="2.1.0", py_version="py3", # debugger-specific arguments below rules=built_in_rules_modified ) sagemaker_estimator.fit()

有关使用 调试程序 API 的 CreateTrainingJob 内置规则的高级配置,请参阅 将 调试程序 内置规则配置添加到 CreateTrainingJob API 操作