2021/3/3

  • 阅读论文: PipeDream: Fast and Effiffifficient Pipeline Parallel DNN Training

    GPipe: Easy Scaling with Micro-Batch Pipeline Parallelism

  • 学习PyTorch分布式架构的使用

2021/3/2

  • 配置服务器环境,安装anaconda, pytorch, 导入torchgpipe。学习其使用
  • 翻译论文:**torchgpipe: On-the-fly Pipeline Parallelism for Training Giant Models**

2021/2/-2021/2/7

  • 1.查阅分布式深度学习的相关知识

    (在对分布式深度学习有一定了解后,再研读论文,有一定的思路。)

    ‘’它使用同步随机梯度下降和流水线并行的方式进行训练,适用于任何由多个有序的层组成的深度神经网络(Deep Neural Networks, DNN)。 Gpipe通过跨不同的加速器来分割模型,并自动将一小批训练示例划分成更小的批量。 该模型允许GPipe的加速器进行并行操作,最大限度地提高了训练过程中的可扩展性。‘’层序

    image-20210115040032282

    2.阅读论文–torchgpipe: On-the-flfly Pipeline Parallelism for Training Giant Models

    通过设置参数将一个计算划分为相同的几个小批次,实现并行。通过超参数调优,有效的将训练时间减少到一定大小的批次。

    文中解决的问题:

    每个分布式机器做完自己的任务,需要更新参数,用于同步网络参数。大量的参数需要同步时,可能会导致大量的通信负载

    image-20210115041557350

    1:

    ​ 不同任务所占据的CPU时间不定,可长可短,解决方法:引入确定性时间周期,给出任务总排序

    2:

    ​ 由于pytorch的特点是,需要时调用,用完即弃,所以不保存前向图逻辑,只保留计算梯度等参数。所以反馈时不一定会顺序正确,所以需要引入fork,join原语标注顺序

    3:

    ​ 出现双向同步的问题,导致使用不足,出现双方相互等待。所以需要使用非默认C UDA流来避免这个问题,这样副本就不会阻止计算,除非计算必须等待数据。

    4:

    ​ 考虑有些任务会跳过一些批次,所以放宽顺序执行,增加设计一个接口来跳过中间张量。

提出的问题

​ 不同批次的大小该如何划分以达到最优?

近期计划

1.开始在pytorch上实践torchpipe,尽早发现问题,解决问题。前期工作主要是实现torchpipe的思想,后期再进一步优化。

2.继续研读相关论文,正确理解其含义,误解的开始

介于假期不能线下开会,计划每两周开一次小会,将有关问题汇总和研究生学长讨论。