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

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

配置 SageMaker 调试器以保存张量

张量是每次训练迭代的向后和向前传递的更新参数的数据集合。 SageMaker 调试器收集输出张量来分析训练作业的状态。 SageMaker 调试器CollectionConfigDebuggerHookConfigAPI 操作提供了将张量分组为集合并将它们保存到目标 S3 存储桶的方法。

注意

正确配置和激活后,除非另有说明,否则 SageMaker 调试器将输出张量保存在默认 S3 存储桶中。默认 S3 存储桶 URI 的格式为s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/

在构造 SageMaker 估计器时,通过指定debugger_hook_config参数来激活 SageMaker 调试器。以下步骤包括如何设置debugger_hook_config使用CollectionConfigDebuggerHookConfig API 操作以将张量从训练作业中提取并保存的示例。

使用CollectionConfig API 配置张量集合

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

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

前面的集合设置了 Debugger 挂钩,根据默认"save_interval"值每 500 步保存张量一次。

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

如果要自定义内置集合,例如更改保存间隔和张量正则表达式,请使用以下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" } ) ]

有关可用参数键的更多信息,请参阅 CollectionConfigAmaz SageMaker on Python SDK 中的。例如,以下代码示例显示了如何在训练的不同阶段调整 “损失” 张量集合的保存间隔:在训练阶段每 100 步保存一次损失,在验证阶段每 10 步保存一次验证损失。

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

此张量集合配置对象既可以用于规则 API 操作 DebuggerHookConfig,也可以用于规则 API 操作。

配置DebuggerHookConfig API 以保存张量

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

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亚马逊 SageMaker Python 开发工具包中的

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

以下部分提供笔记本和代码示例,说明如何使用 Debugger 挂钩保存、访问和可视化输出张量。

张量可视化示例笔记本

以下两个笔记本示例展示了 Amazon SageMaker Debugger 在可视化张量方面的高级用法。调试器为训练深度学习模型提供了透明视图。

  • 使用 MXNet 在 SageMaker 工作室笔记本电脑中进行交互式张量分析

    此笔记本示例显示了如何使用 Amazon SageMaker Debugger 可视化保存的张量。通过可视化张量,您可以看到训练深度学习算法时张量值是如何变化的。该笔记本包含一项使用神经网络配置不佳的训练作业,并使用 Amazon D SageMaker ebugger 聚合和分析张量,包括梯度、激活输出和权重。例如,下图显示了出现梯度消失问题的卷积层的梯度分布情况。

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

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

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

    此笔记本示例显示了如何使用 Amazon SageMaker Debugger 保存和可视化来自 MXNet Gluon 模型训练作业的张量。它说明了 Debugger 设置为将所有张量保存到 Amazon S3 存储桶中,并为可视化检索 ReLu 激活输出。下图显示了 ReLu 激活输出的三维可视化。配色方案设置为蓝色表示接近 0 的值,黄色设置为表示接近 1 的值。

    
                        ReLU 激活输出的可视化

    在这本笔记本中,导入的TensorPlottensor_plot.py旨在绘制卷积神经网络 (CNN),该卷积神经网络 (CNN) 以获取二维图像作为输入。笔记本提供的tensor_plot.py脚本使用调试器检索张量并可视化 CNN。你可以在 SageMaker Studio 上运行这个笔记本来重现张量可视化并实现你自己的卷积神经网络模型。

  • 使用 MXNet 在 SageMaker 笔记本电脑中进行实时张量分析

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

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

您可以使用 API 使用内置的张量集合,并使用CollectionConfig APDebuggerHookConfig I 保存它们。以下示例说明如何使用调试器挂钩配置的默认设置来构造 SageMaker TensorFlow 估计器。你也可以将其用于 MXNet 和 XGBoost 估计器。 PyTorch

注意

在以下示例代码中,的s3_output_path参数DebuggerHookConfig是可选的。如果您未指定,Debugger 会将张量保存在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.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

要查看调试器内置集合的列表,请参阅调试器内置集合

使用调试器修改后的内置集合保存张量

您可以使用CollectionConfig API 操作修改调试器内置集合。以下示例显示了如何调整内置losses集合和构造 SageMaker TensorFlow 估计器。你也可以将其用于 MXNet 和 XGBoost 估计器。 PyTorch

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.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

有关CollectionConfig参数的完整列表,请参阅调试器 CollectionConfig API

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

您也可以减少张量的数量,而不是保存完整的张量集(例如,如果您想减少保存在您的 Amazon S3 存储桶中的数据量)。以下示例说明如何自定义调试器挂钩配置以指定要保存的目标张量。你可以将其用于 TensorFlow MXNet 和 XGBoost 估计器。 PyTorch

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.p3.2xlarge", framework_version="2.9.0", py_version="py39", # debugger-specific hook argument below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

有关CollectionConfig参数的完整列表,请参阅调试器 CollectionConfig