创建 Debugger 自定义规则用于训练作业分析 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建 Debugger 自定义规则用于训练作业分析

您可以使用 Debugger 规则 API 以及开源 smdebug Python 库(提供了用于构建自己的规则容器的工具)来创建自定义规则,以监控您的训练作业。

创建 Debugger 自定义规则的先决条件

要创建 Debugger 自定义规则,您需要满足以下先决条件。

使用 Debugger 客户端库 smdebug 创建自定义规则 Python 脚本

smdebug 规则 API 提供了一个接口,用于设置自己的自定义规则。以下 Python 脚本示例演示了如何构造自定义规则 CustomGradientRule。本教程的自定义规则监控梯度变是否太大并将默认阈值设置为 10。自定义规则采用 SageMaker 估算器在启动训练作业时创建的基本试验。

from smdebug.rules.rule import Rule class CustomGradientRule(Rule): def __init__(self, base_trial, threshold=10.0): super().__init__(base_trial) self.threshold = float(threshold) def invoke_at_step(self, step): for tname in self.base_trial.tensor_names(collection="gradients"): t = self.base_trial.tensor(tname) abs_mean = t.reduction_value(step, "mean", abs=True) if abs_mean > self.threshold: return True return False

您可以在同一个 python 脚本中按需要添加任意数量的自定义规则类,并通过在下个部分中构造自定义规则对象,来将它们部署到任何训练作业试验中。

使用 Debugger API 来运行自己的自定义规则

以下代码示例演示了如何使用 Amazon SageMaker Python SDK 配置自定义规则。此示例假定您在上一步中创建的自定义规则脚本位于 path/to/my_custom_rule.py

from sagemaker.debugger import Rule, CollectionConfig custom_rule = Rule.custom( name='MyCustomRule', image_uri='759209512951.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rule-evaluator:latest', instance_type='ml.t3.medium', source='path/to/my_custom_rule.py', rule_to_invoke='CustomGradientRule', collections_to_save=[CollectionConfig("gradients")], rule_parameters={"threshold": "20.0"} )

下面的列表解释了 Debugger Rule.custom API 参数。

  • name(字符串):指定所需的自定义规则名称。

  • image_uri(字符串):这是容器的映像,该容器中具有了解您的自定义规则的逻辑。它获取您保存在训练作业中的指定张量集合并进行评估。您可以在适用于自定义规则评估器的 Amazon SageMaker Debugger 注册表 URL 中找到开源 SageMaker 规则评估器映像列表。

  • instance_type(字符串):您需要指定一个实例来构建规则 Docker 容器。这将启动一个与训练容器并行的实例。

  • source(字符串):这是自定义规则脚本的本地路径或 Amazon S3 URI。

  • rule_to_invoke(字符串):此项指定了自定义规则脚本中的特定规则类实施。SageMaker 在规则作业中只支持一次评估一个规则。

  • collections_to_save(字符串):此项指定了要保存哪些张量集合用于要运行的规则。

  • rule_parameters(字典):这将接受字典格式的参数输入。您可以调整在自定义规则脚本中配置的参数。

在设置 custom_rule 对象之后,您可以使用它为任意训练作业构建 SageMaker 估算器。对您的训练脚本指定 entry_point。您不需要对训练脚本进行任何更改。

from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( role=sagemaker.get_execution_role(), base_job_name='smdebug-custom-rule-demo-tf-keras', entry_point='path/to/your_training_script.py' train_instance_type='ml.p2.xlarge' ... # debugger-specific arguments below rules = [custom_rule] ) estimator.fit()

有关使用 Debugger 自定义规则的更多变体和高级示例,请参阅以下示例笔记本。