SageMaker 分布式模型并行最佳实践
当您使用 SageMaker 模型并行库运行分布式训练任务时,请遵循以下指南。 为特定模型设置正确配置 在扩展模型时,建议您按以下顺序逐一考量。每一项都讨论了使用该库技术的优势以及可能出现的权衡。 提示:如果一个模型仅使用库的部分功能就能很好地适配,增加更多的模型并行或内存节省特性通常不会带来性能提升。 使用大型 GPU 实例 在模型并行领域,最好使用配备大显存的强大实例,以应对模型并行操作(如在多个 GPU 间分区模型)带来的开销。我们推荐使用 ml.p4d 或 ml.p3dn 实例来训练大型深度学习模型。这些实例还配备了弹性结构适配器(EFA),可提供更高的内网带宽,从而支持大规模模型并行训练。 优化器状态分片 (Optimizer State Sharding) 优化器状态分片的效果取决于数据并行的 rank 数量。通常,更高的数据并行度(与计算节点大小成正比)可以提高内存使用效率。 当您计划缩减集群规模时,请务必检查优化器状态分片的配置。例如,一个在 16 个 GPU(如两个 P4d 或 P4de 实例)的计算集群上能够通过优化器状态分片成功运行的大型模型,不一定能在一个 8 GPU 的节点(如单个 P4d 或 P4de 实例)上运行。这是因为 8 个 GPU 的总显存低于 16 个 GPU,并且在 8 个 GPU 上进行分片时,每个 GPU 所需的显存也高于 16 GPU 的情况。因此,增加的显存需求可能无法在较小的集群中得到满足。 激活检查点 (Activation Checkpointing) 通过对一组模块使用激活检查点,可以提高内存效率。您分组的模块越多,内存使用效率就越高。 当对序列模块的层进行检查点设置时,smp.set_activation_checkpointing 函数的 strategy 参数会将这些层组合在一起进行检查点。例如,将两个或更多层组合在一起进行检查点比一次只检查一个层更节省内存,这是一种以额外的计算时间换取内存空间的方法。 张量并行 (Tensor Parallelism) 张量并行的度数应为 2 的幂(2, 4, 8, …, 2^n),且最大度数必须等于每个节点上的 GPU 数量。例如,如果您使用一个有 8 个 GPU 的节点,张量并行的度数可以是 2、4 或 8。我们不推荐使用任意数字(如 3、5、6、7)作为张量并行的度数。 ...