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的加速器进行并行操作,最大限度地提高了训练过程中的可扩展性。‘’层序
2.阅读论文–torchgpipe: On-the-flfly Pipeline Parallelism for Training Giant Models
通过设置参数将一个计算划分为相同的几个小批次,实现并行。通过超参数调优,有效的将训练时间减少到一定大小的批次。
文中解决的问题:
每个分布式机器做完自己的任务,需要更新参数,用于同步网络参数。大量的参数需要同步时,可能会导致大量的通信负载
1:
不同任务所占据的CPU时间不定,可长可短,解决方法:引入确定性时间周期,给出任务总排序
2:
由于pytorch的特点是,需要时调用,用完即弃,所以不保存前向图逻辑,只保留计算梯度等参数。所以反馈时不一定会顺序正确,所以需要引入fork,join原语标注顺序
3:
出现双向同步的问题,导致使用不足,出现双方相互等待。所以需要使用非默认C UDA流来避免这个问题,这样副本就不会阻止计算,除非计算必须等待数据。
4:
考虑有些任务会跳过一些批次,所以放宽顺序执行,增加设计一个接口来跳过中间张量。
提出的问题
不同批次的大小该如何划分以达到最优?
近期计划
1.开始在pytorch上实践torchpipe,尽早发现问题,解决问题。前期工作主要是实现torchpipe的思想,后期再进一步优化。
2.继续研读相关论文,正确理解其含义,误解的开始
介于假期不能线下开会,计划每两周开一次小会,将有关问题汇总和研究生学长讨论。