• 深度学习框架中的并行


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

    (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。

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

  • 相关阅读:
    Exp5
    Exp4
    Exp3
    Exp02
    【TPM】tpm搭建基础指南
    20155316 Exp1 PC平台逆向破解(5)M
    个人早期写的一些组件
    关于spring @scope("prorotype") 和 @aspectj 一起用的问题
    ThreadLocal内存泄漏需要注意的
    Spring IoC 容器大概流程
  • 原文地址:https://www.cnblogs.com/JohnRan/p/15098238.html
Copyright © 2020-2023  润新知