Megatron Core 用户指南

encoder-decoder-parallelism 包

Mcore (0.9 版本起) 支持用于 encoder-decoder 模型的异构并行性。 特别是,用户现在可以指定张量和流水线并行量的多少,并使其与 decoder 中的并行量不同。

支持于: T5, LLaVa。

用于 encoder 并行的新参数是 –encoder-pipeline-model-parallel-size。 此参数与控制流水线的常用参数完全不同:–pipeline-model-parallel-size,后者在 encoder-decoder 模型的上下文中控制 decoder 中的流水线量。

encoder-decoder 模型中的流水线总量是这两个参数的总和。 默认情况下,encoder 流水线量为 0,decoder 流水线量为 1,这意味着 encoder 和 decoder 共享单个流水线 rank。 如果 –pipeline-model-parallel-size > 1,则必须指定 encoder 并行量,并且必须大于 0。 这是因为我们无法再在 encoder 和 decoder 之间共享流水线 rank。

支持于: LLaVa。

由于我们预计 encoder 比 decoder 小得多,因此我们还允许用户设置与 decoder 不同的张量并行量。 这是通过参数 –encoder-tensor-model-parallel-size 实现的。 要使用此选项,您必须使用 encoder 流水线并行(即,–encoder-pipeline-model-parallel-size > 0)。

与 encoder 流水线并行不同,encoder 流水线并行不受 decoder 流水线并行量的限制,我们只允许 encoder 具有小于或等于 decoder 的张量并行量。 我们执行此操作的总结是在 p2p_communication.py 中,我们必须将一个 encoder rank 的激活发送到多个 decoder rank;相应地,我们必须添加对从多个(下游)decoder rank 为 encoder rank 求和梯度 tensor 的支持。 我们尚未看到将这些梯度 tensor 相加引起的量化相关退化;这可能会在非常大的模型中发生。

启用这些选项时,训练模型所需的 GPU 总量为

dp * etp * epp * cp + dp * tp * pp * cp

其中: dp:数据并行量(encoder 和 decoder 相同) [e]tp:张量并行量 [e]pp:流水线并行量 cp:上下文并行量(与 dp 相同,encoder 和 decoder 相同)

此参数的默认值为 0;在实践中,我们将使用 decoder 中的张量并行量来构建 encoder。

上一篇 优化器参数调度器
© 版权所有 2022-2025, NVIDIA。 上次更新于 2025 年 1 月 14 日。