Dynamic DP/CP switch

问题分析

在动态数据集训练过程中,每轮迭代的输入数据尺寸有长有短,对于较长的序列容易出现OOM,当前MM框架使用静态并行策略,在初始时根据数据集最长尺寸确定DP/CP的并行度从而保证长序列可训。然而,该静态方法容易导致性能次优,在长短序列混合的场景下,为了适应长序列,CP往往会设置的比较大,此时短序列也需要进行CP并行,降低了短序列的计算效率。在长序列较少,短序列较多,且长短序列差距较大的场景下,性能下降程度较大。

解决方案

在每轮迭代时,根据当前每个DP获得的数据,确定当前轮应该采用的并行策略,即DPxCPy,并同时进行数据分发和并行组切换。从而既能满足长序列可训,又能不影响短序列的计算效率

  • 并行组初始化:在megatron初始化之后,使用用户配置的最大CP并行度自动生成并行组列表,e.g. CP=4则并行组可为{dp4cp1,dp2cp2,dp1cp4}

  • 新并行策略获取:开启动态DPCP后,数据dataloader默认按照DPnCP1的方式获取数据,每轮迭代时gather所有DP域的数据尺寸,遍历并行组,得到满足序列长度要求 的最佳并行策略(DP优先)

  • 并行域切换与数据分发:获取新并行策略后,修改并行组的全局变量,指向新的并行组。同时从DP到CP切换过程中,需要进行数据广播,被广播的卡需要缓存本卡已经获得的样本,在后续的训练中,优先从缓存区获取样本数据。

适配版本

opensoraplan1.3

使用方法

参数位置:pretrain_t2v_model.json

参数名 参数含义
use_dynamic_dpcp 动态DPCP特性开关,当前仅支持Ulysses序列并行,且暂不支持encoder DP/interleaved offload
max_cp_size 集群支持最大的CP并行度, e.g. max_cp_size=4则并行组可为{dp4cp1,dp2cp2,dp1cp4}
max_seq_size 设定单卡可以计算的最大序列长度,e.g.最长视频为(23x1080x720)(fps,h,w)