nlp基础3-大模型的分布式训练Distributed training
pre
机器学习基础!请看
吴恩达机器学习复习1:监督学习、无监督学习、模型表示、损失函数、直觉Ⅰ、直觉Ⅱ、梯度下降及其直觉、线性回归的梯度下降 - asandstar - 博客园 (cnblogs.com)
吴恩达机器学习复习3:分类、假设的表示方法、决策边界、损失函数、简化的损失函数和梯度下降、梯度下降、高等优化、多级分类、正规方程式 - asandstar - 博客园 (cnblogs.com)
吴恩达机器学习复习4:非线性假设、神经和大脑、模型表示1、模型表示2、例子与直觉1、例子与直觉2、多类分类 - asandstar - 博客园 (cnblogs.com)
motivation
为什么需要分布式训练?
随着模型规模和参数量的增大,对硬件的要求也变大(算力、内存)。
现实困境是单一设备有内存墙
模型需要的运算量提高很快→需要研发AI硬件(提高硬件的峰值算力)→简化或者删除其他部分(例如内存的分层架构)
最新模型训练的瓶颈(特别是对 NLP 和 推荐系统相关模型):通信带宽瓶颈(芯片内部、芯片间还有 AI 硬件之间的通信)。
Transformer 类模型大小平均每两年翻240倍,而AI 硬件上的内存大小仅以每两年翻2倍的速率增长。
训练 AI 模型时候所需要的内存一般比模型参数量还要多几倍的原因:训练时候需要保存中间层的输出激活值,通常需要增加3到4倍的内存占用。
容量和数据传输的速度大大落后于硬件的计算能力。
内存墙问题不仅与内存容量大小相关,也包括内存的传输带宽,且涉及到多个级别的内存数据传输。
例如,在计算逻辑单元和片上内存之间,或在计算逻辑单元和主存之间,或跨不同插槽上的不同处理器之间的数据传输。AI 硬件之间会遇到通信瓶颈,甚至比片上数据搬运更慢、效率更低。
内存/硬件的互联带宽的增加速度几千倍落后于其峰值计算能力→分布式策略的横向拓展只在通信量和数据传输量很少的情况下才能解决计算密集的情况
回顾机器学习模型设计的基础问题
①之前的设计方法大都临时,或仅仅是参数放大规则,架构一致。
②需要更有效的方法训练,比如人学习时数据量较少,那么模型能不能做到呢?(可以调研一下小样本的学习的最新成果)。
③现有的超参数调整的训练方法会浪费大量算力成本,是否有更低成本的做法。
④SOTA网络规模巨大,(尤其是推荐系统)部署时充满挑战。大部分模型设计很少关注内存,而多关注算力。图神经网络受限于带宽,无法有效利用硬件。
部署
为了推理需要做分布式部署,可能的解决方案是降低精度/量化(训练或推理)或去冗余/剪枝(structured sparsity除去30%和non-structured sparsity除去70%)以压缩推理模型。
CPU 架构包含了充分优化后的缓存架构,带宽受限时,其性能优于GPU(GPU并行计算能力有高算力)。AI芯片为提高算力、增加计算单元,移除了一些诸如缓存的组件。
如果能平衡缓存、设计更高容量的DRAM,让不同层次有不同带宽,后者就对解决分布式通信瓶颈有很大的好处。
solution
解决算力增速不足问题→多节点集群分布式训练
现在把整个机器学习系统分解,对不同部分做并行,比如数据、模型、流水到最后是混合并行。
①数据切分,权重不变,最后合在一起
此时数据并行需要在反向传播时对各设备上梯度AllReduce Collective Operations — NCCL 2.19.3 documentation (nvidia.com)
performing reductions on data (for example, sum, min, max) across devices and writing the result in the receive buffers of every rank
数据集大、模型小的如计算机视觉里面resnet50适合数据并行
②权重切分,数据不变,最后合在一起
语言模型比如BERT就需要模型并行
③流水线切分,将网络切分为多个阶段,并发到不同设备,各个设备间接力
GPT4的并行训练方式 https://www.high-flyer.cn/blog/gpt-4/
terms
SOTA: state of the art 特定任务中目前表现最好的方法或模型
构建model的motivation是:超越现有的baseline/benchmark
benchmark: 当前目标最高的一个指标,如precision,recall等可量化的指标
baseline: 需要一套方法
心得
总的来说是针对目前模型训练和部署的许多问题,从多个方面比如数据、模型本身以及网络服务器/GPU等进行优化,之前是计算/算力,现在要考虑数据传输、搬运的延迟,也就是网络和存储方面存在的问题