创建 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
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 自定义规则的更多变体和高级示例,请参阅以下示例笔记本。