本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置 SageMaker 调试器以保存张量
张量是每次训练迭代的向后和向前传递的更新参数的数据集合。 SageMaker 调试器收集输出张量来分析训练作业的状态。 SageMaker 调试器CollectionConfig
DebuggerHookConfig
注意
正确配置和激活后,除非另有说明,否则 SageMaker 调试器将输出张量保存在默认 S3 存储桶中。默认 S3 存储桶 URI 的格式为s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/
。
在构造 SageMaker 估计器时,通过指定debugger_hook_config
参数来激活 SageMaker 调试器。以下步骤包括如何设置debugger_hook_config
使用CollectionConfig
和DebuggerHookConfig
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
" } ) ]
有关可用参数键的更多信息,请参阅 CollectionConfig
from sagemaker.debugger import CollectionConfig collection_configs=[ CollectionConfig( name="
losses
", parameters={ "train.save_interval
": "100
", "eval.save_interval
": "10
" } ) ]
提示
此张量集合配置对象既可以用于规则 API 操作 DebuggerHookConfig,也可以用于规则 API 操作。
配置DebuggerHookConfig
API 以保存张量
使用 DebuggerHookConfigcollection_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
配置调试器挂钩的示例笔记本和代码示例
以下部分提供笔记本和代码示例,说明如何使用 Debugger 挂钩保存、访问和可视化输出张量。
张量可视化示例笔记本
以下两个笔记本示例展示了 Amazon SageMaker Debugger 在可视化张量方面的高级用法。调试器为训练深度学习模型提供了透明视图。
-
使用 MXNet 在 SageMaker 工作室笔记本电脑中进行交互式张量分析
此笔记本示例显示了如何使用 Amazon SageMaker Debugger 可视化保存的张量。通过可视化张量,您可以看到训练深度学习算法时张量值是如何变化的。该笔记本包含一项使用神经网络配置不佳的训练作业,并使用 Amazon D SageMaker ebugger 聚合和分析张量,包括梯度、激活输出和权重。例如,下图显示了出现梯度消失问题的卷积层的梯度分布情况。
该笔记本还说明了正确的初始超参数设置如何生成相同的张量分布图,从而改进了训练过程。
-
此笔记本示例显示了如何使用 Amazon SageMaker Debugger 保存和可视化来自 MXNet Gluon 模型训练作业的张量。它说明了 Debugger 设置为将所有张量保存到 Amazon S3 存储桶中,并为可视化检索 ReLu 激活输出。下图显示了 ReLu 激活输出的三维可视化。配色方案设置为蓝色表示接近 0 的值,黄色设置为表示接近 1 的值。
在这本笔记本中,导入的
TensorPlot
类tensor_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