ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深度学习框架中的并行

2021-08-04 12:02:08  阅读:246  来源: 互联网

标签:深度 框架 模型 gather 并行 通信 算子 流水线


深度学习框架中的分布式通信算子和并行训练

(1)首先要了解有哪些并行的种类。

(a)数据并行

(b)层内模型并行,这里有Fully Connected模型并行,Group Convolution并行等等。

(c)层间模型并行,这里包括一些流水线并行,,手动checkpoint和GPipe的知识。

(2) 常见的通信算子

首先要知道,集合通讯(Collective communication)有一对多,多对多。还有点对点通信,Point-to-Point通信。这些通信算子都是求导完备的通信算子。

a. broadcast, one sender, multiple receiver。

b. reduce,combine data from all senders。

c. all-reduce, Combine data from senders, deliver the result to all participant.

d. gather, multiple sender, one receiver

e. all-gather,gather messages from all, deliver messages to all participants.

f. all-to-all, a transpose. internal implementation is complex. 原本是数据切分,现在可以编成模型切分。

g. scatter, inverse to gather.

h. all scatter.

(3)介绍一下简单参数并行。

首先,数据并行就是,模型复制多次,拆分数据。现在的简单参数并行就是拆分模型,在需要进行线性操作之前,用all-gather收集信息。在反向传播之前进行一次reduce-scatter。

数据并行和模型并行的区别。数据并行在进行操作的时候(只针对前向来说),是不需要通信的。比如矩阵乘可以一直往前面走,而模型并行需要一次all-gather。

层内模型并行。

如何实现由模型并行到数据并行的转换呢?就是一个比较重要的算子的功能了。all-to-all。all-to-all配合上all-gather就可以实现模型的各种并行操作了。

场景一:

Fully Connected模型并行。在人脸场景下,由于feature只有1k左右,但是由于人的id众多,可能到几百万,所以最后一层模型就上G。为了handle这种情况,肯定是要模型并行的。如果觉得之后比较难算loss,可以进行一次all-to-all,但是实际上是不需要的,这里涉及到一个softmax函数的性质(我不会)。

场景二:

group convolution:

组卷积,其实只需要一次通讯,所以可以判一次开头和结尾。

流水线并行(Pipeline Parallelism)

由于在原来的流水线中,只有等上一块卡做完之后,下一块卡才能开始工作,这显然是不怎么科学。所以就可以把数据拆一拆,算一个部分之后,立马交给下一张卡去进行计算。

手动checkpoint与Gpipe。

在流水线并行的这个过程当中,由于在反向传播的时候可能需要保留中间结果,这意味着更多的显存占用。所以可以设计一个策略,在需要进行反向传播的时候,我们再重新进行一次前向传播。

标签:深度,框架,模型,gather,并行,通信,算子,流水线
来源: https://www.cnblogs.com/JohnRan/p/15098238.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有