SageMaker 分布式模型并行配置提示和陷阱 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

SageMaker 分布式模型并行配置提示和陷阱

在使用 Amazon SageMaker 的分布式模型并行库之前,请查看以下提示和陷阱。此列表包括适用于跨框架的提示。有关 TensorFlow 和 PyTorch 特定的提示,请参阅修改简单 TensorFlow 训练脚本修改 PyTorch 训练脚本,分别。

微粒 Batch 量和数量

  • 当批处理大小增加时,库效率最高。对于模型适用于单个设备,但只能通过小批量进行训练的用例,在集成库之后,批量大小可以也应该增加。模型并行度为大型模型节省内存,使您能够使用以前不适合内存的批量大小进行训练。

  • 选择大量太小或太大的微粒可能会影响性能。该库在每个设备中按顺序执行每个微粒,因此微粒大小(批次大小除以微粒数量)必须足够大,才能充分利用每个 GPU。与此同时,管道效率随微粒的数量而提高,因此达到适当的平衡是非常重要的。通常,一个很好的起点是尝试 2 或 4 个微粒,将批次大小增加到存储器限制,然后尝试更大的批量和数量的微粒。随着微粒数量的增加,如果使用交错管线,则可能会有较大批量的可行性。

  • 您的批次大小必须始终可以除以微粒的数量。请注意,根据数据集的大小,有时每个时代的最后一个批次的大小可能比其余的小,并且这个较小的批次也需要可以被微粒数量整除。如果不是,您可以将drop_remainder=True中的tf.Dataset.batch()调用(在 TensorFlow 中),或者设置drop_last=TrueDataLoader(在 PyTorch 中),以便不使用最后一个小批次。如果您使用的是不同的 API 用于数据管道,则可能需要手动跳过最后一个批次,只要它不能被微批次数整除。

手动分区

  • 如果使用手动分区,请注意模型中的多个操作和模块所使用的参数,例如变换器体系结构中的嵌入表。共享相同参数的模块必须放置在同一设备中,以确保正确性。使用自动分区时,库会自动强制执行此约束。

数据准备

  • 如果模型需要多个输入,请确保您使用数据管道中的随机操作(例如,洗牌)smp.dp_rank(). 如果要在数据并行设备之间确定地分片数据集,请确保分片由smp.dp_rank(). 这是为了确保在形成模型分区的所有级别上看到的数据的顺序是一致的。

从 SMP 返回张量。分布式模型

  • 任何张量从smp.DistributedModel.call(用于 TensorFlow)或smp.DistributedModel.forward(对于 PyTorch)函数被广播到所有其他级别,从计算该特定张量的等级。因此,不应返回调用和转发方法(例如中间激活)之外不需要的任何张量,因为这会导致不必要的通信和内存开销并损害性能。

@smp. 步骤装饰器

  • 如果smp.step-装饰函数具有一个不具有批处理维度的张量参数,参数名称必须在non_split_inputs调用时的列表smp.step. 这可以防止库尝试将张量分成微粒。有关更多信息,请参阅smp.step中)。