并行战略
正如和散布式一样,如何应用多设施和多配件也是很关键的一个环节。大模型训练也是如此,当初训练大模型离不开各种散布式并行战略,罕用的并行战略包含:
下图为其中一种算法,将一切的梯度分为五份,而后依照圆圈的模式流传(而不是广播数据)累加,直到每个GPU都成功一个局部的累加,而后再批量同步数据。
经过五次循环之后,每个GPU再将各自担任的那局部数据间接同步给其余显卡,防止屡次广播运算。
因为数据并行便捷易成功,运行最为宽泛。但是每张显卡都存储完整的模型,此时显存大小成为了瓶颈。例如若存在2张显卡,那么系统中就存在2份模型参数,假设有4张卡,那么系统中就存在4份模型参数,假设有N张卡,系统中就存在N份模型参数,而其中N-1份其实都是冗余。那么有新的方法来处置这个疑问没有,ZeRO就是其中的一种方法。
初识ZeRO
零冗余提升器(Zero Redundancy Optimizer,简称ZeRO)是一种用于大规模散布式深度学习的新型内存提升技术。ZeRO可以在一代GPU集群上训练具备100B参数的深度学习模型,吞吐量是最佳系统的吞吐量的三到五倍。它还为训练具备数万亿个参数的模型提供了一条明晰的门路,展现了深度学习系统技术的史无前例的飞跃。同时ZeRO也被集成到了DeepSpeed,它是用于减速散布式深度学习训练的高功能类库。
在搞分明ZeRO之前须要先明确在模型训练时刻,显卡的占用状况。普通而言,模型在训练的时刻会一直地降级参数,目前驳回的都是梯度降低法。而混合精度训练(mixed precision training)和Adam提升器基本上曾经是目前训练模型的标配。
Adam在SGD基础上,为每个参数梯度参与了一阶动量(momentum)和二阶动量(variance)1。混合精度训练,字如其名,同时存在fp16和fp32两种格局的数值,其中模型参数、模型梯度都是fp16,此外还有fp32的模型参数,假设提升器是Adam,则还有fp32的momentum和variance。
回过头来看看显卡中的数据分类,普通而言可以分为两类:
假定模型参数量为Φ ,则共须要2Φ+2Φ+(4Φ+4Φ+4Φ)=4Φ+12Φ=16Φ 字节存储空间。从这个统计中可以发现,其实Adam提升器占据了75%的空间。<若读者要微调3B的模型,那么则须要48B的空间!!!>
ZeRO是为了克制数据并行性和模型并行性的局限性,同时成功两者的好处。它经过在数据并后退程中对模型形态(参数、梯度和提升器形态)启动分区,而不是复制它们,从而消弭了数据并后退程之间的内存冗余。同时驳回灵活通讯方案在散布式训练设施之间共享必要的形态,以坚持数据并行性的计算粒度和通讯量。
如何来解读上图,蓝色就代表模型参数数Φ(若每个参数类型是FP16,则为2Φ字节),橙色代表模型梯度数Φ,K为提升器Adam的参数量系数,即KΦ。
在DeepSpeed的训练框架中, Pos对应ZeRO-1, Pos+g对应ZeRO-2, Pos+g+p对应ZeRO-3,而普通在消费中ZeRO-1就足够经常使用。
本文转载自,作者: