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

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

配置调试程序挂钩以保存张量

张量是每次训练迭代的向后和向前通过的更新参数的数据集合,调试器收集输出张量来分析训练作业的状态。AmazonSageMakerDebugger (调试程序)CollectionConfigDebuggerHookConfigAPI 操作提供了将张量分组成的方法集合然后将其保存到目标 S3 存储桶。

注意

默认情况下,对于所有SageMaker训练作业,调试器每 500 个步骤从训练作业中收集损失和准确度输出标量,而不在中指定任何调试器特定参数SageMaker估算程序。调试器将输出数据保存在默认 S3 存储桶中。默认 S3 存储桶 URI 的格式为s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/.

构造SageMaker估计器,通过指定挂接配置参数启用调试器,debugger_hook_config. 以下步骤包含有关如何设置debugger_hook_config使用CollectionConfigDebuggerHookConfigAPI 操作可将张量从训练作业中抽出并保存它们。如果您使用调试程序支持Amazon用于零脚本更改的容器,你可以简单地运行训练作业而不更改训练脚本。你也可以使用调试器来训练在任何其他任何地方运行的作业调试程序支持Amazon具有脚本模式的容器,对训练脚本进行最小的更改。

使用CollectionConfigAPI 操作

使用CollectionConfig用于配置张量集合的 API 操作。如果使用 DebuGger 支持的深度学习框架和机器学习算法,调试器提供预构建的张量集合,这些集合涵盖了各种参数的正则表达式(正则表达式)。如以下示例代码所示,添加要调试的内置张量集合。

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig(name="weights"), CollectionConfig(name="gradients") ]

前面的集合设置了调试器钩子,基于默认值,每 500 个步骤保存张量"save_interval"值。

有关可用调试程序内置集合的完整列表,请参阅调试程序内置集合.

如果你想自定义内置集合,例如更改保存间隔和张量正则表达式,请使用以下命令CollectionConfig模板来调整参数。

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="tensor_collection", parameters={ "key_1": "value_1", "key_2": "value_2", ... "key_n": "value_n" } ) ]

有关可用参数键的更多信息,请参阅CollectionConfig中的亚马逊SageMakerPython 开发工具包. 例如,以下代码示例展示了如何在训练的不同阶段调整 “亏损” 张量收集的保存间隔:在训练阶段每 100 个步骤保存损失,在验证阶段每 10 个步骤保存一次验证损失。

from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="losses", parameters={ "train.save_interval": "100", "eval.save_interval": "10" } ) ]
提示

这个 tensor 集合配置对象可以用于两者DebuggerHookConfigRuleAPI 操作。

配置调试程序挂钩以保存张量

使用DebuggerHookConfig类来创建debugger_hook_config使用对象collection_configs您在上一步中创建的对象。

from sagemaker.debugger import DebuggerHookConfig debugger_hook_config=DebuggerHookConfig( collection_configs=collection_configs )

调试程序将模型训练输出张量保存到默认 S3 存储桶中。默认 S3 存储桶 URI 的格式为s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/.

如果要指定确切的 S3 存储桶 URI,请使用以下代码示例:

from sagemaker.debugger import DebuggerHookConfig debugger_hook_config=DebuggerHookConfig( s3_output_path="specify-your-s3-bucket-uri" collection_configs=collection_configs )

有关更多信息,请参阅 。DebuggerHookConfig中的亚马逊SageMakerPython 开发工具包.

用于配置调试器挂钩的示例笔记本和代码示例

以下各节提供了如何使用调试器钩子保存、访问和可视化输出张量的笔记本和代码示例。

张量可视化示例笔记本

以下两个笔记本示例显示了亚马逊的高级使用SageMaker用于可视化张量的调试器。调试器为训练深度学习模型提供了透明的视图。

  • 中的交互式张量分析SageMakerMXNet 工作室笔记本

    该笔记本示例说明了如何使用 Amazon 可视化保存的张量。SageMaker调试程序。通过可视化张量,您可以在训练深度学习算法的同时,看到张量值如何变化。该笔记本包含一个具有未正确配置的神经网络的训练作业,并使用SageMaker调试程序用于聚合和分析张量,包括梯度、激活输出和权重。例如,下图显示了出现梯度消失问题的卷积层的梯度分布情况。

    
                        该图显示了出现梯度消失问题的卷积层的梯度分布情况

    该笔记本还说明了正确的初始超参数设置如何生成相同的张量分布图,从而改进了训练过程。

  • 从 MXNet 模型训练中可视化和调试张量

    该笔记本示例说明了如何使用亚马逊保存 MXNet Gluon 模型训练作业中的张量并进行可视化。SageMaker调试程序。它说明了调试程序设置为将所有张量保存到 Amazon S3 存储桶中并检索ReLu可视化的激活输出。下图显示了一个可视化的三维可视化。ReLu激活输出。颜色方案设置为蓝色以表示接近于 0 的值,设置为黄色以表示接近于 1 的值。

    
                        ReLU 激活输出的可视化

    在这本笔记本中,TensorPlot从导入类tensor_plot.py旨在绘制采用二维图像作为输入的卷积神经网络 (CNN)。这些区域有:tensor_plot.py该笔记本附带的脚本使用调试程序检索张量并对 CNN 进行可视化。你可以在上运行这个笔记本SageMakerStudio 可重现张量可视化并实施您自己的卷积神经网络模型。

  • 中的实时张量分析SageMaker带 MXNet 的笔记本

    此示例将指导您完成在亚马逊中安装发出张量所需的组件SageMaker训练作业并使用调试器 API 操作在训练运行期间访问这些张量。gluon CNN 模型是根据时尚 MNIST 数据集进行训练的。在作业运行期间,您将看到调试器如何从 100 个批次中的每个批次中检索第一个卷积层的激活输出并对其进行可视化。此外,这将向您展示如何在作业完成后可视化权重。

使用调试程序内置集合保存张量

您可以使用使用内置张量集合。CollectionConfigAPI 然后使用DebuggerHookConfigAPI。以下示例说明了如何使用调试程序挂钩配置的默认设置来构建SageMaker TensorFlow估算程序。你也可以将它用于 MxNet,PyTorch,以及 xgBoost 估计器。

注意

在以下示例代码中,s3_output_path对于的参数DebuggerHookConfig为可选项。如果你没有指定它,调试器将张量保存在s3://<output_path>/debug-output/,其中,<output_path>是的默认输出路径SageMaker训练作业。例如:

"s3://sagemaker-us-east-1-111122223333/sagemaker-debugger-training-YYYY-MM-DD-HH-MM-SS-123/debug-output"
import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to call built-in collections collection_configs=[ CollectionConfig(name="weights"), CollectionConfig(name="gradients"), CollectionConfig(name="losses"), CollectionConfig(name="biases") ] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-built-in-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.m4.xlarge", framework_version="2.3.0", py_version="py37", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

要查看调试程序内置集合列表,请参阅调试程序内置集合.

使用调试程序修改的内置集合保存张量

您可以使用CollectionConfigAPI 操作。以下示例说明了如何调整内置文件。losses收集并构造SageMaker TensorFlow估算程序。您也可以将其用于 MXNet,PyTorch,以及 xgBoost 估计器。

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to call and modify built-in collections collection_configs=[ CollectionConfig( name="losses", parameters={"save_interval": "50"})] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-modified-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.m4.xlarge", framework_version="2.3.0", py_version="py37", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

有关完整列表CollectionConfig参数,请参阅Debugger (调试程序)CollectionConfigAPI.

使用调试程序自定义集合保存张量

您还可以选择保存减少的张量数而不是全部张量(例如,如果要减少 Amazon S3 存储桶中保存的数据量)。以下示例说明了如何自定义调试程序挂钩配置以指定要保存的目标张量。您可以将此用于TensorFlow,MXNet,PyTorch,以及 xgBoost 估计器。

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import DebuggerHookConfig, CollectionConfig # use Debugger CollectionConfig to create a custom collection collection_configs=[ CollectionConfig( name="custom_activations_collection", parameters={ "include_regex": "relu|tanh", # Required "reductions": "mean,variance,max,abs_mean,abs_variance,abs_max" }) ] # configure Debugger hook # set a target S3 bucket as you want sagemaker_session=sagemaker.Session() BUCKET_NAME=sagemaker_session.default_bucket() LOCATION_IN_BUCKET='debugger-custom-collections-hook' hook_config=DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=collection_configs ) # construct a SageMaker TensorFlow estimator sagemaker_estimator=TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='debugger-demo-job', instance_count=1, instance_type="ml.m4.xlarge", framework_version="2.3.0", py_version="py37", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

有关完整列表CollectionConfig参数,请参阅Debugger (调试程序)CollectionConfig.