Amazon SageMaker Debugger 的注意事项 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon SageMaker Debugger 的注意事项

使用 Amazon SageMaker Debugger 时,请考虑以下事项。

分布式训练的注意事项

以下列表针对使用深度学习框架和各种分布式训练选项的训练作业,显示了 Debugger 的适用范围和注意事项。

  • Horovod

    对采用 Horovod 的训练作业的 Debugger 适用范围
    深度学习框架 Apache MXNet TensorFlow 1.x TensorFlow 2.x TensorFlow 2.x 与 Keras PyTorch
    监控系统瓶颈
    分析框架操作
    调试模型输出张量
  • SageMaker 分布式数据并行

    Debugger 对采用 SageMaker 分布式数据并行的训练作业的适用范围
    深度学习框架 TensorFlow 2.x TensorFlow 2.x 与 Keras PyTorch
    监控系统瓶颈
    分析框架操作 否* 否**
    调试模型输出张量

    * Debugger 不支持 TensorFlow 2.x 的框架分析。

    ** SageMaker 分布式数据并行不支持具有 Keras 实施的 TensorFlow 2.x。

  • SageMaker 分布式模型并行 – Debugger 不支持 SageMaker 分布式模型并行训练。

  • 使用 SageMaker 检查点的分布式训练 – 在同时启用分布式训练选项和 SageMaker 检查点时,Debugger 不可用于训练作业。您可能会看到如下所示的错误:

    SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled

    要对带有分布式训练选项的训练作业使用 Debugger,您需要禁用 SageMaker 检查点功能,并在训练脚本中添加手动检查点功能。有关在带有检查点的分布式训练选项中使用 Debugger 的详细信息,请参阅将 SageMaker 分布式数据并行与 Amazon SageMaker Debugger 和检查点结合使用保存检查点

  • 参数服务器 – Debugger 不支持基于参数服务器的分布式训练。

  • 分析分布式训练框架操作(例如 SageMaker 分布式数据并行运行的 AllReduced 操作以及 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 Deep Learning Containers 映像。例如,您必须在 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 无法从中收集模型输出张量。

    • Debugger 无法从 torch.nn.functional API 操作中收集模型输出张量。当您编写 PyTorch 训练脚本时,建议改为使用 torch.nn 模块。

    • Debugger 无法从混合块的 MXNet 函数式对象中收集模型输出张量。例如,从以下在 hybrid_forward 函数中带有 Fmxnet.gluon.HybridBlock 示例,无法收集 ReLu 激活 (F.relu) 的输出。

      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)))