配置提示和缺陷 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

配置提示和缺陷

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

批处理大小和微批处理数

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

  • 选择一些太小或太大的微批处理可能会损害性能。库按顺序在每个设备中执行每个微批次,因此,小批次大小(批次大小除以微批次数)必须足够大才能充分利用每个 GPU。同时,管道效率随微批次数增加而提高,因此,达到正确的平衡非常重要。通常,一个好的起点是尝试 2 个或 4 个微批处理,将批处理大小增加到内存限制,然后试验更大的批处理大小和多个微批处理。随着微批次数量的增加,如果使用交错管道,则较大的批次大小可能会变得可行。

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

手动分区

  • 如果您使用手动分区,请注意模型中的多个操作和模块所使用的参数,例如转换器架构中的嵌入表。为正确起见,共享相同参数的模块必须放置在同一设备中。使用自动分区时,库会自动强制实施此约束。

数据准备

  • 如果模型采用多个输入,请确保使用 在数据管道中为随机操作做种(例如,乱序smp.dp_rank())。如果数据集正被确定为跨数据并行设备的分片,请确保分片由 编制索引smp.dp_rank()。这是为了确保在组成模型分区的所有排名上看到的数据顺序一致。

从 DistributedModel 返回张量

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

@smp.step 装饰器

  • 如果 smp.step装饰函数具有没有批处理维度的张量参数,则在调用 时必须在non_split_inputs列表中提供参数名称smp.step。这可防止库尝试将张量拆分为多个小批量。有关更多信息,请参阅 API smp.step 文档中的 。