起初为调用大规模的模型训练,单卡GPU是不够使用的,需要借用服务器的多GPU使用。就会涉及到单机多卡,多机多卡的使用。在这里记录一下使用的方式和踩过的一些坑。文中若有不足,请多多指正。
由于分布式的内容较多,笔者准备分几篇来讲一次下深度学习的分布式训练,深度学习的框架使用的是Pytorch框架。
----1.分布式训练的理论基础
----2.GPU训练
----3.单机多卡的使用 DP,DDP
----4.多机多卡的使用 DDP
分布式训练的需求和重要性不需要多说,最近新提出的预训练模型,普通的16G的显存已经不足以支撑深度学习模型训练的要求了,这时候就需要用到分布式训练来提高效率。
总的来说,分布式训练分为这几类:
按照并行方式来分:模型并行 vs 数据并行
按照更新方式来分:同步更新 vs 异步更新
按照算法来分:Parameter Server算法 vs AllReduce算法
模型并行VS数据并行
假设我们有n张GPU:
- 模型并行:不同的GPU输入相同的数据,运行模型的不同部分,比如多层网络的不同层;
- 数据并行:不同的GPU输入不同的数据,运行相同的完整的模型。
当模型非常大,一张GPU已经存不下的时候,可以使用模型并行,把模型的不同部分交给不同的机器负责,但是这样会带来很大的通信开销,而且模型并行各个部分存在一定的依赖,规模伸缩性差。因此,通常一张可以放下一个模型的时候,会采用数据并行的方式,各部分独立,伸缩性好。
同步更新VS异步更新
对于数据并行来说,由于每个GPU负责一部分数据,那就涉及到如果更新参数的问题&#