数据并行排查 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

数据并行排查

如果在使用库时运行训练作业时遇到问题,请使用以下列表尝试进行故障排除。如果你需要进一步的支持,请联系SageMaker团队通过Amazon支持中心要么Amazon亚马逊开发者论坛亚马逊SageMaker.

使用SageMaker与亚马逊并行分布式数据SageMaker调试程序和检查点

监控系统瓶颈、分析框架操作并调试模型输出张量以用于训练作业SageMaker并行分布式数据,使用亚马逊SageMaker调试程序。

但是,当你使用SageMaker调试程序,SageMaker并行分布式数据,以及SageMaker检查点时,您可能会看到类似于以下示例的错误。

SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled

这是由于调试器和检查点之间存在内部错误,启用时会发生这种错误SageMaker并行分布式数据。

  • 如果启用所有三个功能,SageMakerPython SDK 通过传递自动关闭调试器debugger_hook_config=False,该框架等效于以下框架estimator示例。

    bucket=sagemaker.Session().default_bucket() base_job_name="sagemaker-checkpoint-test" checkpoint_in_bucket="checkpoints" # The S3 URI to store the checkpoints checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket) estimator = TensorFlow( ... distribution={"smdistributed": {"dataparallel": { "enabled": True }}}, checkpoint_s3_uri=checkpoint_s3_bucket, checkpoint_local_path="/opt/ml/checkpoints", debugger_hook_config=False )
  • 如果你想继续使用两者SageMaker并行分布式数据SageMaker调试器,一种解决方法是手动将检查点函数添加到训练脚本中,而不是指定checkpoint_s3_uricheckpoint_local_path来自评估程序的参数。有关在训练脚本中设置手动检查点的更多信息,请参阅保存检查点.

附加到模型参数键的意外前缀

适用于PyTorch分布式培训作业,意想不到的前缀 (model例如)可能会附加到state_dict键(模型参数)。这些区域有:SageMaker在以下情况下,数据并行库不会直接更改或加上任何模型参数名称PyTorch训练作业可以保存模型工件。这些区域有:PyTorch的分布式培训改变了state_dict通过网络,在前缀之前。如果您在使用时由于参数名称不同而遇到任何模型故障问题SageMaker数据并行库和检查点PyTorch训练中调整下面的示例代码,以便在训练脚本中加载检查点的步骤中删除前缀。

state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}

这需要每个state_dictkey 作为字符串值,在第一次出现时将字符串分隔'model.',并获取分区字符串的第三个列表项(含索引 2)。

有关前缀问题的更多信息,请参阅以下内容的讨论话题:如果通过 Multi-GPU 训练,则在保存模型中加上参数名称中的PyTorch论坛.

有关的更多信息PyTorch保存和加载模型的方法,请参阅跨设备保存和加载模型中的PyTorch文档.

SageMaker初始化期间分布式培训 Job 停滞

如果您的SageMaker使用启用 EFA 的实例时,在初始化期间分布式数据并行训练作业停顿 (ml.p3dn.24xlargeml.p4d.24xlarge),这可能是由于用于培训作业的 VPC 子网的安全组中配置错误造成的。EFA 需要适当的安全组配置才能启用节点之间的流量。

为安全组配置入站和出站规则

  1. 登录到Amazon Web Services Management Console并打开 Amazon VPC 控制台,网址:https://console.aws.amazon.com/vpc/

  2. 选择个安全组在左侧导航窗格中。

  3. 选择与您用于培训的 VPC 子网绑定的安全组。

  4. 详细信息部分中,复制安全组 ID.

  5. Inbound Rules (入站规则) 选项卡上,选择 Edit inbound rules (编辑入站规则)

  6. Edit inbound rules (编辑入站规则) 页面上,执行以下操作:

    1. 选择 Add rule

    2. 对于 Type (类型),请选择 All traffic (所有流量)

    3. 适用于,选择Custom (自定义)中,将安全组 ID 粘贴到搜索框中,然后选择弹出的安全组。

  7. 选择保存规则以完成安全组的入站规则配置。

  8. 在存储库的出站规则选项卡,选择编辑出站规则.

  9. 重复步骤 6 和 7 以添加与出站规则相同的规则。

完成上述使用入站和出站规则配置安全组的步骤后,请重新运行培训作业并验证停滞问题是否已解决。

有关为 VPC 和 EFA 配置安全组的更多信息,请参阅您的 VPC 的安全组Elastic Fabric Adapter.

SageMaker培 Job 结束时的分布式培训作业停滞

培训结束时问题停滞的根本原因之一是不同等级中每个时代处理的批次数不匹配。所有 Worker (GPU) 在向后传递中同步其本地渐变,以确保在批处理迭代结束时他们都拥有相同的模型副本。如果在培训的最后一个时期,批量大小分配给不同的员工组不均衡,则培训作业就会停顿。例如,当一组工作人员(A 组)完成处理所有批次并退出训练循环时,另一组工作人员(B 组)开始处理另一个批次,仍然期望来自 A 组的通信以同步渐变。这会导致 B 组等待 A 组,该组已经完成训练,没有任何梯度要同步。

因此,在设置训练数据集时,重要的是每个工作人员获得相同数量的数据样本,以便每个工作人员在训练时经历相同数量的批次。确保每个排名获得相同数量的批次,以避免这种停滞的问题。

观察由于 Amazon FSx 吞吐量瓶颈而导致的扩展效率下降

缩放效率降低的一个潜在原因是 FSx 吞吐量限制。如果在切换到更大的训练集群时观察到扩展效率突然下降,请尝试使用具有更高吞吐量限制的 Lustre 文件系统的更大 FSx。有关更多信息,请参阅 。聚合文件系统性能管理存储和吞吐量容量中的Amazon FSx for Lustre 用户指南.

SageMaker分布式训练 JobPyTorch返回弃用警告

自 1.4.0 版本以来,SageMaker分布式数据并行度库可作为PyTorch分布式。由于使用图书馆的重大变化PyTorch,您可能会遇到警告消息,指出smdistributed适用于PyTorch已弃用分布式软件包。警告消息应该类似于以下内容:

smdistributed.dataparallel.torch.dist is deprecated in the SageMaker distributed data parallel library v1.4.0+. Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows: torch.distributed.init_process_group(backend='smddp') For more information, see the library's API documentation at https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html

在 v1.4.0 及更高版本中,该库只需在训练脚本的顶部导入一次,然后在PyTorch分布式初始化。使用单行后端规范,您可以保留PyTorch训练脚本不变并直接使用PyTorch分布式模块。请参阅修改 PyTorch 训练脚本了解突破性变化以及使用图书馆的新方法PyTorch.