深圳建设网站首页,做网站网站应该注意什么,企业商标图片大全,网架生产厂家联系方式9月12日#xff0c;淘天集团联合爱橙科技正式对外开源大模型训练框架——Megatron-LLaMA#xff0c;旨在让技术开发者们能够更方便地提升大语言模型训练性能#xff0c;降低训练成本#xff0c;并保持和LLaMA社区的兼容性。测试显示#xff0c;在32卡训练上#xff0c;相… 9月12日淘天集团联合爱橙科技正式对外开源大模型训练框架——Megatron-LLaMA旨在让技术开发者们能够更方便地提升大语言模型训练性能降低训练成本并保持和LLaMA社区的兼容性。测试显示在32卡训练上相比HuggingFace上直接获得的代码版本Megatron-LLaMA能够取得176%的加速在大规模的训练上Megatron-LLaMA相比较32卡拥有几乎线性的扩展性且对网络不稳定表现出高容忍度。 目前Megatron-LLaMA已在开源社区上线。 开源地址https://github.com/alibaba/Megatron-LLaMA 一、前言
大语言模型的卓越表现一次又一次地超出了人们的想象。 过去几个月LLaMA及LLaMA2向开源社区的全面放开使想训练一个自己的大语言模型的人们多了一种很好的选择。在开源社区中已有非常多的基于LLaMA产出的模型包括进行续训/SFT如Alpaca、Vicuna、WizardLM、Platypus、StableBegula、Orca、OpenBuddy、Linly、Ziya等和从零开始训练Baichuan、QWen、InternLM、OpenLLaMA的工作。 这些工作不仅在目前各种大模型能力客观评测榜单上表现卓越同时展现了在长文本理解、长文本生成、代码编写、数学求解等实用场景的优秀性能。更进一步业界出现了很多有意思的产品例如LLaMA结合Whisper的语音聊天机器人、LLaMA结合Stable Diffusion的绘画软件、医学/法律领域的辅助咨询机器人等。 尽管从HuggingFace上可以拿到LLaMA的模型代码但用自己的数据训一个LLaMA模型对个人用户或中小型组织并不是一件低成本且简单的工作。大模型的体积和数据的规模使得在普通的计算资源上无法完成有效的训练算力和成本成为严重的瓶颈。Megatron-LM社区的用户在这方面的诉求非常急迫。 淘天集团和爱橙科技在大模型应用上有着广阔的场景并在大模型高效训练上进行了大量投入。LLaMA的问世在数据处理、模型设计、微调及强化学习反馈调整方面给予了业界非常多的启示并帮助许多业务取得了新突破。因此为了回馈整个LLaMA开源社区促进中文预训练大模型开源社区的发展让开发者们能够更方便地提升大语言模型的训练性能降低训练成本淘天集团联合爱橙科技将部分内部优化技术开源发布了Megatron-LLaMA期望与每一位合作者、爱好者共建Megatron及LLaMA生态。 Megatron-LLaMA提供了一套标准的Megatron-LM实现的LLaMA并提供了与HuggingFace格式自由切换的工具方便与社区生态工具兼容。Megatron-LLaMA重新设计了Megatron-LM的反向流程使得无论在节点数较少需要开较大梯度聚合Gradient Accumulation, GA、或是节点数较多必须使用小GA的场景都能够取得卓越的训练性能。测试显示 在32卡训练上相比HuggingFace上直接获得的代码版本Megatron-LLaMA能够取得176%的加速即便是采用DeepSpeed及FlashAttention优化过的版本Megatron-LLaMA仍然能减少至少19%的训练时间。 在大规模的训练上Megatron-LLaMA相比较32卡拥有着几乎线性的扩展性。例如使用512张A100复现LLaMA-13B的训练Megatron-LLaMA的反向机制相对于原生Megatron-LM的DistributedOptimizer能够节约至少两天的时间且没有任何精度损失。 Megatron-LLaMA对网络不稳定表现出高容忍度。即便是在现在性价比较高的4x200Gbps通信带宽的8xA100-80GB训练集群这种环境通常是混部环境网络只能使用一半的带宽网络带宽是严重的瓶颈但租用价格相对低廉上Megatron-LLaMA仍然能取得0.85的线性扩展能力然而在这个指标上Megatron-LM仅能达到不足0.7。 二、Megatron-LM技术带来的高性能LLaMA训练机会
LLaMA是目前大语言模型开源社区中一项重要工作。LLaMA在LLM的结构中引入了BPE字符编码、RoPE位置编码、SwiGLU激活函数、RMSNorm正则化以及Untied Embedding等优化技术在许多客观和主观评测中取得了卓越的效果。LLaMA提供了7B、13B、30B、65B/70B的版本适用于各类大模型需求的场景也受到广大开发者的青睐。同诸多开源大模型一样官方只提供了推理版的代码如何以最低成本开展高效训练并没有一个标准的范式。 Megatron-LM是一种优雅的高性能训练解决方案。Megatron-LM中提供了张量并行Tensor ParallelTP把大乘法分配到多张卡并行计算、流水线并行Pipeline ParallelPP把模型不同层分配到不同卡处理、序列并行Sequence Parallel SP序列的不同部分由不同卡处理节约显存、DistributedOptimizer优化类似DeepSpeed Zero Stage-2切分梯度和优化器参数至所有计算节点等技术能够显著减少显存占用并提升GPU利用率。Megatron-LM运营着一个活跃的开源社区持续有新的优化技术、功能设计合并进框架中。 然而基于Megatron-LM进行开发并不简单在多卡机上调试及功能性验证更是十分昂贵的。淘天集团和爱橙科技推出的Megatron-LLaMA首先提供了一套基于Megatron-LM框架实现的LLaMA训练代码支持各种规模的模型版本并且可以很简单地适配LLaMA的各类变种包括对HuggingFace格式的Tokenizer的直接支持。因此Megatron-LLaMA可以很便捷地应用在已有的离线训练链路中无需进行过多的适配。在中小规模训练/微调LLaMA-7b和LLaMA-13b的场景Megatron-LLaMA能够轻松达到业界领先的54%及以上的硬件利用率MFU。 三、Megatron-LLaMA的反向流程优化
3.1 DeepSpeed ZeRO Stage-2 DeepSpeed ZeRO是微软推出的一套分布式训练框架有着非常深远的技术影响。DeepSpeed ZeRO Stage-2后文简称ZeRO-2是其中一项重要技术能够节约显存占用且不增加额外计算量和通信量。 如上图所示由于计算需要每个Rank都需要拥有全部的参数。但对于优化器状态而言每个Rank只需负责其中一部分即可不必所有Rank同时执行完全重复的操作。于是ZeRO-2提出将优化器状态均匀地切分在每个Rank上注意这里并不需要保证每个变量被均分或完整保留在某个Rank上每个Rank在训练进程中只负责对应部分的优化器状态和模型参数的更新。在这种设定下梯度也可以按此方式进行切分。 默认情况下ZeRO-2在反向时在所有Rank间使用Reduce方式聚合梯度而后每个Rank只需要保留自身所负责参数的部分既消除了冗余的重复计算又降低了显存占用。
3.2 Megatron-LM DistributedOptimizer 原生Megatron-LM通过DistributedOptimizer实现了类似ZeRO-2的梯度和优化器状态切分以减少训练中的显存占用。 如上图所示DistributedOptimizer在每次获得预设的梯度聚合过的所有梯度后通过ReduceScatter算子将之前累积的全部梯度分发到不同的Rank。每个Rank只获得自己需要处理的部分梯度而后进行优化器状态的更新和对应参数的更新。最后各个Rank通过AllGather的方式从其他节点上获取更新过的参数最终取得全部的参数。 实际训练的结果显示Megatron-LM的梯度和参数通信与其他计算串行进行对于大规模预训练任务为了保证总批数据大小不变通常无法开启较大的GA。于是通信占比会伴随机器增加上升这时候串行通信的特点导致扩展性很弱。在社区内这方面的需求也很迫切。 3.3 Megatron-LLaMA OverlappedDistributedOptimizer
为了解决上述问题Megatron-LLaMA改进了原生Megatron-LM的DistributedOptimizer使其梯度通信的算子能够可以和计算相并行。特别的相比于ZeRO的实现Megatron-LLaMA在并行的前提下通过巧妙的优化优化器分区策略使用了更具有具有扩展性的集合通信方式来提升扩展性。 OverlappedDistributedOptimizer的主要设计保证了如下几点 单一集合通信算子数据量足够大充分利用通信带宽 新切分方式所需通信数据量应等于数据并行所需的最小通信数据量 完整参数或梯度与切分后的参数或梯度的转化过程中不能引入过多显存拷贝。 具体而言Megatron-LLaMA改进了DistributedOptimizer的机制提出了OverlappedDistributedOptimizer用于结合新的切分方式优化训练中的反向流程。如上图所示在OverlappedDistributedOptimizer初始化时会预先给所有参数分配其所属的Bucket。Bucket中的参数是完整的一个参数仅属于一个Bucket一个Bucket中可能有多个参数。 逻辑上每个Bucket将会被连续等分成PP为数据并行组的数量等份数据并行组中的每个Rank负责其中的一份。Bucket被放置在一个本地队列Local grad bucket queue中从而保证通信顺序。在训练计算的同时数据并行组间以Bucket为单位通过集合通讯交换各自需要的梯度。Megatron-LLaMA中Bucket的实现尽可能采用了地址索引只在有需要值更改时才新分配空间避免了显存浪费。 上述的设计再结合大量的工程优化使得在大规模训练时Megatron-LLaMA可以充分使用硬件实现了比原生Megatron-LM更好的加速。从32张A100卡扩展到512张A100卡的训练Megatron-LLaMA在常用混部的网络环境中仍然能够取得0.85的扩展比。 四、Megatron-LLaMA的未来计划
目前Megatron-LLaMA在淘天集团和爱橙科技内部已有广泛的应用开源后团队也将持续维护推进。随着越来越多开发者涌入开源社区交流贡献相信未来在训练框架层面会有更多的挑战和机会。Megatron-LLaMA将会紧密关注社区的发展与广大开发者共同探索以下方向 自适应最优配置选择 更多模型结构或局部设计改动的支持 在更多不同类硬件环境下的极致性能训练解决方案 欢迎试用Megatron-LLaMA一起开启高效驯养LLaMA的精彩旅程 项目地址
https://github.com/alibaba/Megatron-LLaMA