本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon SageMaker 调试器的注意事项
使用 Amazon SageMaker 调试器时,请考虑以下几点。
分布式训练的注意事项
以下列表针对使用深度学习框架和各种分布式训练选项的训练作业,显示了 Debugger 的适用范围和注意事项。
-
Horovod
对采用 Horovod 的训练作业的 Debugger 适用范围深度学习框架 Apache MXNet TensorFlow 1.x TensorFlow 2.x TensorFlow 使用 Keras 的 2.x PyTorch 监控系统瓶颈 支持 是 是 是 是 分析框架操作 否 否 否 是 是 调试模型输出张量 支持 是 是 是 是 -
SageMaker 分布式数据 parallel
使用调试器训练 SageMaker分布式数据 parallel 的作业的有效范围深度学习框架 TensorFlow 2.x TensorFlow 使用 Keras 的 2.x PyTorch 监控系统瓶颈 支持 是 是 分析框架操作 否* 否** 是 调试模型输出张量 支持 是 是 * 调试器不支持 TensorFlow 2.x 的框架分析。
** SageMaker 分布式数据 parallel 不支持采用 Keras 实现的 TensorFlow 2.x。
-
SageMaker 分布式模型 paral lel — Debugger 不支持 SageMaker 分布式模型并行训练。
-
带 SageMaker 检查点的分布式训练 — 当同时启用分布式训练选项和 SageMaker 检查点时,调试器不可用于训练作业。您可能会看到如下所示的错误:
SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled
要将 Debugger 用于带有分布式训练选项的训练作业,您需要禁用 SageMaker 检查点操作并在训练脚本中添加手动检查点功能。有关在带有检查点的分布式训练选项中使用 Debugger 的详细信息,请参阅与 Amazon SageMaker 调试器和检查点并行使用 SageMaker 分布式数据和保存检查点。
-
参数服务器 – Debugger 不支持基于参数服务器的分布式训练。
-
无法分析分布式训练框架的
AllReduced
操作,例如 SageMaker 分布式数据并行操作和 Horovod 操作。
监控系统瓶颈和分析框架操作时的注意事项
-
对于 Amazon TensorFlow,无法使用
FrameworkProfile
类的默认local_path
设置收集数据加载器指标。路径必须手动配置,并以"/"
结尾。例如:FrameworkProfile(local_path="/opt/ml/output/profiler/")
-
对于 Amazon TensorFlow,在训练作业运行时无法更新数据加载器分析配置。
-
对于 Amazon TensorFlow,当您将分析工具和笔记本示例与 TensorFlow 2.3 训练作业和详细分析选项一起使用时,可能会出现
NoneType
错误。 -
只有 Keras API 支持 Python 分析和详细分析。
-
要访问 TensorFlow 和的深度分析功能 PyTorch,当前必须使用 CUDA 11 指定最新的 Amazon 深度学习容器映像。例如,您必须在 TensorFlow和 PyTorch 估算器中指定特定的图像 URI,如下所示:
-
对于 TensorFlow
image_uri = f"763104351884.dkr.ecr.{region}.amazonaws.com/tensorflow-training:2.3.1-gpu-py37-cu110-ubuntu18.04"
-
对于 PyTorch
image_uri = f"763104351884.dkr.ecr.{region}.amazonaws.com/pytorch-training:1.6.0-gpu-py36-cu110-ubuntu18.04"
-
调试模型输出张量时的注意事项
-
避免使用函数式 API 操作。调试器无法从由函数式 API 操作组成的 PyTorch MXNet 训练脚本收集模型输出张量。
-
Debugger 无法从
torch.nn.functional
API 操作中收集模型输出张量。在编写 PyTorch 训练脚本时,建议改用这些 torch.nn
模块。 -
Debugger 无法从混合块的 MXNet 函数式对象中收集模型输出张量。例如,无法从以下
hybrid_forward
函数F
中的 with 示例中收集 ReLu 激活 (F.relu
) 输出。mxnet.gluon.HybridBlock
import mxnet as mx from mxnet.gluon import HybridBlock, nn class Model(HybridBlock): def __init__(self, **kwargs): super(Model, self).__init__(**kwargs) # use name_scope to give child Blocks appropriate names. with self.name_scope(): self.dense0 = nn.Dense(20) self.dense1 = nn.Dense(20) def hybrid_forward(self, F, x): x = F.relu(self.dense0(x)) return F.relu(self.dense1(x)) model = Model() model.initialize(ctx=mx.cpu(0)) model.hybridize() model(mx.nd.zeros((10, 10), ctx=mx.cpu(0)))
-