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

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

配置调试程序内置规则

Amazon SageMaker Debugger 规则将分析模型训练期间发出的张量。调试程序提供RuleAPI 操作,用于监控训练作业进度和错误,以便成功训练模型。例如,规则可以检测梯度是否变得太大或太小,检测模型是否过度拟合还是过度训练,以及训练任务是否不降低损失功能和改善。要查看可用内置规则的完整列表,请参阅调试程序内置规则列表.

注意

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

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

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

将调试器内置规则与默认参数设置一起使用

要在估计器中指定调试器内置规则,你需要配置rules列出对象。以下示例代码显示列出 Debugger 内置规则的基本结构:

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 通知培训问题和停止培训作业Amazon Lambda. 有关更多信息,请参阅 对 Amazon SageMaker 调试器规则的操作

使用带有自定义参数值的调试器内置规则

如果你想调整内置的规则参数值并自定义张量集合正则表达式,请配置base_configrule_parameters的参数ProfilerRule.sagemakerRule.sagemaker类方法。如果是Rule.sagemaker类方法,你也可以通过collections_to_save参数。关于如何使用CollectionConfig课程提供在 使用CollectionConfigAPI 操作.

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

  • 这些区域有:base_config参数是你调用内置规则方法的地方。

  • 这些区域有:rule_parameters参数是调整中列出的内置规则的默认键值调试程序内置规则列表.

  • 这些区域有:collections_to_save参数通过一个张量配置CollectionConfigAPI,它需要nameparameters参数。

有关调试程序规则类、方法和参数的更多信息,请参阅SageMaker 调试器规则类中的Amazon SageMaker Python 开发工具包.

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 实验列表选项卡。例如,如以下屏幕截图所示,您可以找到并打开描述试验组件你当前训练工作的窗口。在调试器选项卡上,你可以检查调试器规则是否vanishing_gradient()loss_not_decreasing(), 正在同时监测培训课程. 有关如何在 Studio UI 中找到训练工作试用组件的完整说明,请参阅SageMaker Studio-查看实验、试验和试验组件.


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

在 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', instance_count=1, 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 开发工具包.

要查找如何调整调试器规则参数的示例,请参阅以下内容将调试程序内置规则与参数修改一起部分。

将调试程序内置规则与参数修改一起

以下代码示例说明了调整参数的内置规则的结构。在此示例中,stalled_training_rule收集losses每 50 个步骤从训练工作中收集张量,每 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.m4.xlarge", framework_version="2.1.0", py_version="py3", # debugger-specific arguments below rules=built_in_rules_modified ) sagemaker_estimator.fit()

要获得调试器内置规则的高级配置,请使用CreateTrainingJobAPI,请参阅使用 Amazon SageMaker API 配置调试器.