libai
libai copied to clipboard
设置不同的data_parallel_size导致了不同的global_batch_size
问题描述
在libai的config文件里面,比如 bert_large_pretrain.py,为了控制并行模式,我加上了这么几行
train.dist.data_parallel_size=2
train.dist.tensor_parallel_size=1
作为一个用户,我觉得data_parallel_size是数据并行的维度,tensor_parallel_size是模型并行的维度,不管怎么设置他们,从全局上来看(或者说一致性视角下),模型是不会变的。
然而实际上,在global_batch_size留空(未设置train.global_batch_size)时,实际的
cfg.train.global_batch_size = (
train_micro_batch_size
* dist.get_data_parallel_size()
* cfg.train.num_accumulation_steps
)
这导致一个结果就是设置
train.dist.data_parallel_size=2
train.dist.tensor_parallel_size=1
与设置
train.dist.data_parallel_size=1
train.dist.tensor_parallel_size=2
的global batch size不一样,前者的batch size是后者的2倍。
用户诉求
作为一个用户,我希望说,我改变了并行的方式不会影响到我的模型。
所以我尝试去把 train_micro_batch_size 留空,我设置了
train.global_batch_size = 8
结果却是出了错,因为train_micro_batch_size 留空时会被默认设置为32.
我希望更多地从全局性的视角去配置这个参数,所以我更加想设置global_batch_size而不是train_micro_batch_size。 我希望train_micro_batch_size被留空时也能由global_batch_size推算出来(一个除法,不难)
开发者诉求
因为我不是用框架搞算法的专业人员,所以对行业内的默认规则了解得不够多,我不知道行业内是怎么设置batch size的,但是我觉得应该让用户知晓global_batch_size 跟 train_micro_batch_size 还有 data_parallel_size的关系,至少应该在说明文档里面有提及。 用户不需要知道太多,但是应该知道改变data_parallel_size会改变模型的batch size
设置data_parallel_size=2,tensor_parallel_size=1,gpu=2时也就是2卡数据并行,然后train_micro_batch_size=16的话,global_batch_size就是32,也就是32个batch的数据切两份,然后模型其实训练的是32batch_size的数据
设置data_parallel_size=1,tensor_parallel_size=2,gpu=2,train_micro_batch_size=16时也就是2卡模型并行,模型训练的数据其实是16的batch_size
一鹏的意思是让用户控制模型应该训练多大的batch,而不是设置每张gpu上的batch_size对吧
然后我跟程鹏确认了一下,我也查了一下pytorch的数据并行是直接给用户设置的global_batch_size,LiBai中是都可以设置,但是确实可以优化一下(设置global_batch_size时不设置train_micro_batch_size会出问题),感觉可以global_batch_size和train_micro_batch_size都默认为None,然后用户只设置一个参数的话就自动计算出另一个,都设置了的话就判断是否合理。
然后configs文件中的comment里已经给用户解释了这些关系,https://github.com/Oneflow-Inc/libai/blob/5d5acf9aa69ab5b5da8ae9d992dce4afe0d1964c/configs/common/train.py#L22。 document:https://libai.readthedocs.io/en/latest/tutorials/basics/Config_System.html?highlight=train#train
global_batch_size=8的时候设置一下train_micro_batch_size=None就好了
@Yipeng1994