给大家带来一篇基座模型的最新综述,如果你喜欢这篇综述,此处是论文地址,欢迎引用本文。
论文题目:Training and Serving System of Foundation Models: A Comprehensive Survey
论文地址:https://arxiv.org/pdf/2401.02643
引用格式:
Zhou, Jiahang, Yanyu Chen, Zicong Hong, Wuhui Chen, Yue Yu, Tao Zhang, Hui Wang, Chuanfu Zhang, and Zibin Zheng. “Training and Serving System of Foundation Models: A Comprehensive Survey.” arXiv preprint arXiv:2401.02643 (2024).
(ps:有一些概念需要科普一下,后续我修改处理一下)
在人工智能领域,基座模型(例如ChatGPT、DALL-E、鹏城云脑、盘古-Σ等)已经在自然语言处理和视觉识别等关键技术领域展现出了非凡的性能,并逐渐成为人工通用智能的主流趋势。随着越来越多的科技巨头投入巨量的人力和物力资源积极发展自身的基础模型系统,这些模型的参数规模也在持续增长。然而,这种增长给模型的训练和服务带来了显著挑战,包括对计算能力、内存消耗和带宽需求等方面的重大需求。因此,采用高效的训练和服务策略显得尤为关键。
众多研究者已经积极探索并提出了有效的方法应对这些挑战。鉴于此,本文进行了全面的调研,对这些方法从不同角度进行了深入探讨,并提供了包含网络、计算和存储等更细致方面的最新方法分类。此外,文章总结了当前面临的挑战,并对基础模型系统未来的发展方向提出了展望。
通过全面的讨论和分析,本文旨在为未来的研究和应用提供坚实的理论基础和实践指导,以促进基础模型系统的持续创新与发展。
关键词:Foundation Model System, Training, Serving, Network, Computing, Storage
随着深度学习技术的结合和强大的计算能力的推动,我们正步入基础模型时代,这一时代标志着人工智能的飞速发展。然而,基础模型的成功应用离不开系统层面的全面支持。一个高效的基础模型系统,不仅需要海量的训练数据、先进的模型、高性能的计算资源,还需要精心优化的训练和服务算法。这样的系统设计是为了处理复杂任务,并极大提高精确度,例如GPT-3、LLaMA、盘古-Σ、鹏城云脑等。
基础模型在众多任务中展现出惊人的性能,促使越来越多的科技巨头投入大量的人力和财力积极发展自己的基础模型系统,从而不断增加模型的参数规模。但随着基础模型系统的参数规模不断扩大,训练和服务阶段的挑战也日益凸显。在训练阶段,巨大的参数规模带来了对计算和存储的巨大需求,对硬件资源和计算效率造成了极大的压力。因此,训练这些模型通常需要很长时间,并要求高效利用计算资源。在服务阶段,随着基础模型的广泛应用,工作负载的显著增加成为不可避免的挑战,这可能导致服务系统出现延迟、性能下降或资源瓶颈的问题。
因此,采用高效的训练和服务策略变得尤为关键。许多研究者已经积极探索并提出了有效的方法,但不同的方法有不同的应用场景。对系统开发者来说,如何识别出最适合自己问题的方法是一个挑战。正是基于这一挑战,本文应运而生。
尽管已有一些关于基础模型的综述研究,但大多数研究主要集中在模型设计和下游任务的适应性上,只有少数涉及基础模型的训练。然而,这些以训练为中心的综述存在两个明显的不足:首先,它们缺乏从网络更新、计算和存储的角度进行深入探索;其次,它们主要强调训练阶段,忽略了服务阶段的考量。
因此,对基础模型训练和服务方法进行全面的综述对于系统开发者和研究人员至关重要。本文提出了对这一领域的最新方法的深入分析。通过全面的分析和比较,本文为系统开发者和研究人员提供了宝贵的信息,帮助他们在面临基础模型系统相关挑战时做出正确的决策。
基础模型系统的生命周期(如下图所示)包含了几个关键阶段。首先,数据的收集和预处理确保了模型训练所需的质量和可用性。之后,选择一个恰当的模型。在训练阶段转换中,模型通过反向传播算法进行调整,这需要大量的计算资源来增强其对训练数据的拟合能力。在模型评估和微调阶段,涉及使用测试数据评估性能并调整以改善泛化能力。
一旦模型表现令人满意,就可以部署到实际应用中。在服务阶段,有效的部署和集成是确保与现有系统的和谐协作至关重要的。这一阶段的主要关注点集中在性能优化上,目标是通过模型量化和硬件加速等策略来提高服务速度并减少延迟。
Transformer是一种由编码器和解码器组成的深度学习模型架构。其核心创新在于自注意力机制,这是广泛用于基础模型的重要组成部分。其主要思想是使模型能够专注于不同位置之间的动态关联,从而更好地捕捉句子中的远距离依赖特征。在当前的深度学习领域,Transformer架构已成为众多基础模型的首选。这种架构以其出色的性能和灵活性而著称,特别是在自然语言处理任务中表现卓越。许多关键的基础模型,如GPT、LLaMA和鹏城云脑,都采用了Transformer的设计。Transformer架构的成功应用证明了其在基础模型中的通用性,为各种任务提供了强大的建模工具。
在基础模型的整个生命周期中,Transformer架构的引入为模型训练和部署提供了巨大的便利和强大的支持。这种架构的多功能性在训练阶段尤为突出,自注意力机制在学习数据中的复杂模式和依赖关系方面发挥了重要作用。
利用数据的收集和预处理是基础模型成功的起点,高质量的数据集是模型学习能力的基石。预处理步骤包含数据清洗、标准化和增强,以确保模型能从代表性特征中学习,而非噪音。
在训练阶段,Transformer架构通过其自注意力机制,能够高效地处理数据之间的复杂关系,这种机制对于提升模型拟合训练数据的能力至关重要。而在模型评估和微调阶段,Transformer的灵活性也使得调整模型以适应新的数据集变得更加简单。
当模型调整完毕,性能达到满意标准后,便可以进入部署阶段。在服务阶段,Transformer模型的部署和集成需要确保与现有系统的高效协同。这一阶段,通过模型量化和硬件加速等策略优化性能,以提高响应速度和降低延迟,是至关重要的。
总的来说,Transformer架构不仅在训练和在深度学习领域,基础模型系统的生命周期涵盖了从数据准备到模型部署的各个关键阶段。这些阶段的成功执行保证了模型的有效性与实用性。下面,我们将深入探讨这个过程的各个环节。
任何强大的基础模型都始于数据的收集与预处理。高质量的数据是模型学习的根基,因此在此阶段,我们需要确保数据的准确性、多样性以及可用性。预处理步骤包括数据清洗、规范化以及数据增强,这些步骤对于过滤掉噪音、减少偏差以及扩充数据集来增加模型鲁棒性至关重要。
进入训练阶段,模型需要通过反向传播算法进行调整。在这一过程中,模型需要消耗大量的计算资源来提升其对训练数据的拟合能力。这是一个迭代的过程,通过不断地调整模型参数,模型的预测性能也逐渐提高。
当模型训练完成后,接下来就是评估和微调阶段。这一阶段的目标是通过测试数据来评估模型的性能,并对模型进行调整以提高其泛化能力。这是为了确保模型不仅在训练数据上表现良好,同样在未知数据上也能保持稳定的预测性能。
一旦模型的性能达到预期标准,它就可以被部署到实际应用中去。在服务阶段,模型的有效部署和集成对于确保它能与现有系统和谐协作至关重要。性能优化成为这一阶段的重点,通过模型量化、硬件加速等策略,提高服务速度,减少延迟。
Transformer架构在基础模型中扮演着重要角色。它由编码器和解码器组成,核心创新是自注意力机制,这使得模型能够关注输入数据中不同位置之间的动态关联,捕捉长距离依赖特征。如今,Transformer已经成为许多基础模型的首选架构,如GPT、LLaMA、鹏城云脑等,它们在自然语言处理任务中表现出色。
通过Transformer架构,我们可以构建出更加灵活、性能卓越的模型,这为解决各种复杂的任务提供了强大的工具,并且在模型的整个生命周期中展现出其独特的价值。无论是在数据处理的初期阶段,模型训练和微调的中期阶段,还是在模型部署的后期阶段,Transformer架构都能提供关键的支持,确保基础模型系统能够高效、稳定地运行。
在基础模型训练中,最大的挑战之一是对内存和计算力的高需求。因此,本节将从网络、计算和存储三个角度探讨基础模型训练中优化策略的实施,以应对这些挑战,如上表所示。
在数据并行中,每个计算节点拥有模型的一个副本,并独立处理分配给它的数据子集。如图多种并行策略图a 所示,每个节点使用其模型副本进行前向传播和后向传播以及梯度计算。因此,它需要进行梯度聚合和同步操作,以更新全局模型参数。这种分布式方法显著减少了单个节点的计算负荷,并通过并行化工作量加速了训练过程。
分布式数据并行(Distributed Data Parallel, DDP) 利用梯度分桶、计算-通信重叠以及梯度同步跳过来提高分布式数据并行的效率。Ring-AllReduce 方法以其独特的设计有效解决了数据并行中的通信负载问题。在此方法中,工作节点以环形拓扑组织,只与相邻节点通信。
在上述数据并行方法中,每个节点存储整个模型参数虽然简化了训练过程,但显著增加了内存需求,尤其是对于基础模型而言。为了解决这个问题,提出了几种解决方案。Facebook引入了一种称为完全分片数据并行(Fully Sharded Data Parallel, FSDP) 的技术来解决这个问题。它将模型参数分成更小的单元,在计算前通过通信恢复完整的模型参数,并在计算后立即丢弃它们。同样,Xu 等人提出了一种数据并行训练中用于权重更新的自动跨副本分片技术,以优化模型训练期间的内存和通信效率。
张量并行的发展是为了应对超出单个设备内存容量的基础模型训练挑战。在张量并行中(如多种并行策略图b 所示),模型的参数和计算被分割(或切片)到多个计算设备中,有效减轻了每个设备上的内存负担。
Megatron-LM 引入了一种高效的一维(1D)张量并行形式。
对于给定的计算任务,它涉及两个 GEMM 操作和一个 GeLU 非线性运算:
Y = GeLU ( X A ) , Z = Y B Y=\operatorname{GeLU}(X A), \quad Z=Y B Y=GeLU(XA),Z=YB
A A A 可以被分割为 [ A 1 , A 2 ] \left[\begin{array}{ll}A_1,A_2\end{array}\right] [A1,A2]。因此,每个处理器可以独立计算 Y i Y_i Yi:
[ Y 1 , Y 2 ] = [ GeLU ( X A 1 ) , GeLU ( X A 2 ) ] . \left[Y_{1}, Y_{2}\right]=\left[\operatorname{GeLU}\left(X A_{1}\right), \operatorname{GeLU}\left(X A_{2}\right)\right]. [Y1,Y2]=[GeLU(XA1),GeLU(XA2)].
第二个权重矩阵 B B B 可以被分割为 [ B 1 B 2 ] \left[\begin{array}{l}B_1 \\ B_2\end{array}\right] [B1B2],所以 Z Z Z 等于 [ Y 1 , Y 2 ] [ B 1 B 2 ] . \left[\begin{array}{ll}Y_1,Y_2\end{array}\right]\left[\begin{array}{l}B_1 \\ B_2\end{array}\right]. [Y1,Y2][B1B2].
采用这种方法, Y i B i Y_i B_i YiBi 可以在各个处理器上分别计算。
在 Transformer 模型中,1D 张量并行的方法有效地应用于多头注意力(multi-head attention)的计算。这允许多个处理单元同时计算不同的注意力头,而无需等待其他结果。
Optimus 提出了一种高效且可扩展的二维(2D)张量并行。
它基于可扩展的通用矩阵乘法算法(SUMMA)引入。与 1D 张量并行相比,2D 并行将计算负载分配给更多的处理单元,显著提高了整体计算效率。
尽管 2D 并行提供了一种更细粒度的模型切分方法,但它可能引入更高的通信开销。为了解决这个问题,引入了 2.5D 张量并行,它是基于 2.5D 矩阵乘法 构建的,该方法利用额外的设备来最小化通信需求。
为了有效平衡计算、内存和通信负载,3D 张量并行采用了三维(3-D)并行矩阵乘法算法,准确地映射并执行 Transformer 模型的计算过程。
该算法通过智能地在指定的处理器上分配和计算输入和权重矩阵的不同部分,优化了计算资源的使用。
在管道并行中(如多种并行策略图c 所示),整个模型被划分为几个阶段,每个部分分配给一个独立的GPU。但是,在管道并行处理中,一个典型的问题是由于等待依赖数据或处理结果而产生的空闲时间,通常被称为气泡现象。因此,有效减少这些气泡以提高管道并行中的GPU利用率成为一个关键问题。
GPipe是首批将管道并行概念应用于基础模型训练的重要工作之一。
然而,GPipe 需要等待每个微批次完成前向传播才能开始后向传播,如1F1B策略图a 所示。因此,在每个微批次的前向计算过程中产生的中间结果(激活值)需要缓存在内存中,以供随后的反向传播使用,这导致了内存使用的增加。同时,这种方法也可能导致大量气泡的产生。
于是,PipeDream利用一前一后(1F1B)策略,如1F1B策略图b 所示,来解决这些问题,其中后向传播过程紧跟在微批次的前向传播完成后立即进行。
然而,这种训练模式引入了两种类型的参数不一致性。PipeDream 利用权重存储和垂直同步方法来解决这些问题。Varuna 在PipeDream的基础上进行了改进,通过在反向传播过程中更早地进行重计算,有效地减少了气泡和内存使用。同时,类似于 PipeDream,DAPPLE在完成微批次的前向和后向传播后进行同步。这种同步确保了微批次间模型参数的一致性,避免了参数不一致问题。
PipeDream 利用一种权重存储方案,在同一输入的前向和后向传播中使用相同版本的权重。在最坏的情况下,存储的权重版本数量等于管道深度。因此,这可能导致内存消耗的增加。PipeDream-2BM 在管道中只维护两个版本的模型权重。通过只存储两个版本,它显著减少了内存使用。
在 Megatron-LM中,采用交错调度方法实现了管道并行。为了减少管道中的气泡,交错调度方法为每个设备分配了两组模型块,让每个设备能处理多个阶段。通过利用那些本来会等待后向计算的设备的空闲时间,它可以为第二组模型块执行前向计算,有效减少了管道中的气泡大小。
相比之下,Chimera通过在单个GPU上部署多个模型阶段来利用双向管道。Chimera通过交错前向和后向传播的计算来最小化空闲时间并最大化GPU的利用率。与Chimera不同,Hanayo 避免了模型复制策略。相反,它采用了类似波浪的管道方案,进一步降低了气泡率并提高了性能。同样采用双向管道的MixPipe通过调整微批次的数量,实现了管道与设备利用率之间更好的平衡。此外,MixPipe 设计了一种混合调度策略,结合了1F1B和2F1B,以实现更平衡的内存使用,进一步减少气泡率。为了进一步减少气泡,AvgPipe采用了多个并行管道的方法,每个管道在每次迭代中处理一批数据。它通过使用弹性平均训练方法来训练并行模型。通过处理更多批次,AvgPipe 可以将每批数据细分为更细粒度的微批次,有效减少了气泡的产生。
在传统的管道中,将一批相同长度的样本输入GPU进行训练是常见的。在每个批次中,为了适应最长序列的长度而对输入序列进行填充,这导致了明显的内存浪费。Dynapipe引入了一种动态微批处理方法,其核心思想是确保每个微批次中样本的序列长度一致,而不需要在微批次间保持一致性。这种方法减少了微批次处理中的填充开销,有效降低了内存消耗。为了解决管道中的内存平衡问题,Bpipe 使用激活平衡方法,通过在训练过程中在不同GPU之间传输中间激活值,确保所有GPU都能充分利用相似量的内存。这一创新解决了一些GPU可能面临高内存压力而其他GPU却未能充分利用性能的问题。
基础设施规模的持续增长引发了对训练资源的巨大需求。在解决这个问题时,Bamboo通过最佳地使用可抢占式实例显著降低了训练成本。这些实例在空闲时提供较低的成本,但一旦用户提交优先请求,它们可能会被抢占。Bamboo 通过引入冗余计算来优化训练管道,以克服这一挑战。具体来说,每个节点不仅对其层进行计算,还对相邻层进行计算。Bamboo 巧妙地将这些额外的计算纳入冗余层中,从而以较低的成本提供了更大的灵活性。
先前讨论的管道方法主要涉及模型相邻层的简单划分。这种方法可能导致GPU之间的工作负载分配不均衡。作为改进,FTPipe引入了混合管道分区技术。它采用启发式算法根据计算图中的任何计算块(而不仅仅是相邻层)来分配GPU。
在如多种并行策略图 所示的专家并行中,将模型的特定部分分割成几个专业的子模型,即所谓的专家,并将它们分布在不同的计算设备上。一个门控网络用来确定如何在这些不同专家之间有效分配输入数据。
Google的GShard}首次在基础Transformer模型的训练中引入了MoE结构,旨在解决基础模型训练中的可伸缩性问题。为了优化MoE模型的性能,提出了FastMoE。它是第一个支持PyTorch框架的高性能MoE开源系统。FastMoE将Transformer中的FFN层配对,并采用了更细致的并行策略。这种策略显著加快了Transformer模型FFN部分的计算速度。
在MoE系统的训练过程中,需要解决动态负载不平衡和拥塞的端到端通信等挑战。为应对这些挑战,FasterMoE提出了一种动态阴影法来处理负载不平衡。通过动态调整任务分配和调度,系统资源得到了更均匀的利用,从而提高了整体效率。
另一方面,SmartMoE系统为分布式训练策略提供了全面支持。
为了应对MoE模型的动态计算工作负载,SmartMoE系统引入了一种独特的专家布置策略。在经典的并行策略组合上构建,这种策略实现了动态负载平衡。通过智能调整模型中各种专家的部署位置,SmartMoE系统有效地平衡了计算工作负载,提高了整体系统效率。在分布式数据并行中,MoE之间的全到全(all-to-all)通信和全规约(all-reduce)操作可能会发生争用,导致训练时间延长。因此,Lina集成了张量分割和流水线技术,进行微操作调度,减少了分布式训练中的阻塞时期。所有上述方法都使用专家为中心的范式,保持专家不动,并通过全到全的过程向专家提供信息。然而,Janus提出了一种新的数据中心范式:保持数据不动,而在GPU之间移动专家。Janus通过精细调度获取专家的请求来隐藏通信时间,从而减少跨节点流量。此外,Janus开发了一种拓扑感知的优先级策略,确保在节点内部专家交换顺畅无资源争用。
尽管各种并行技术在理论和实验研究中已显示出显著效果,但单一的并行策略往往无法满足实际深度学习模型训练中日益增长的计算需求和复杂性。因此,混合并行成为应对这一挑战的关键。
混合并行的核心在于其基于任务的具体需求和可用硬件资源,制定定制化的策略选择,从而在确保模型性能的同时,最大化训练效率。
在进行数十到数百亿参数规模的基础模型预训练时,常见的做法是结合多种并行化技术以提高效率。Smith等人在使用DeepSpeed和Megatron-LM对Megatron-Turing NLG的Transformer模块进行训练时,利用了管道并行和张量并行技术的结合。他们通过整合数据并行,扩大了训练规模,允许在更多的GPU上进行训练。
为了简化并行化策略的应用并提高效率,Alpa将所有并行化策略集成到一个框架中,建立了一个自动生成最佳并行化策略的编译器。类似地,Galvatron引入了一种决策树方法,利用逻辑直觉进行修剪,从而显著减小了搜索空间。此外,Galvatron采用了动态规划搜索算法来确定最有效的混合并行化策略。
随着模型大小的增加,对GPU内存的需求呈指数级增长。然而,受限于硬件资源,GPU内存不足往往成为瓶颈,限制了训练的规模和性能。因此,开发有效的GPU内存优化技术至关重要,以降低内存消耗。接下来的部分将探讨针对这些开销的各种创新GPU内存优化技术。
在基础模型训练中,激活检查点技术通过仅保存关键激活值,并在反向传播过程中使用重计算技术重新生成这些值,以减少内存消耗。这种结合的方法有效地平衡了内存使用和计算效率,即使在硬件资源有限的情况下也能训练基础模型。
Chen等人首次提出了激活检查点的概念,以应对基础模型训练中的高内存消耗问题。通过在前向传播过程中选择性地移除不需要的中间激活,并通过额外的计算在反向传播中重建它们,这种方法显著降低了GPU内存的使用,同时允许训练更大规模的网络。
然而,重计算带来了额外的时间开销。因此,它需要在训练时间和内存需求之间进行权衡。为了解决这个问题,Jain等人提出了Checkmate,它将问题建模为在确保任务调度不超过设备的内存限制的同时,最小化计算时间。
Checkmate有效地通过动态确定何时存储激活并重新计算它们来管理内存使用。这使得在有限的内存资源限制下训练更大规模的网络成为可能,提供了一个有效的解决方案来解决基础模型训练中的内存限制问题。
混合精度训练是一种在基础模型中使用的技术,它同时使用低精度和高精度数据类型。将训练数据类型表示为16位浮点数可以在降低内存要求的同时减少计算量。然而,16位浮点数表示法不可避免地会影响模型的收敛性。贾等人利用LARS算法来解决这个问题。该算法的工作原理是对不同的层使用不同的学习率。但是,测试发现,直接将LARS算法应用到半精度模型的训练中会导致很大的精度损失。这是因为,在乘以LARS系数后,许多参数由于半精度值的范围小而直接变为零,因此贾等人将半精度参数转换为单精度,然后与LARS结合使用。
内存交换技术的基本思想是将计算负担从GPU转移到其他设备,比如CPU或NVMe。它将一些模型参数和计算任务从GPU迁移到其他设备。这样可以减轻GPU的工作负担,并使其能够更有效地处理剩余的计算任务。
这个想法首先在vDNN中被提出,目的是通过将不需要立即访问的数据从GPU移动到CPU内存,来减轻GPU内存的压力。
vDNN的实现代表了交换技术的初步应用。然而,随着技术的进步,更复杂的方法已经出现。SwapAdvisor采用遗传算法自动搜索最佳数据传输策略,作为手工判断方法的替代。这种自动化方法的好处是它减少了人工干预的需要,从而提高了效率。相比之下,Autotm使用整数线性规划方法来搜索合适的传输策略。
Stronghold引入了工作窗口方法,它只在GPU中保留模型的一部分层和参数。在这种机制下,GPU只处理工作窗口内的模型层,其余的转移到CPU。当工作窗口移动时,相应的资源才从CPU移动到GPU。另外,Stronghold对窗口大小进行了建模,并利用计算和通信重叠来有效地隐藏CPU与GPU之间的通信成本。
同时,FlashNeuron考虑到直接将数据卸载到CPU可能会干扰CPU上运行的其他任务,因此使用SSD进行数据卸载和预取。DeepUM通过整合预取技术,增强了统一内存(UM),有效地减少了地址转换和页面错误所导致的额外开销。类似地,G10创新性地扩展了GPU的统一内存,将GPU内存、主机内存和闪存融合成一个统一的内存空间。这种融合是通过在UM页表中存储闪存页面地址来实现的。因此,统一的页表可以指向主机、GPU或闪存地址。通过预先分析张量的生命周期,G10可以在需要时高效地进行张量交换,最大限度地重叠GPU计算和张量迁移。
此外,Patrickstar提出了一种基于块的内存管理方法,这是一系列连续的、大小相同的张量。这种方法类似于在分布式文件系统中将文件存储在固定大小的磁盘块中。在训练过程中,具有不同生命周期的块可以共享内存,从而减少内存使用。此外,Patrickstar在预热迭代阶段收集内存使用信息,以优化内存管理。
除了上述方法,其他的工作如ZeRO-Offload和ZeRO-Infinity也采用了内存交换技术。为了全面介绍ZeRO系列的研究,本文将在下一节中包括这些额外的工作。
微软开发了一种称为零冗余优化(ZeRO)的技术,它是DeepSpeed分布式训练框架的核心。ZeRO的核心思想是通过牺牲一些通信开销来减少GPU内存。ZeRO将模型参数、梯度和优化器状态分成多个部分,每个GPU在训练过程中只维护其中的一部分,并在需要时通过AllGather操作获取其余部分。
在ZeRO的基础上,ZeRO-Offload利用异构深度学习训练的思想,通过有效利用CPU内存来减轻GPU内存的压力。它将模型参数分为两部分。一部分参数保留在GPU内存中,以便在前向和后向传播中高效计算。另一部分参数卸载到CPU内存中,并在需要时访问。
在这些概念的进一步发展中,ZeRO-Infinity类似于ZeRO-Offload,利用GPU、CPU和NVMe内存,使基础模型的训练不需要代码重构就能在有限的资源上进行。使用ZeRO-Infinity时,模型参数和梯度仍在GPU上计算,而优化器状态和激活则卸载到更适合的NVMe内存和CPU上。
如前文所述,通信开销是分布式训练基础深度学习模型的一个重要瓶颈。特别是在多个GPU或节点之间同步模型参数、梯度和优化器状态时,这一问题尤为突出。主流的解决方案集中在减少通信量、优化通信模式以及增强计算与通信之间的重叠。
例如,Gan等人开发了一种类似MPI的通信库——Bagua。该库提供了一系列灵活和模块化的原语,以支持分布式训练系统放松技术的最新进展。通过这种设计,Bagua为各种前沿的分布式学习算法实现了高效的实现和可扩展性。
Wang等人提出的方法涉及将原始的通信和计算操作分解为更细粒度的任务,从而实现了通信和计算之间的重叠,有效减少了数据通信开销。
Mobius引入了一种异构内存的管道策略,通过从CPU预取数据到GPU内存以用于下一阶段,实现了计算与通信的重叠。此外,它采用了交叉映射策略,以减少通信争用,进一步优化总体性能。
同时,乱序反向传播通过优化计算输出梯度、权重梯度和参数更新的顺序,最大化了计算与通信之间的重叠。
ZeRO通过在多个GPU上分布模型权重、梯度和优化器状态来实现并行计算,增加了通信的体积和频率。作为改进,ZeRO++采用了权重量化,即在通信之前实时将模型参数压缩成更小的数据类型(如INT8),从而减少了所需的通信带宽和时间。此外,ZeRO++在每台机器上保持了一个完整的模型副本,增强了机器内通信带宽。
COCKTAILSGD集成了各种通信压缩技术,巧妙地将通信与本地梯度计算重叠。在通信步骤中,它结合了三种不同的压缩技术(随机稀疏化、top-K稀疏化和量化),实现了比单独每种方法更优的压缩效果。
最后,Optimus-CC采用了三项技术:压缩反向传播梯度、合并嵌入层同步操作以及选择性阶段压缩,以减少节点间通信量。Optimus-CC根据不同训练阶段的通信需求进行选择性压缩,从而最小化不必要的通信开销,提升整体训练效率。
本节讨论了基础模型服务系统中五个主要的优化领域:批处理优化、稀疏加速技术、资源调度优化、GPU内存优化以及多模型推理(如下表所示)。它介绍了各种创新技术和技术,旨在提高处理效率、最小化延迟以及改善内存使用。这些策略归类在“网络-计算-存储”优化框架内。
整合这些“网络-计算-存储”的原则,确保了一个全面的优化方法,这对于基础模型服务系统的性能至关重要。
批处理通过将输入数据分组成批次,允许模型高效地处理多个请求。这种方法通过利用并行处理能力,允许更高效地使用计算资源,显著提高模型推理的吞吐量并降低延迟。DVABatch提出了一种多入口和多出口策略,采用 \textit{新建}、\textit{分割} 和 \textit{伸展} 等操作来动态自定义模型不同阶段的批大小,从而优化效率、吞吐量并减少延迟。除了这种方法外,Orca引入了一种选择性批处理机制,该机制策略性地将批处理和填充应用于全连接层,以最大限度地提高效率。同时,它避免将此方法应用于注意力层,以最小化内存开销。此外,Orca 提出了一种迭代级调度策略,通过在每次处理迭代后调整批大小,提供了适应性。
在计算和内存资源有限的情况下,稀疏加速技术在优化基于Transformer的基础模型性能中扮演着至关重要的角色。这些方法利用模型参数、注意力机制和KV缓存中的固有稀疏性,来优先进行计算和存储。Transformers在注意力机制中利用KV缓存来记住数据的关键部分,这对于效率至关重要,特别是在自回归模型中,这些模型需要迭代生成新的令牌,否则将需要对每个令牌进行昂贵的键和值的重新计算。通过关注模型中最有影响的部分,降低对不那么关键区域的开销,稀疏加速方法能够在资源稀缺的边缘设备和移动平台上部署时,保持高模型性能。
针对Transformers中自注意力机制的计算强度,Dai等人提出了一种利用自注意力矩阵内在稀疏性的方法。该方法采用结构化的稀疏注意力掩码,将计算资源分配给最有影响力的注意力参数,这些参数通过分析模型的注意力分布来确定。这些参数形成了初始掩码,旨在遵循特定的模式,如块或条带。通过熵感知的微调,通过将注意力矩阵行的熵纳入模型的损失函数,进一步完善这个掩码。另一项值得注意的工作是Deja Vu,它通过利用上下文稀疏性的概念提供了一种战略性解决方案。所提出的方法有效地识别并激活处理给定输入时至关重要的选择性注意力头和FFN参数。Deja Vu利用MLP精确预测关键的注意力头和FFN参数。在KV缓存检索失败的情况下,它将触发重新计算过程。相关的另一项工作是H2O方法表明,在注意力块中,令牌的累积注意力得分遵循幂律分布,只有少数令牌在生成中起着关键作用。为了节省内存,H2O只保留这些关键令牌的KV缓存,这些令牌被识别为基于其较高的累积注意力得分的高贡献KV缓存。这种方法大大减少了内存需求,同时保留了注意力机制的关键KV缓存。
在边缘设备的低资源场景中,计算和内存都受到限制。STI通过将模型分割成可管理的碎片来解决边缘设备上基础模型的内存约束和I/O延迟问题。一个中央调度器协调这些碎片的I/O操作,考虑资源的可用性和每个碎片的重要性。它以多种精度级别存储碎片,并根据其重要性动态选择每个碎片的最佳精度,从而优化精度和延迟。在模型量化加速领域,一个突出的贡献是OliVe。这项研究提出了异常值-受害者对(OVP)量化的概念,作为一种有效管理关键异常值并最小化模型精度降低的关键技术。OliVe的创新见解在于认识到异常值对模型精度的重要性,同时识别可以在不显著影响性能的情况下被剪枝的相邻正常值,这些值被称为`受害者值’。OliVe策略性地保留异常值并剪枝相邻的正常值。这种选择性剪枝方法与硬件设计原则相一致。
在优化服务交付中,有效的资源调度是至关重要的。DeepSpeed Inference提供了一个多GPU推理解决方案,旨在处理基础模型,同时遵循有限的GPU内存约束。它专为生成模型中的自回归解码器引入了一个推理管道并行调度,优化提示处理和令牌生成以最小化延迟。此外,DeepSpeed Inference还利用GPU和CPU资源,包括NVMe存储,以减轻GPU内存的负担。DeepSpeed Inference还结合了Transformer模块内的操作符融合,有效降低了延迟并增加了吞吐量。在模型并行研究领域,AlphaServe通过采用模型并行,增强了基础模型推理,该技术将模型分布在多个GPU上,以克服单个GPU内存的限制,并减少请求延迟。AlphaServe采用了一个两层放置算法,优化了集群中模型集合的分布,确保符合服务级目标(SLO)的要求。在Alpha框架的基础上,它实现了推理中模型并行的自动化,简化了并行管理。FastServe通过仔细考虑服务延迟,进一步增强了优化。它采用了一种抢先调度机制,与创新的跳过-加入多级反馈队列调度器相结合。这种联合方法旨在缩短作业完成时间,减少请求等待和处理时间。此外,跳过-加入机制预测了初始迭代所需的时间,从而迅速将作业委派给最合适的队列。这种策略性分配有助于避免不必要的队列转换和随后的延迟。然而,尽管采用了这些复杂的方法,当前方法单独为每个请求做出决策,经常在短期高负载期间导致GPU过度配置,从而导致资源利用率低下。为了解决这个问题,Shepherd通过将不可预测的个别请求流组合成中等大小的批次来提高可预测性。它采用了一个两阶段调度算法。在第一阶段,它利用长期负载数据将GPU集群划分为服务组,并相应地分配GPU。在第二阶段,它引入了抢先调度,优先处理与SLOs一致的较大批次,以优化吞吐量,即使是在反应式调度中也是如此。
在有强烈延迟要求的场景中,一些工作已经解决了这个问题。Clockwork确保了DNN推理时间的可预测性,对抗来自不同任务、硬件和输入的尾延迟,以满足SLOs并最小化延迟。通过限制每个计算层的选项以实现统一的执行时间,并部署一个中央控制器分配已知持续时间的任务,Clockwork保持了严格的时间保证。REEF是一个为GPU上的高效及时DNN推理设计的系统。它以一种优先考虑实时任务的方式调度任务,如果需要,可以快速中断其他任务,并首先为实时内核分配计算单元,然后将剩余的单元分配给尽力而为的内核。在对延迟敏感的服务领域,OSML是一种基于机器学习的调度器,它将IPC和缓存丢失等架构度量纳入到预测服务质量(QoS)变化的模型中。它部署了三个模型:模型A计算最佳资源分配并检测“资源悬崖”;模型B重新分配资源,优先考虑对QoS退化敏感的服务;模型C根据持续的QoS评估动态调整资源分配,以实时保持服务性能。
在推理过程中,模型的权重参数大量占用GPU内存。多项研究集中于优化这些模型参数。例如,FlexGen是一个面向吞吐量的生成式推理系统,优化了卸载策略。FlexGen的一个突出特点是其之字形块调度策略。之字形块调度策略通过逐列推进来探索计算图,并在每一列内重用权重,以最小化加载时间。当激活值的内存限制到达时,过程转移到下一列,优化了GPU内存的利用,以之字形模式高效处理模型。此外,它动态加载和卸载激活值和KV缓存。在另一项研究中,Jeong等人利用直接主机访问(DHA)进行直接GPU内存访问,降低了嵌入层等层的延迟。他们还应用了并行模型传输,通过PCIe将模型按GPU分割进行并行加载。然后这些部分通过NVLink快速传输到主GPU,优化了层的执行。
GPU内存约束阻碍了基础模型推理,其中KV缓存的存储是一个重大的内存开销。服务架构使用KV缓存来减少重新计算,但随着令牌数量的增加,缓存也在增长,这有可能导致GPU内存溢出。为了避免这种情况,框架限制了迭代长度,并为KV缓存预分配内存,这可能导致内存碎片化和推理性能降低。已经提出了多种技术来优化这个方面。vLLM提出的PageAttention机制解决了GPU内存过度分配和碎片化问题。它通过模仿操作系统页面表映射并将GPU内存分割成块来实现这一点。然后使用块映射表来确保逻辑上连续但物理上离散的存储。这种动态方法有效地满足了KV缓存的需求,减少了内存碎片化并提高了推理吞吐量。受操作系统虚拟性质的启发,gpulet概念引入了一种用于分割GPU的抽象,创建了拥有物理GPU资源一部分的虚拟GPU。所提出的基于多维搜索的调度框架,通过考虑数据批量大小以及资源的时间和空间共享,优化了GPU任务。
多模型推理涉及使用多个模型进行服务。这些模型可以是相同类型的,也可以是不同类型的,通常具有不同的架构。在这个背景下,一个重要的研究问题是如何有效地结合这些不同的模型并优化资源分配以实现最佳性能。在通过微调创建的多任务模型的背景下,PetS引入了一种创新的多任务参数高效变换器(PET)框架,这种框架以统一的方式处理各种任务。传统的为每个任务对整个模型进行微调会带来大量的内存开销。PetS通过采用参数高效的微调方法,如适配器,将模型分成共享核心和特定于任务的小操作符,从而规避了这一问题。这种架构允许跨任务共享基础模型的使用,减少了内存需求并简化了模型部署。
在从小型到大型范围的分层模型的背景下,Tabi提出了一种方法。Tabi利用了小型模型通常展示出与大型模型相似的预测能力的观察,实现了一个多级推理引擎。它使用经过温度缩放校准的置信度分数来确定查询是否可以使用较小的模型迅速解决,或者是否应该升级到较大的模型。对于升级的查询,Tabi通过采用基于注意力的词语剪枝和加权集成方法来减少系统开销。谷歌研究所引入的另一种技术是推测性解码,其目的是加速语言模型的推理过程。这种方法涉及一个较小的模型顺序生成令牌,同时一个较大的模型并行验证每个令牌的正确性。较大的模型验证较小模型生成的令牌序列,使得在较大模型的单次迭代中可以生成多个令牌。LLMCad与谷歌的推测性解码不同,它采用基于树的令牌生成方法,便于同时评估多个令牌。为了实现这一点,LLMCad利用一个较小的语言模型来构建一个包含多种词路径的全面词汇树。然后较大的LLM同时高效地评估这些路径。
在隐私保护方面,基础模型面临的主要挑战是潜在的未授权收集、使用和不经意的个人信息泄露。未来的努力应该集中在将隐私保护机制纳入模型的设计和应用中,以确保对用户数据的强有力保护,防止未授权使用和泄露威胁。
基础模型对抵御恶意攻击的能力相对较弱,使其容易受到命令注入和提示注入等活动的影响。特别是在政治、军事、金融和医疗等关键领域,任何形式的恶意攻击都可能严重影响国家社会的稳定性以及人民生命财产的安全。因此,未来的工作必须专注于加强基础模型的安全措施,以确保在关键领域的可靠保护。
基础系统在训练和服务期间面临着能源可持续性的重大挑战。这涉及对大量计算资源的高需求,可能导致不利的环境影响。未来工作的关键在于提高模型的能效和采用更节能的硬件创新。通过创新的绿色计算和可持续发展,这些努力旨在使基础模型系统更加环保和高效,减少能源依赖并减轻环境影响。
本综述深入探讨了从网络、计算和存储的角度出发的基础模型系统的训练和服务方法。
在训练部分,文中讨论了各种并行计算策略。每一种策略都有其独特的优势和应用场景。此外,文章还探讨了GPU内存优化和通信优化技术。
服务部分则讨论了关键技术,如批处理、稀疏加速、资源调度、GPU内存优化和多模型推理。这些策略对于确保基础模型系统在现实世界场景中的效率和实用性至关重要。
总的来说,基础模型系统的训练和服务是一个不断进化的领域。随着新技术的出现,预计将解决更多挑战并进一步推进人工通用智能领域的发展。