Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我们真的需要模型并行(MP)么? #13

Open
feifeibear opened this issue Aug 17, 2021 · 5 comments
Open

我们真的需要模型并行(MP)么? #13

feifeibear opened this issue Aug 17, 2021 · 5 comments
Labels
documentation Improvements or additions to documentation

Comments

@feifeibear
Copy link
Collaborator

feifeibear commented Aug 17, 2021

MP的风潮是Megatron-LM引入到PTM训练中的,通过对transformer的实现插入定制的集合通信操作,实现了模型切分。
模型并行有很多诟病,

  1. 在FWD和BWD都有大量的activations全局通信,通信量和batch size成正比。不仅通信量大于DP,还限制了batch size从而限制MP训练的计算负载规模,影响了计算性能(越大batch计算效率越高)。
  2. MP需要对model定义代码进行定制修改。因此DeepSpeed的Example中也是在Megatron-LM基础上改的。有一些工作尝试简化这个修改工作,比如Mesh-TensorFlow和阿里巴巴的Whale,PyTorch似乎没有相关工作。如果从刷性能角度,这样并无大碍。如果从使用角度,算法同学不会接受的,因为推理端的代码还需要把自定义并行算子转化成PyTorch串行的。
  3. 在HP(异构并行),MP,PP,DP等组合下,MP的用法已经非常局限,并有被替代之势。DeepSpeed吧MP被安排在节点内并行,PP和DP用在节点间。HP+DP的引入,让GPU内存墙被进一步打破,模型并行的主要优势正在被HP和ZeroDP代替,以后节点内是否继续用MP都不一定。

MP and PatrickStar

在PatrickStar中,显存的最大消耗量和chunk size有关,即使不使用异构存储空间,把所有chunk都放在gpu中,model data的尺寸也是原来的1/N,和MP消耗类似。PatrickStar和PP兼容即可,不需要兼容MP。
之前Zero-Offload会去兼容MP,这是很奇怪的。阅读代码,我觉得是因为Zero3的通信用了非常差的设计,需要临时在gpu分配world_size*tensor_numel大小的临时buffer,加上预取的存在,可能同时分配了多个这样的buffer,尤其对于embedding layer这种大参数层,可能会爆炸内存,因此需要用MP减少单个进程的tensor_numel。

@zhuzilin
Copy link
Collaborator

模型并行这里我认同您的观点。Mesh-Tensorflow 这样的方案会比较难推给用户,可能短期内只需要有 Megatron-LM 的那种针对 transformer 的切分方式就够了。

不过最后的 chunk 那里的 1/n 我没太懂,是说每个参数都切分完放在各自进程内的 chunk 中,在使用的时候先 allgather 吗?

@feifeibear
Copy link
Collaborator Author

模型并行这里我认同您的观点。Mesh-Tensorflow 这样的方案会比较难推给用户,可能短期内只需要有 Megatron-LM 的那种针对 transformer 的切分方式就够了。

不过最后的 chunk 那里的 1/n 我没太懂,是说每个参数都切分完放在各自进程内的 chunk 中,在使用的时候先 allgather 吗?

是的,我觉得用zeroDP没必要用MP了。当然很多人不一定认同,还有很多人靠N-D并行吃饭

@zhuzilin
Copy link
Collaborator

嗯,这个主要考虑需求吧。如果需求就是单纯的垒 transformer 最多能垒多少,那 MP 还是有优势的,毕竟只有 MP 可以拆分参数部分。但是如果考虑的是一般用户的应用,zeroDP 即插即用,要方便太多了

@zhuzilin
Copy link
Collaborator

其实我觉得派大星和 MP 也不是矛盾的...用派大星劫持一下 Megatron-LM 的存储,不就相当于完成了 MP 了吗?所以我感觉和 deepspeed 中的 zero 一样,派大星的功能也是可以和 Megatrol-LM 这样的方案正交的。(可能额外需要把 allgather 改成 chunk 的 allgather 就是了)

@feifeibear
Copy link
Collaborator Author

feifeibear commented Aug 17, 2021

加MP从实现角度肯定是没问题的,但是我们要考虑性价比的问题,在足够的人力和时间下,我们肯定也会把4D,5D都做出来。
我们现在任务是要梳理出一个优先级,把精力优先投入到最优利于用户使用性能提升的技术上。

我觉得MP很鸡肋,我刚刚用DeepSpeed跑了一些实验结果
可以观察6B mp2的数据,和DP对比,性能下降很严重
【腾讯文档】PatrickStar_V100_profiling
https://docs.qq.com/sheet/DYWhORUNtREd1aGt0

@feifeibear feifeibear added the documentation Improvements or additions to documentation label Aug 30, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants