近些年随着模型参数量的增大以及预训练语料的增长,单个模型的训练规模越来越大,消耗的成本越来越大, 尤其是2020之后,大型语言模型的兴起,将包括自然语言处理、计算机视觉、跨模态等场景带进了超大规模的军备竞赛中,但是就目前的硬件设计以及分布式通信所限,集群整体利用率较低。大规模分布式训练效能的提升是一个非常有意义的课题,值得深入研究:
01
模型精度持续提升
作为早期的尝试,ELMo\cite{sarzynska2021detecting} 被提出通过首先预训练双向LSTM网络,根据特定的下游微调 双向LSTM网络来捕获上下文感知的单词表示。此外,基于具有自注意力机制的高度并行化的Transformer架构\cite{vaswani2017attention},通过在大规模未标记语料库上使用专门设计的预训练任务来预训练双向语言模型,提出了BERT。这些预先训练的上下文感知单词表示作为通用语义特征非常有效,这在很大程度上提高了自然语言处理任务的精度标准。这项研究启发了大量的后续工作,它设定了“预训练和微调”的学习范式。遵循这一范式,已经开展了大量关于预训练语言模型的研究,通过引入了不同的架构 (例如GPT-2\cite{radford2019language}和BART\cite{lewis2019bart})或改进的预训练策略\cite{liu2019roberta}\cite{sanh2021multitask}\cite{wang2022language}。在此范式,通常需要微调预训练语言模型(PLM)以适应不同的下游任务。
研究人员发现,扩展预训练(例如扩展模型参数量或预训练语料大小)通常会提高下游任务的模型能力(即遵循扩展定律,\cite{kaplan2020scaling})。许多研究者通过训练更大的预训练模型(例如175B参数GPT-3和540B 参数 PaLM)来探索精度上限。尽管模型的基础架构并没有变化, 这些更大规模预训练模型显示出相对于小型的预训练模型(例如 330M 参数 BERT和1.5B参数GPT-2)截显示出令人惊讶的能力, 并号称能解决一系列复杂任务的新兴能力(emergent abilities)\cite{wei2022emergent}。例如GPT-3可以通过上下文学习解决小样本类任务(few-shot task),而GPT-2则不能做得很好。因此,研究者专门为这些大型预训练创造了术语“大型语言模型(Large Language Model)”\cite{shanahan2022talking}。
大型语言模型的一个典型应用是ChatGPT\cite{chatgpt},ChatGPT基于GPT系列的大型语言模型构建智能对话系统,在2022年11月推出后,仅仅5天就获得100万用户,2个月后,突破1亿用户;
ChatGPT让研究者进一步理解到大型语言模型极限元没有达到:尽管大型语言模型在广泛的自然语言任务中表现出了卓越的能力,但是这些大语言模型有时可能会表现出意想不到的行为,例如捏造虚假信息、追求不准确的目标以及产生有害、误导和偏见的表达\cite{ouyang2022training}\cite{kenton2021alignment}。对于大型语言模型来说,语言建模目标通过单词预测来预训练模型参数,而缺乏对人类价值观或偏好的考虑。为了避免这些意外行为,有人提出人类对齐(alignment)\cite{sanh2021multitask},以使大型语言模型的行为符合人类的期望。然而,与最初的预训练和微调(例如,指令微调)不同,这种对齐需要考虑非常不同的标准(例如,有用性、诚实性和无害性)。研究表明,对齐可能会在一定程度上损害LLM的综合能力,相关文献中将其称为”对齐税“\cite{askell2021general},但是考虑到安全、伦理等社会因素, 对齐税更适合应用到实际当中。而其中OpenAI使用人类反馈强化学习 (RLHF) 训练该模型,使用与InstructGPT\cite{ouyang2022training}相同的方法,能够有效地对齐人类的真实行为,使得ChatGPT的交互更像“人类”,其训练流程主要包括以下:
- 基于海量语料预训练大型语言模型;
- 根据标注的SFT数据集对步骤1中得到的大型语言模型进行有监督的微调(Supervised FineTune,SFT);
- 收集人工标注的对比数据,训练奖励模型(Reword Model,RM);
- 使用RM作为强化学习的优化目标,利用PPO算法微调SFT模型;
02
模型精度提升引入的算力需求提升
使用超大规模的预训练模型以及在实际使用中对齐人类需求,会引入极大的算力消耗。早在2012年,AlexNet\cite{krizhevsky2012imagenet}因为单卡GPU性能瓶颈, 使用两张GTX 580 3GB GPU用来解决FC曾参数与计算量过大的问题。而到今天,大多数具有影响力的人工智能模型都是在多个GPU上训练的,尤其是最近火热的大型语言模型, 其参数规模从数十亿到千亿\cite{sevilla2022compute}以上,并且在相关的benchamark上指标稳定提升:
模型精度提升另一个因素来自于训练中使用更大规模的数据集。从引领深度学习尤其是计算机视觉浪潮的的ImageNet\cite{deng2009imagenet}、MSCOCO\cite{lin2014microsoft}等为代表的图像分类、目标检测数据集到如今跨模态文生图场景的Laion-5B\cite{schuhmann2022laion}等十亿级别的图文对数据集,而在自然语言领域,Common Craw\cite{common_crawl}, WebText2\cite{gao2020pile}, BookCorpus\cite{Zhu_2015_ICCV}, Wikipedia\cite{wikidump}等预训练语料更是达到万亿级别tokens。更大规模参数量的模型使用更大规模的语料,分布式训练对于算力的要求越来越大, 下图中统计1952-2022年的里程碑式的机器学习系统所消耗的算力需求\cite{sevilla2022compute}:
尤其是2010年之后,得益于Transformer\cite{vaswani2017attention}、分布式机器学习系统以及自监督学习\cite{liu2021self}的发展, 在自然语言处理领域,通过对大量未标注的文本语料进行随机掩码以获得高达万亿级别的tokens\cite{touvron2023llama}的海量低成本语料,Transformer高效的计算性能以及基于Transformer的诸如Bert\cite{devlin2018bert}、GPT\cite{radford2018improving}、LLaMA\cite{touvron2023llama}、GLM\cite{du2022glm}等模型架构的可扩展性,如上图, 里程碑式的模型训练系统在算力的需求上增长十分迅速,详细数据见上:
Meta开源的LLAMA 2\cite{touvron2023llama} 在其研究超级集群 (RSC)以及内部生产集群上对模型进行了预训练。其配置均使用NVIDIA A100,关键区别在于前者使用NVIDIA Quantum InfiniBand,而后者基于商用以太网交换机的RoCE(融合以太网上的 RDMA)解决方案,单次训练的GPU机时及碳排放量见下表:
03
计算加速设备利用率普遍较低
如下表所示,在不同规模参数的模型配置下,Deepak Narayanan在\cite{narayanan2021efficient},能做到单卡有效算力135TFLOPS-163TFLOPS,有效率用率43%-52%。直观上来看, 相对于Nvidia A100 312TFLOPS FP16的理论性能,还是有比较大的上升空间。同样在LLAMA 2\cite{touvron2023llama}中,7B-70B的模型在2000B的预训练tokens上训练,其需求的理论算力(即不包含recompute等trick带来的额外算力需求),可按以下公式预估其理论算力需求:
而真实训练的GPU使用机时见商标,可以很容易计算出下表,在LLAMA 2不同参数规模下的模型训练的单卡有效算力及利用率:
造成单卡利用率较低的原因,主要包括以下几个方面:
- 模型进行并行计算中存在很多较多串行,根据Amdahl定律\cite{Amdahl_law},整体并行程度相对一般无数据依赖任务天然较低;
- 单显卡显存与算力有效,不可能将模型完全载入到一张卡或者一台GPU主机,需要引入并行计算,对模型拆分到不同的节点以及GPU上,会额外增加通信,而这部分通信通常是同步操作,会引入较多的等待时间,很难被隐藏;
- 计算层面过多较小的kernel、kernel本身的计算访存比、不同显存的layout、以及访问密集型算子与计算密集型算子的合理编排;
- 单次预训练模型成本过高,很难完全在单次模型上通过常规的超参调优的方式,对分布式策略、kernel融合策略、甚至硬件配置完全实验以达到极限性能;
- 以A100单卡月故障率8%,计算单卡每天故障率约为0.27%,对于512卡训练任务来说,每天由于卡故障而导致训练不可进行的概率是75%,如果是1024卡训练,则为93.7%,如此高的任务失败率,极其影响单卡有效算力的提升;
04
效能提升带来很多好处
大规模分布式机器学习的效能提升对于经济、碳排放以及模型创新与标准化均有很多的意义:
效能提升减少经济投入
大规模分布式机器学习的效能提升,从而节省时间和资源成本,以Meta LLAMA 2 70B单次训练为例, 其GPU机时为1720320。考虑到构建数据中心成本过高,采用云计算服务,租用GPU机器, 以单A100定价20元/hour(因近期价格变化较大,取均值),整体成为约为约为3440万。从效能提升角度来看,每提升1个百分点,单次训练成本降低接近34万。
效能提升减少碳排放量
以Meta LLAMA 2 70B单次训练为例, 其碳排放量约为291吨,按照美国人均16.1/中国6.8吨年均排放量,约为18.2/42.8个美国/中国人的碳排放量。以每棵树每年固碳12千克, 需要额外种植2.4万棵树才能保证一年内完全吸收单次Meta LLAMA 2 70B训练的碳排放量。
效能提升有助于模型创新与标准化
大规模分布式训练效能的提升,为研究人员和开发者提供了更强大、更高效的工具和平台,更快速地推动模型创新和相关领域研究的进展。在低成本、高效率的技术体系架构下,能够加速人工智能产品化的迭代,提升国家在人工智能领域的话语权。
05
效能提升是涉及多门技术类别的方向
而对于研究者而言, 大规模分布式机器学习的效能提升是一个设计多门技术类别的方向,有很多的探索空间:
效能促使人工智能算法进化
Transformer架构\cite{vaswani2017attention}已成为自然语言处理和图像分类等应用中使用最广泛的架构。当由Transformer构成的模型,变得越来越大和越来越深时,因为self-attention的时间复杂度和空间复杂度与序列长度成二次方,模型的计算和存储需求越来越具有挑战性。
很多相关的attention的优化方法用来减少模型的时间与空间复杂度, Nikita Kitaev等在\cite{kitaev2020reformer}将点积注意力替换为使用局部敏感哈希的注意力,将其复杂度从 更改为,其中是序列的长度,并且使用可逆残差层而不是标准残差,在层transformer模型中, 仅保存一份激活值,而非个。Aurko Roy等在\cite{roy2021efficient}中的工作提出基于学习的动态稀疏注意力模式Routing Transformer,避免分配计算和内存来关注与感兴趣的query无关的内容。这项工作建立在两条研究基础上:它将先前基于内容的稀疏注意力的建模灵活性与基于局部、时间稀疏注意力的方法的效率增益结合起来。Routing Transformer将整体attention的复杂度从降低为。choromanski在\cite{choromanski2020rethinking}提出Performers, 被证明在仅使用线性空间和时间复杂度,其精度能够近似于经典Transformer,并且不依赖于数据的任何先验,例如稀疏性或低秩性。其核心创新点在于将传统Transformer架构中的softmax attention的kernel替换为通过正交随机特征(Postive Orthogonal Random Feature)。
而Tri Tao的FlashAttention系列\cite{dao2022flashattention}\cite{dao2023flashattention}提出一套基于IO感知精确注意力计算方法,从工程实现角度而非近似算法:使用tiling的实现,来减少 GPU 高带宽内存(HBM)和GPU片上SRAM之间的内存读/写次数,其主要贡献在于通过引入tiling的思想来改良softmax的实现以达到大大增加其计算效率,尤其是超长序列下,能够有效减少显存使用,并且提升计算效率。Bo peng等在\cite{peng2023rwkv}提出RWKV(Receptance Weighted Key Value),能同时拥有RNN和Transformer的优势,在线性复杂度下能达到与GPT近似的表现。
效能提升是分布式训练的终极目标
深度学习模型通常使用一系列层构建并通过多次迭代进行训练。典型的DNN训练步骤涉及前向传递(FP)和后向传递(BP)。随着Transformer结构的灵活性和可扩展性,基于Transformer的模型持续快速增长,并刷新了精度记录。为了减少训练时间以及支持更大参数量模型,可以将训练分布在具有不同规模的特定并行策略的设备之间。通过结合数据并行、流水性并行和张量并行,成为大型语言模型的SOTA分布式训练方法。
**数据并行(DP)**是分布式训练的最常见方法,其中不同worker的数据保持独立,而每个worker持有完整的模型副本并执行集合通信,例如 AllReduce,以一定的时间间隔同步模型。单个GPU显存有限,无法容纳非常大的模型。DeepSpeed的ZeRO\cite{rajbhandari2020zero}通过在所有worker划分模型不同的状态来优化显存冗余,从优化器状态、梯度、参数三个层级以达到不同的显存节省策略。ZeRO-Offload\cite{ren2021zero}、ZeRO-Infinity\cite{rajbhandari2021zero} 和 PatrickStar\cite{fang2022parallel}进一步将内存交换到内存和NVMe,他们通过引入通信量来扩展单个GPU的模型容量。然而,随着模型大小的增加,通信的增加限制了训练性能。
**流水线并行(PP)**将模型拆分为子模块,并将它们分散到不同的stage中。考虑到GPU利用, batch数据还被分成micro-batch中执行,以提高设备利用率并减少通信。流水线并行分为异步流水线并行和同步流水线并行 其区别在于更新模型参数时,是否保证版本一致,异步并行方法如pipedream\cite{narayanan2019pipedream},hetpipe\cite{park2020hetpipe}的优势在于性能以及较高的资源利用率,但是会引入不确定的精度问题;GPipe\cite{huang2019gpipe}提出一个优化的同步流水线调度并, DAPPLE\cite{fan2021dapple}和Megatron-LM\cite{narayanan2021efficient}采用优化后的的流水线调度来减少激活内存的使用并且进一步减少气泡时间占比。Hippie\cite{ye2021hippie}利用气泡进行半步延迟参数更新的通信,进一步减少气泡占比,而Chimera\cite{li2021chimera}通过增加部分显存占用使用双向管道进一步提高GPU利用率,减少气泡占比。
**张量并行(TP)**与流水线并行划分模型层纬度不同,张量并行将各个层或某个运算拆分到多个计算设备中。Megatron-LM\cite{shoeybi2019megatron}分析基于Transformer的架构,沿行或列维度切分模型参数矩阵,增加AllReduce通信操作以确保正确性;SageMaker\cite{karakus2021amazon}通过Reduce-Scatter实现更高效的内存解决方案。\cite{xu2023efficient}提出了 Optimus,一种高效且可扩展的2D模型切分范式,以支持超大规模语言模型的训练;
选择性重计算,activations是前向计算的中间输出,在反向计算时使用,用于梯度计算。activations recomputation\cite{chen2016training}不保存ativation,而是在反向计算时重新计算它们。尽管这种方法的时间开销增加了约30%,但它可以节省大量的显存占用以支持使用更大的micro-batch进行训练。一系列减少增加时间开销的工作\cite{korthikanti2023reducing}主体想法都差不多,通过去选择性地计算显存占用大但是FLOPS较低的部分,来尽可能保证显存减少更多的前提下,降低带来的额外时间开销;
大规模分布式优化器,Tang, Hanlin等的1-bit adam\cite{tang20211}提出1-bit Adam,它可以将通信量减少多达5倍,提供更好的可扩展性,并保证几乎与原生Adam相同的收敛速度。其主要创新点在于Adam方差(非线性项)在训练过程中变得稳定,因此,可以在开始(预热阶段)运行 Adam,而后退化为Momentum SGD,减少optimizer state带来的显存与通信占用;Li, Conglong等的\cite{li20221}将超大batch-size优化和通信压缩的结合起来,设计一种新的支持压缩下自适应层学习率通信高效算法;
人工智能编译器
Alpa\cite{zheng2022alpa}核心目标是大规模分布式训练的自动化并行,通过分布式视为intra-operation和inter-operation, 将大规模分布式问题建模intra-operator和inter-operation的策略规划问题。其主要工作在于:
- 将分布式训练问题,抽象为构造intra-operation和inter-operation的执行计划;
- 通过设计合理的评估标准,设计易于处理的优化算法,推理出接近最优的执行计划;
- 如下图在统一IR上实现GPU集群上的分布式深度学习的编译器系统。Alpa具有以下特性:1. 采用分层优化算法生成执行计划的编译优化pass函数;2. 一种新的运行时架构,可协调计算设备如GPU和网络通信之间的操作间并行性;3. 一系列可提高性能的系统优化;
目前基于人工智能编译器的大规模分布式训练的工作还在初级阶段, 如alpa相关,目前仅能考虑静态相关的信息,如模型结构、集群网络配置,而在一些动态的配置以及更复杂的系统因素,如显存、共享网络,还未考虑,这部分工作学术界还在持续迭代中。
分布式系统监控与自动化运维
如前表所述,在超大规模分布式系统中,故障率极高。为了保障训练的正常进行,一套好的监控系统能极大地提升训练的稳定性,提升集群训练任务的有效算力,如\cite{DLRover},DLRover能够帮助模型开发人员专注于模型架构,而无需关心硬件加速、分布式运行等任何工程内容:
- 容错,单节点故障转移,无需重新启动整个作业;
- 自动扩展,在节点级别和CPU/内存级别自动扩展/缩减资源;
- 动态数据分片,动态调度训练数据到每个worker而不是均分,为不同处理数独的worker制定不同的训练数据计划;
- 自动资源优化,自动优化作业资源,提高任务整体的训练性能和资源利用率
当然,目前的自动化运维还在故障发生后处理,整体成本还是较高,目前我们团队正在进行一些更细粒度的profile的工作,期待后续能够适配在大规模分布式训练运行时,提前预警资源故障,以减少资源空闲率。
06
人工智能伦理与安全
人工智能的伦理与安全是一个十分重要的话题,国家新一代人工智能治理专业委员会\cite{ai_specification}提出从事人工智能管理、研发、供应、使用等相关活动的自然人、法人和其他相关机构等应该严格遵守
- 增进人类福祉。坚持以人为本,遵循人类共同价值观,尊重人权和人类根本利益诉求,遵守国家或地区伦理道德。坚持公共利益优先,促进人机和谐友好,改善民生,增强获得感幸福感,推动经济、社会及生态可持续发展,共建人类命运共同体;
- 促进公平公正。坚持普惠性和包容性,切实保护各相关主体合法权益,推动全社会公平共享人工智能带来的益处,促进社会公平正义和机会均等。在提供人工智能产品和服务时,应充分尊重和帮助弱势群体、特殊群体,并根据需要提供相应替代方案;
- 保护隐私安全。充分尊重个人信息知情、同意等权利,依照合法、正当、必要和诚信原则处理个人信息,保障个人隐私与数据安全,不得损害个人合法数据权益,不得以窃取、篡改、泄露等方式非法收集利用个人信息,不得侵害个人隐私权;
- 确保可控可信。保障人类拥有充分自主决策权,有权选择是否接受人工智能提供的服务,有权随时退出与人工智能的交互,有权随时中止人工智能系统的运行,确保人工智能始终处于人类控制之下;
- 强化责任担当。坚持人类是最终责任主体,明确利益相关者的责任,全面增强责任意识,在人工智能全生命周期各环节自省自律,建立人工智能问责机制,不回避责任审查,不逃避应负责任;
- 提升伦理素养。积极学习和普及人工智能伦理知识,客观认识伦理问题,不低估不夸大伦理风险。主动开展或参与人工智能伦理问题讨论,深入推动人工智能伦理治理实践,提升应对能力
人工智能开发者必须从技术手段上保证人工智能安全可控,才更好地促进人工智能更多领域的推进, 达到百花齐放的效果。而人工智能安全与伦理涉及到人工智能、心理学、法律与社会学等多个方面的交叉学科,各方在该领域的投入极大,其中从技术角度的矛与盾,以LLM为代表的人工智能的矛技术的增长必定保证安全可控的盾持续的投入,而效能的提升将极大地减少投入的成本。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
![](https://img-blog.csdnimg.cn/img_convert/0dc35641cd2d85e39db6e8cb368fa5cb.png)