Open Ldpe2G opened 2 years ago
pipeline_parallel_size = 2 和 pipeline_num_layers = 4 这里为什么不相等?这两个分别表示什么意思?
pipeline_parallel_size = 2 和 pipeline_num_layers = 4 这里为什么不相等?这两个分别表示什么意思?
我知道了 pipeline_num_layers * pipeline_parallel_size = total_num_layers
pipeline_parallel_size = 2 和 pipeline_num_layers = 4 这里为什么不相等?这两个分别表示什么意思?
pipeline_parallel_size
对应 vit 的 pipeline-model-parallel-size
pipeline_num_layers
是参考 vit 的 num-layers
参数的设置,vit 有 12 层 EncoderBlock,流水并行是将 EncoderBlock 分组。swin 的话有些不同,它总共只有4层 BasicLayer,每层 BasicLayer 里面根据深度设置,会包含好几层的 SwinTransformerBlock,这里为了设置流水id的方便,我就直接将 pipeline_num_layers
设成4了,流水并行直接以 BasicLayer 分组。
本实验目的是,复现中兴那边遇到的流水并行训练精度问题:
中兴vit代码
https://github.com/Adlik/large_scale_training/tree/oneflow/swin_transformer
运行命令:
swin 复现
实验分支:
swin_clean_ldp_graph_libai_hybrid_parallel
参考上面 vit 的并行配置配置 swin ,将
tensor_parallel_size
和pipeline_parallel_size
按照vit的配置,配置成 4 和 2,训练前3个 epoch loss 正常下降,验证集精度正常,看起来能正常收敛。如果
tensor_parallel_size
和pipeline_parallel_size
都改成 1 就是数据并行,训练也是正常的。