大语言模型(LLM)效率优化技术全面综述:模型优化、数据优化、框架优化

news2024/9/29 13:23:12

大语言模型(LLMs)在自然语言理解、语言生成和复杂推理等重要任务中展示了显著的能力,并且有潜力对我们的社会产生重大影响。然而,这些能力伴随着它们所需的大量资源,突出了开发有效技术以解决它们的效率挑战的强烈需求。 文本提供了对高效LLMs研究的系统和全面的回顾,涵盖了从模型中心、数据中心和框架中心视角出发的不同但相互关联的高效LLMs训练和推理技术的全面进展。 我们希望我们的调查能够作为一个有价值的资源,帮助研究人员和从业者系统地理解高效LLMs的研究发展,并激励他们为这个重要且令人兴奋的领域做出贡献。

我们翻译整理最新论文:高效大语言模型调查

img

1 引言

大型语言模型(LLMs)是一种先进的AI模型,旨在理解和生成人类语言。最近,我们见证了LLMs的激增,包括由Open AI(GPT3(Brown等人,2020年)和GPT-4(OpenAI,2023年))、谷歌(Gemini(Team & Google,2023年)、GLaM(Du等人,2022年)、PaLM(Chowdhery等人,2022年)、PaLM-2(Anil等人,2023年))、Meta(LLaMA-1(Touvron等人,2023a)和LLaMA-2(Touvron等人,2023b))以及其他模型如BLOOM(Scao等人,2022年)、PanGu-(Ren等人,2023b)和GLM(Zeng等人,2022年)开发。这些模型在自然语言理解(NLU)、语言生成、复杂推理(Yang等人,2023b)以及与生物医学(He等人,2023;Wan等人,2023;2022年)、法律(Eliot,2021年)和代码生成(Wei等人,2022b;Chen等人,2021c)相关的特定领域任务中展示了显著的性能。这些性能突破可以归因于它们在模型大小和训练数据量的大规模,因为它们包含数十亿甚至数万亿个参数,同时在来自不同来源的大量数据上进行训练。

img

尽管LLMs正引领着AI革命的下一浪潮,但LLMs的显著能力以它们巨大的资源需求为代价(OpenAI,2023;Du等人,2022;Chowdhery等人,2022;Ren等人,2023b)。图1展示了LLaMA系列模型在GPU小时数方面的模型性能与模型训练时间之间的关系,其中每个圆圈的大小与模型参数的数量成比例。如图所示,尽管更大的模型能够实现更好的性能,但用于训练它们的GPU小时数随着模型大小的增加而呈指数增长。除了训练之外,推理也显著地贡献了LLMs的操作成本。图2描绘了模型性能与推理吞吐量之间的关系。同样,扩大模型规模可以提高性能,但代价是降低推理吞吐量(更高的推理延迟),这为这些模型以成本效益的方式扩大其触角到更广泛的客户群和多样化的应用中带来了挑战。

img

LLMs的高资源需求突出了开发技术以提高LLMs效率的强烈需求。如图2所示,与LLaMA-1-33B相比,Mistral-7B(Jiang等人,2023a)使用分组查询注意力和滑动窗口注意力来加速推理,实现了可比的性能和更高的吞吐量。这种优越性突出了为LLMs设计效率技术的可能性和重要性。

img

2. 模型为中心的方法

2.1 模型压缩

img

img

2.1.1 量化

量化通过将高精度数据类型的模型权重和/或激活转换为低精度数据类型来压缩LLMs:

𝑋𝐿=Round(𝑎𝑏𝑠𝑚𝑎𝑥(𝑋𝐻)𝑋𝐿𝑎𝑏𝑠𝑚𝑎𝑥𝑋𝐻)

img

其中Round表示将浮点数映射到近似整数;absmax表示输入元素的绝对最大值;K表示量化常数。LLMs的量化技术可以分为后训练量化(PTQ)和量化感知训练(QAT)。

后训练量化 (PTQ)。PTQ在模型训练完成后对其进行量化。为了补偿精度下降,PTQ使用一个小的校准数据集来更新量化后的权重和/或激活。PTQ可以分为两类:仅权重量化和权重-激活共量化。

  • 仅权重量化 专注于量化LLMs的模型权重。例如,Dettmers等人(2022)介绍了第一个多亿规模的Int8权重量化方法LLM.int8(),它在保持全精度模型性能的同时显著减少了推理期间的内存使用。Frantar等人(2023)进一步提出了GPTQ,这是一种后训练权重量化方法,将LLM权重压缩到3或4位而不是8位。GPTQ采用逐层量化与最优脑量化(OBQ)(Frantar & Alistarh, 2022)更新权重,使用逆Hessian信息。这项技术使得量化具有1750亿参数的GPT模型大约只需要四个GPU小时,同时与原始模型相比几乎没有精度损失。

2.1.2 参数修剪

参数修剪通过移除冗余的模型权重来压缩LLMs。LLMs的参数修剪方法可以分为结构化修剪和非结构化修剪。

结构化修剪。结构化修剪专注于修剪有序模式,例如连续参数组或权重矩阵的行、列或子块等层次结构。例如,LLM-Pruner(Ma等人,2023)介绍了一种任务不可知的结构化修剪策略,使用梯度信息选择性地消除非必要的互连结构。它使用少量数据获得LLaMA(Touvron等人,2023a)的权重、参数和组重要性,并使用LoRA(Hu等人,2022)在修剪后恢复性能,展现出竞争性的零样本性能。

非结构化修剪。与结构化修剪相比,非结构化修剪更注重逐个修剪模型权重,因此具有更大的灵活性。Frantar & Alistarh(2023)提出了SparseGPT,这是一种一次性LLM修剪方法,不需要重新训练。它将修剪表述为稀疏回归问题,并通过使用基于Hessian矩阵逆的近似求解器来解决。通过这种方式,SparseGPT在不需要重新训练的情况下,即使在像OPT-135B这样的模型上也能达到60%的非结构化稀疏度。

2.1.3 低秩近似

低秩近似通过使用低秩矩阵U和V来近似LLMs的权重矩阵Wm×n,使得W ≈ UV⊤,其中U ∈ Rm×r,V ∈ Rn×r,r通常远小于m,n。通过这种方式,低秩近似减少了参数数量并提高了计算效率。特别是,Xu等人(2023a)介绍了TensorGPT,它使用张量-火车分解(TTD)来压缩LLMs的嵌入层。它转换并分解每个令牌嵌入,并创建了一个名为矩阵积态(MPS)的高效嵌入格式,可以以分布式方式高效计算。LoSparse(Li等人,2023g)旨在通过低秩近似压缩神经元内的连贯和表达性组件,同时通过修剪稀疏矩阵消除不连贯和非表达性元素。它使用迭代训练来计算用于修剪的列神经元的重要分数,优于传统的迭代修剪方法。

2.1.4 知识蒸馏

知识蒸馏(KD)通过训练一个较小的学生模型来模仿LLM作为教师模型的性能,使得学生模型在保持与教师模型相似的高性能的同时,计算上不那么昂贵。LLMs的KD可以分为白盒KD方法和黑盒KD方法。

白盒知识蒸馏。白盒KD指的是在蒸馏过程中使用教师LLM的参数或logits的KD技术。例如,Baby LLaMA(Timiryasov & Tastet, 2023)使用BabyLM数据集10M单词训练了一个GPT-2和一系列较小的LLaMA-1模型的集合。然后将这个集合蒸馏到一个紧凑的LLaMA模型,该模型有5800万个参数,超过了其原始教师模型以及一个在没有使用蒸馏的情况下训练的可比模型的性能。

黑盒知识蒸馏。与白盒KD不同,在黑盒KD中,只有从教师LLM生成的输出用于蒸馏过程。受MetaICL和MetalICL的启发,其中语言模型使用上下文学习目标进行元训练,然后通过上下文学习对未见任务进行微调,Multitask-ICT引入了一种称为上下文学习蒸馏的概念。该方法旨在将LLM教师的少样本学习能力转移到学生模型中。同样,LI等人引入了一种混合提示技术,该技术结合了多任务学习和由GPT-3 text-davinci-002版本生成的解释。这种方法用于将解释蒸馏到较小的模型中,在不同场景中比单一任务微调基准取得了一致且显著的改进。Lion引入了一个对抗性蒸馏架构,旨在通过逐步提高学生模型的技能水平来提高知识转移的效率。具体来说,它提示LLMs识别具有挑战性的指令,并为学生模型创建新的复杂指令,从而建立了一个涉及模仿、辨别和生成的三阶段对抗性循环。DISCO涉及提示一个通用LLM产生短语扰动。然后,这些生成的扰动由专门的教师模型过滤,将高质量的反事实数据蒸馏到较小的学生模型中,使较小的模型能够更可靠地学习因果表示。最近,一些研究表明,链式思考(CoT)提示可以激发语言模型逐步解决复杂推理任务,目的是通过黑盒KD将这种能力从LLMs转移到较小的模型中。例如,Fu等人旨在增强较小模型的CoT数学推理能力。具体来说,他们采用了一种方法,该方法涉及通过从LLM教师(GPT-3.5 code-davinci-002)中提取GSM8K数据集中的推理路径来指导调整学生模型(FlanT5)。然后在三个独立的、保留的数学推理数据集上测试学生模型的平均性能,以确认其对新、分布外情况的泛化能力。同样,Distilling Step-by-Step提出使用CoT提示从LLM中提取理由,以在多任务设置中训练较小的模型,与少样本提示的LLM相比取得了更好的性能。Fine-tune-CoT使用现有的零样本CoT提示技术来创建理由,然后使用这些理由对较小的学生模型进行微调。该方法还引入了多样化推理,一种使用随机抽样从教师模型生成多种推理解决方案的方法,这有助于丰富学生模型的训练数据。SOCRATIC CoT采用一种方法,将原始问题分解为一系列较小的任务,并利用这种分解指导推理的中间步骤。这种方法用于训练一对较小的、经过蒸馏的模型:一个专门于剖析问题,另一个专注于解决这些子问题。SCOTT使用LLM生成的理由来训练学生模型,采用反事实推理框架。这种方法确保学生模型不会忽略提供的理由,从而防止它做出不一致的预测。SCoTD提出了一种称为符号CoT蒸馏的方法。它涉及使用未标记数据实例从LLM中提取CoT理由。然后训练一个较小的模型来预测采样的理由和相关标签。最后,Peng等人利用GPT-4作为教师模型,生成英语和中文指令数据集,以改进学生LLMs,如LLaMA。他们的结果表明,由GPT-4生成的52K数据点能够提高与以前最先进的模型生成的指令遵循数据相比的零样本性能。

2.2 高效预训练

img

如表1所示,预训练LLMs需要高成本。高效预训练旨在提高LLM预训练过程的效率并降低成本。如图6所示,高效预训练技术可以分为四类:混合精度加速、模型扩展、初始化技术和优化策略。

img

img

混合精度加速。混合精度加速通过在前向和后向传播中使用低精度模型,并在更新原始高精度权重时将计算出的低精度梯度转换为高精度,从而提高预训练效率。例如,Micikevicius等人提出了自动混合精度(AMP),保持一个以全精度FP32存储的权重主副本用于更新,而将权重、激活和梯度存储在FP16中用于算术运算。值得注意的是,AMP的改进版本优化器已经消除了FP32权重的副本,但优化器(AdamW)在内部仍然使用FP32。然而,Rae等人证明FP16会导致精度损失。为了对抗这种性能下降,提出了Brain Floating Point(BF16),通过为指数分配更多的位,为有效数字分配较少的位,从而实现更好的性能。最后,最近的研究显示,将混合精度加速与激活压缩训练(ACT)相结合可以进一步促进内存高效的Transformer预训练。

模型扩展。基于扩展模型的技术通过使用小型模型的权重扩展到大型模型,加速预训练收敛并降低训练成本。例如,Gong等人介绍了渐进堆叠,将知识从一个简单的模型转移到一个更复杂的模型,并使用渐进堆叠来提高模型的训练效率和收敛速度。Yang等人观察到,随着模型深度的增加,通过渐进堆叠,训练速度却会下降。为了解决这个问题,他们提出了多阶段层训练(MSLT),它只更新输出和新引入的顶层编码器层,同时保持之前训练的层不变。一旦所有层都训练完成,MSLT通过在总步骤的20%内更新每个层来微调整个模型,这比传统的渐进堆叠方法更节省时间。Gu等人引入了CompoundGrow,它从训练一个小模型开始,逐步使用模型增长技术的混合,包括增加输入长度、模型宽度和深度,通过高达82.2%的加速来加速预训练过程。Qin等人提出了知识继承,它在预训练期间使用知识蒸馏作为辅助监督。这有助于有效地从一个较小的教师模型训练一个更大的模型,从而提高预训练速度和泛化能力。Shen等人引入了分阶段训练,从一个小模型开始,逐步通过一个增长算子增加其深度和宽度,该算子包括模型参数、优化器的状态和学习率计划。通过从上一个阶段的结果开始每个阶段,它有效地重用了计算,导致更有效的训练过程。Chen等人提出了功能保留初始化(FPI)和高级知识初始化(AKI),将较小的预训练模型的知识转移到大型模型,以提高大型模型的预训练效率。具体来说,FPI为更大的模型提供了类似于较小模型的行为,为优化奠定了坚实的基础;AKI通过从较高层复制权重,促进了更快的收敛。Wang等人提出了线性增长算子(LiGO),它线性地将一个小模型的参数映射到初始化一个更大的模型,使用宽度和深度增长算子的组合,并进一步通过Kronecker分解来捕获架构知识。Mango引入了一种技术,它在目标模型的每个权重和所有预训练模型的权重之间建立了线性关系,以提高加速能力。它还使用多线性算子在预训练期间减少计算和空间复杂性。借鉴这些扩展技术和渐进预训练,最近的LLMs,如FLM-101B,引入了一种增长策略,通过离线扩展模型结构并从上一个阶段的较小模型检查点恢复,来减少LLM训练成本。

初始化技术。初始化在提高LLM预训练效率中起着关键作用,因为良好的初始化可以加速模型的收敛。大多数LLMs采用了在训练较小规模模型时采用的初始化技术,例如Kumar等人提出的传统初始化技术,旨在平衡输入和输出的方差。Fixup和ZerO将残差干设置为零,保持信号身份。SkipInit用零值乘数替换批量归一化。ReZero添加了零值参数以保持身份,导致更快的收敛。T-Fixup遵循Fixup采用重新缩放方案初始化Transformer模型的残差块。DeepNet调整了深度Transformer中残差连接,使用Post-LN-init确保层归一化的稳定输入,并减轻梯度消失以实现稳定优化。

优化策略。像GPT-3、OPT、BLOOM和Chinchilla这样的流行LLMs主要使用Adam或AdamW作为预训练的优化器。然而,Adam和AdamW对内存的需求巨大,计算成本高昂。一些研究提出了新的优化器来加速LLMs的预训练。Chen等人提出利用搜索技术遍历一个大型且稀疏的程序空间,以发现用于模型训练的优化器。发现的优化器Lion(EvoLved Sign Momentum)比Adam更节省内存,因为它只跟踪动量。Liu等人提出了Sophia,这是一个轻量级的二阶优化器,通过加倍预训练速度超越了Adam。Sophia计算梯度的移动平均值和估计的Hessian,将前者除以后者并应用逐元素剪辑。它有效地调节更新大小,解决非凸性和快速Hessian变化,提高内存利用率和效率。

系统级预训练效率优化。由于对内存和计算资源的高需求,LLMs通常以分布式方式在多个计算节点上进行预训练。因此,大多数提高预训练效率的技术都集中在分布式训练上。用于一般AI模型训练的高效分布式训练方法也可以应用于LLM预训练。例如,数据并行涉及将训练数据集分割成多个子集,在单独的节点上。每个节点独立计算梯度,然后与其他节点共享以更新模型参数。流水线并行将输入小批量分割成几个更小的批次,然后,这些微批次的执行分布到多个GPU上。张量并行将模型的权重矩阵分割到多个节点上。每个节点负责使用模型权重的一段执行前向和后向传递,然后聚合计算结果。尽管这些并行技术解决了训练LLMs时的计算和内存限制,但它们在将所有运行时状态(包括梯度、优化器状态和激活状态)适应有限内存时,仍然存在保持计算、通信和开发效率的局限性。为了弥补这一差距,零冗余数据并行(ZeRO)提供了三个阶段的优化,以在不同节点上分割预训练期间的中间状态。具体来说,ZeRO-1只分割优化器状态,ZeRO-2同时分割优化器状态和梯度。ZeRO-1和ZeRO-2与数据并行相比减少了运行时内存,同时只消耗与数据并行相同的通信量。ZeRO-3提供了更积极的分割,与ZeRO-1和ZeRO-2相比,还将模型参数分割到节点上。尽管通过ZeRO-3进一步减少了运行时内存,但在这个阶段下通信开销增加了50%。因此,建议在节点内使用ZeRO-3以最小化通信时间,而使用ZeRO-1和ZeRO-2跨节点。完全分片数据并行(FSDP)共享了优化的思想,并设计了混合分片策略,允许用户定义在不同节点上分割梯度、参数和优化器状态的节点或进程。当权重内存超过了所有计算节点提供的聚合内存时,ZeRO-Offload允许对任何ZeRO阶段进行CPU卸载,ZeRO-Infinity提供了一种除了CPU内存外,还可以卸载到NVMe驱动器的方法。然而,使用这两种替代方案很难保持性能,因为CPU和GPU之间的数据移动速度慢。

2.3 高效微调

img

img

2.3.1 参数高效微调

参数高效微调(PEFT)旨在通过冻结整个LLM主干并仅更新一小组额外参数,使LLM适应下游任务。一般来说,PEFT方法可以分为四类:适配器基础调整、低秩适应、前缀调整和提示调整。

适配器基础调整。适配器是集成到LLMs中的瓶颈式可训练模块,首先将输入特征向量下投影,然后通过非线性层,然后再上投影回原始大小。适配器基础调整包括串联适配器和并行适配器。在串联适配器中,每个LLM层在其注意力和前馈模块之后添加两个适配器模块;并行适配器则在LLM每层的注意力和前馈模块旁边放置两个适配器模块。特别是,Hu等人提出了LLM-Adapters,它将串联或并行适配器集成到LLMs中,用于不同任务的微调。Karimi Mahabadi等人提出了Compacter,它统一了适配器、低秩技术和最新的超复数乘法层,以实现在可训练参数数量和任务性能之间的平衡。(IA)3介绍了一种使用学习向量缩放激活的技术,它在准确性和计算效率方面超过了少样本上下文学习(ICL)。遵循元学习原理,Meta-Adapters设计了一种资源高效的微调技术,用于少样本情况,它将通过元学习适配的适配器层合并到预训练模型中,将固定的预训练模型转变为高效的少样本学习框架。AdaMix受到稀疏激活的专家混合(MoE)模型的启发,提出了一种混合适配模块,以学习给定任务的多个视角。最后,OpenDelta是一个开源软件库,提供了一个多功能且即插即用的框架,用于实现一系列适配器基础技术,旨在与各种LLMs架构兼容。

低秩适应。低秩适应(LoRA)是一种广泛使用的PEFT方法。LoRA不是直接调整权重矩阵W,而是引入两个可训练的低秩矩阵A和B,将W的更新表示为∆W = A·B。这样,只有小矩阵A和B在微调期间更新,而原始的大权重矩阵保持不变,使微调过程更加高效。尽管有效,LoRA仍然需要在每次微调迭代中更新所有层的低秩矩阵的所有参数。为了提高LoRA的效率,LoRA-FA保持A的投影下权重固定,同时在每个LoRA适配器中更新B的投影上权重,这样微调期间的权重修改就被限制在一个低秩空间内,从而消除了存储全秩输入激活的需要。LoraHub探索了LoRA的可组合性,目的是跨不同任务泛化。它结合了在各种任务上训练的LoRA模块,目标是在未见过的任务上取得良好的性能。LongLoRA扩展了LoRA到长上下文微调场景。它引入了移动短注意力(S2-Attn),有效地促进了上下文扩展,表明LoRA在使用可训练嵌入和归一化时对长上下文有效。Multi-Head Routing扩展了LoRA到专家混合(MoE)架构。它在类似参数分配的情况下优于Polytropon,并且通过仅微调路由函数而不调整适配器,实现了竞争性的性能,展示了显著的参数效率。Zhang等人观察到许多PEFT技术忽略了各种权重参数的不同重要性。为了解决这个问题,他们提出了AdaLoRA,它使用奇异值分解来参数化增量更新,并根据每个权重矩阵的重要性分数自适应地分配参数预算。Valipour等人发现LoRA中的秩是静态的,不能在微调期间自适应调整。为了解决这个问题,他们提出了DyLoRA,它引入了一种动态低秩适应方法,通过组织适配器模块学习的表示,根据它们的秩在多个秩上训练LoRA块,而不是只有一个。与上述主要将PEFT应用于全尺寸LLMs的方法不同,CEPT引入了一个新的框架,使用压缩的LLMs。具体来说,它评估了LLM压缩方法对PEFT性能的影响,并随后实施了知识保留和恢复策略,以对抗这种压缩技术引起的知识丢失。此外,Tied-LoRA使用权重绑定和选择性训练进一步增加了LoRA的参数效率。

前缀调整。前缀调整向每个LLM层添加了一系列可训练的向量,称为前缀令牌。这些前缀令牌针对特定任务定制,可以被视为虚拟词嵌入。LLaMA-Adapter结合了一组可训练的适配嵌入,并将它们附加到LLM上层的词嵌入中。它还引入了零初始化的注意力方案和零门控,它动态地将新的引导信号纳入LLaMA-1,同时保留其预训练知识。

提示调整。与前缀调整不同,提示调整在输入层中结合了可训练的提示令牌。这些令牌可以作为前缀插入,也可以插入输入令牌内的任何位置。Soft Prompt在每个下游任务的输入文本开头添加了额外的k个可训练令牌,而保持整个预训练模型固定。它超过了少样本提示,并缩小了与完整模型微调相比的性能差距。P-Tuning使用少量参数作为提示,这些提示在用作预训练LLMs的输入之前由提示编码器处理。与搜索离散提示不同,P-Tuning通过梯度下降微调这些提示,并提高了广泛的NLU任务的性能。Liu等人观察到前缀调整的早期版本在复杂序列标记任务中存在困难。为了解决这个问题,他们提出了P-Tuning v2,它通过在预训练模型的每层引入连续提示,而不仅仅是输入层,增强了前缀调整。这种修改已被证明在各种参数大小的任务中提高了性能。Tam等人介绍了针对文本检索的高效提示调整,只更新了0.1%的参数,并在多个领域超过了传统的全参数更新方法。Sun等人声称提示调整在少样本学习场景中往往存在困难,因此提出了MP2,它使用多任务学习预训练一组模块化提示。然后,这些提示由一个可训练的路由机制选择性地触发和组装,用于特定任务。结果,MP2可以通过学习如何合并和重用预训练的模块化提示,快速适应下游任务。与MP2不同,PPT将提示调整在少样本学习中的性能下降归因于软提示的初始化不良,并提出将软提示添加到预训练阶段以获得更好的初始化。Multitask Prompt Tuning利用各种任务的知识,在多任务学习设置中使用提示向量。具体来说,它最初通过从各种任务特定的源提示中提取知识来学习一个单一的、可转移的提示,然后对每个下游任务应用乘法低秩更新,有效地将其定制为每个任务。通过这样做,Multitask Prompt Tuning能够达到与全微调方法相当的性能水平。

2.3.2 内存高效微调

随着LLMs参数的扩展,微调所需的内存大小也在增加,使得内存成为微调中的一个重大障碍。因此,通过减少微调中的内存使用来提高效率也成为一个关键话题。Dettmers等人提出了QLoRA,它首先将模型量化为4位Normal Float数据类型,然后在添加了低秩适配器(LoRA)权重的量化模型上进行微调。通过这样做,QLoRA在不降低与标准全模型微调相比的性能的情况下,减少了微调期间的内存使用。QA-LoRA通过引入组操作来提高量化的灵活性(每个组单独量化),同时减少适配参数(每个组使用共享的适配参数),从而改进了QLoRA。同样,LoftQ结合了模型量化和奇异值分解(SVD),以近似原始高精度预训练权重。因此,它为后续的LoRA微调提供了一个有利的初始点,从而在QLoRA的基础上进行了改进。PEQA引入了一个两阶段的量化感知微调方法。在第一阶段,每个全连接层的参数矩阵被量化为低位整数矩阵和标量向量。在第二阶段,低位矩阵保持不变,而微调仅专注于每个特定下游任务的标量向量。采用这种两阶段方法,PEQA不仅在微调期间最小化了内存使用,而且还通过保持权重在低位量化形式,加快了推理时间。Simoulin等人提出了Selective Fine-Tuning,它通过特别保留那些计算出的梯度非零的中间激活的子集,最小化了内存使用。值得注意的是,这种方法在只使用原本所需GPU内存的三分之一的情况下,提供了与全微调相当的性能。Lv等人介绍了LOMO,它通过将梯度计算和参数更新合并为一个步骤,最小化了微调期间的内存消耗。因此,LOMO消除了优化器状态的所有组成部分,将梯度张量的内存需求降低到O(1)。MeZO改进了零阶方法,用于梯度估计,仅使用两个前向传递,这使得LLMs的高效微调成为可能,内存需求类似于推理,并且支持全参数和PEFT方法,如LoRA和前缀调整,使MeZO能够在单个A100 80GB GPU上训练一个300亿参数的模型。

2.4 高效推理

img

img

2.4.1 算法级推理效率优化

提高LLMs推理效率的算法级技术包括推测性解码和KV缓存优化。

  • 推测性解码。推测性解码(即推测性采样)是一种解码策略,通过使用较小的草稿模型并行计算令牌,为更大的目标模型创建推测性前缀,从而加快自回归语言模型的采样速度。Chen等人提出了一种方法,通过运行一个更快的自回归模型K次,然后使用大型目标LLM评估初步输出。采用定制的拒绝采样策略,按从左到右的顺序批准草稿令牌的选择,从而在过程中重新捕获目标模型的分布。Staged Speculative将推测批次转换为树结构,代表潜在的令牌序列。这种重构旨在加速生成更大、更优质的推测批次。它引入了对初始模型的额外推测解码阶段,从而提高整体性能。BiLD通过两种创新策略优化推测解码:回落策略,允许较小的草稿模型在缺乏足够信心时将控制权交给较大的目标模型;回滚策略,使目标模型能够重新访问并纠正由草稿模型做出的任何不准确预测。SpecInfer通过使用推测推理技术和令牌树验证来加速推理。其核心思想是将一系列共同微调的小型推测模型合并,共同预测LLM的输出,然后使用该输出验证所有预测。LLMA选择一个与参考密切相关的文本段,并将其令牌复制到解码器中。然后,它在单个解码步骤中同时评估这些令牌作为解码输出的适用性。这种方法使LLMs的速度提高了两倍多,同时保持与传统贪婪解码相同的生成结果。Medusa涉及冻结LLM主干,微调额外的头部,并使用基于树的注意力机制并行处理预测,以加快解码过程。最后,Santilli等人提出了包括Jacobi和Gauss-Seidel固定点迭代方法的并行解码,用于推测解码。在这些策略中,Jacobi解码被扩展到Lookahead解码,以提高LLMs的效率。

  • KV-Cache优化。最小化LLMs推理过程中Key-Value(KV)对的重复计算也是提高推理效率的关键。Corro等人提出了SkipDecode,这是一种在每个序列位置的每个令牌的批次中使用唯一退出点的令牌级早期退出方法,并且跳过较低和中间层以加速推理过程。Zhang等人指出,KV缓存与序列长度和批次大小线性扩展。他们提出了一种KV缓存驱逐策略,将KV缓存驱逐制定为一个动态子模块问题,并动态保持最近和重要令牌之间的平衡,减少了LLMs推理的延迟。Dynamic Context Pruning利用可学习机制识别并移除非信息性KV缓存令牌。通过这样做,它不仅提高了效率,还提高了可解释性。Liu等人强调了重要性持久性假设,即只有早期阶段重要的令牌才会对后续阶段产生重大影响。基于这一理论,他们提出了Scissorhands,它引入了一种使用紧凑KV缓存的LLM推理的简化算法。

2.4.2 系统级推理效率优化

LLMs推理的效率也可以在系统级进行优化。例如,FlexGen是一个高吞吐量推理引擎,它使得在内存有限的GPU上执行LLMs成为可能。它使用基于线性规划的搜索方法来协调各种硬件,结合GPU、CPU和磁盘的内存和计算。此外,FlexGen将权重和注意力缓存量化为4位,提高了在单个16GB GPU上的OPT-175B的推理速度。Deja Vu提出了上下文稀疏性的概念,这是一组MLP和注意力模块,它们产生与密集模型相同的结果,但组件更少。该技术训练预测器以识别稀疏性,然后使用内核融合和内存合并来加速推理过程。Pope等人开发了一个简单的分析框架,根据应用需求选择最佳的多维分区方法,针对TPU v4片进行优化。通过结合一些现有的低级优化,他们在PaLM上实现了比FasterTransformer更高的效率。S3创建了一个系统,它事先知道输出序列的长度。它可以根据序列的长度预测并安排生成请求,优化设备资源的利用,并提高生产率。Orca采用迭代级调度来决定批次大小。当批次中的一个序列完成时,它被一个新的序列替换,与静态批处理相比,提高了GPU利用率。DeepSpeed-Inference是一种多GPU推理方法,旨在提高当它们被包含在集体GPU内存中时,密集和稀疏Transformer模型的效率。此外,它提供了一种混合推理技术,利用CPU和NVMe内存,除了GPU内存和计算,确保即使对于太大而无法适应GPU内存的模型,也能实现高吞吐量推理。Flash-Decoding是一种通过将键/值分解为较小的部分,同时并行计算注意力,并然后将它们组合以生成最终输出,从而加速长上下文推理速度的技术。FlashDecoding++支持主流语言模型和硬件后端,通过异步softmax,为LLMs提供了一种提高推理效率的方法。

2.5 高效架构设计

img

LLMs的高效架构设计指的是对模型架构和计算过程进行策略性优化,以提高性能和可扩展性,同时最小化资源消耗。图12总结了LLMs的高效架构设计。

2.5.1 高效注意力

注意力模块的二次时间和空间复杂度显著降低了LLMs的预训练、推理和微调速度(Keles等人,2022)。许多技术被提出来使注意力更加轻量级,以实现更高效的执行。这些技术通常可以分为基于共享的注意力、特征信息减少、核化或低秩、固定模式策略、可学习模式策略和硬件辅助注意力。

img

基于共享的注意力。基于共享的注意力旨在通过不同的KV头共享方案加速推理期间的注意力计算。例如,LLaMA-2优化了自回归解码过程,使用了多查询注意力(MQA)和分组查询注意力(GQA)。与多头注意力不同,后者同时使用几个带有不同线性变换的注意力层(头)进行查询、键、值和输出,MQA的所有头共享一组键和值。虽然MQA只使用一个键-值头来加速解码器推理,但可能会影响质量。为了解决这个问题,GQA通过使用多于一个但少于总查询头数量的键-值头,提供了MQA的修改版本,以增强推理质量。

特征信息减少。特征信息减少的原理,如Funnel-Transformer、Nyströmformer和Set Transformer等模型所示,是通过减少序列中的特征信息来降低计算需求,从而导致所需的计算资源成比例减少。例如,Funnel-Transformer减少了隐藏状态的序列长度以降低计算成本,而其解码器可以从压缩的序列中为每个令牌重构深度表示。

核化或低秩。核化或低秩技术,如Sumformer、FluRKA、Scatterbrain、LRT、Performer、RFA、Linear Transformer和Linformer等,通过使用自注意力矩阵的低秩表示或采用注意力核化技术来提高计算效率。具体来说,低秩方法专注于压缩注意力键和值的维度。例如,Linformer将缩放点积注意力分割成更小的单元,通过线性投影进行。核化是低秩技术的一个变体,专注于近似注意力矩阵。例如,Performer使用正交随机特征来压缩softmax注意力核。

固定模式策略。固定模式策略,如Pagliardini等人、Big Bird、Poolingformer、Longformer、Blockwise Transformer和Sparse Transformer等模型采用的策略,通过将注意力范围限制在预定的模式上,如局部窗口或固定步长块模式,来提高效率。例如,Longformer的注意力机制,作为传统自注意力的替代品,将局部窗口注意力与特定任务的全局定向注意力相结合。Pagliardini等人扩展了FlashAttention以支持包括键-查询丢弃和基于哈希的注意力技术在内的广泛的注意力稀疏模式。

可学习模式策略。可学习模式策略,如HyperAttention、Reformer、Sparse Sinkhorn Attention、Clustered Attention、ClusterFormer和Routing Transformer等模型采用的策略,通过学习令牌的相关性,然后将令牌分组到桶或聚类中来提高效率。例如,HyperAttention提出了一种参数化,用于频谱近似,并采用两个关键指标:归一化注意力矩阵中的最大列范数和未归一化矩阵中去除大条目后的行范数比率。它还利用了可学习的排序局部敏感哈希(sortLSH)技术和通过行范数采样进行的快速矩阵乘法。他们的实验结果表明,HyperAttention在只有最小的性能下降的情况下,提高了LLMs的推理和训练速度。

硬件辅助注意力。除了通过稀疏化注意力从而简化注意力矩阵计算的算法方法外,一些研究集中在从硬件角度实现高效和轻量级的注意力机制。例如,FlashAttention及其第二版旨在减少在计算LLMs中的注意力模块时,GPU高带宽内存(HBM)和GPU片上SRAM之间的通信时间。与标准注意力机制多次在HBM和SRAM之间传输值和结果不同,FlashAttention将所有注意力操作合并为一个内核,并将权重矩阵划分为更小的块以更好地适应小型SRAM。因此,每个注意力块的处理只需要一次通信,显著提高了处理整个注意力块的效率。PagedAttention受到虚拟内存和分页技术的启发,允许在非连续的内存空间中存储连续的键和值。具体来说,PagedAttention将每个序列的KV缓存分成块,每个块包含固定数量的令牌的键和值。在注意力计算期间,PagedAttention内核通过维护一个块表来有效管理这些块,减少内存碎片。具体来说,序列的连续逻辑块通过块表映射到非连续的物理块,块表自动为每个新生成的令牌分配一个新的物理块。这减少了生成新令牌时浪费的内存量,从而提高了其效率。A3引入了一种创新的候选选择过程,减少了键的数量,并提供了一个定制的硬件流水线,利用并行性加速近似注意力技术,进一步提高了它们的效率。ELSA使用Kronecker分解来近似注意力模块,这不仅减少了其复杂性,而且使其更适合于硬件上的并行化,从而在用于推理时更加高效。

2.5.2 专家混合(MoE)

img

专家混合(MoE)是在大规模模型如LLMs中突出使用的一种稀疏方法。它的原理是将指定任务细分为多个子任务,然后开发多个较小的、专业化的模型,称为专家,每个专家专注于一个不同的子任务。随后,这些专家协作提供综合输出。对于预训练或微调,MoE有助于有效管理大量参数,提高模型的容量和潜在性能,同时保持计算和内存需求相对可控。对于推理,MoE通过不同时激活所有专家,而是激活少数专家来减少推理时间。此外,MoE能够通过将每个专家分配给单独的加速器,最小化在模型分布式情况下的设备间通信;只有在路由器和相关专家模型所在的加速器之间才需要通信(Kaddour等人,2023)。

基于MoE的LLMs。已经提出了几种基于MoE的LLMs。例如,GShard提供了一种改进的方法,将各种并行计算框架与现有模型代码的少量修改结合起来。它还通过自动分片将一个多语言神经机器翻译Transformer模型的稀疏门控MoE扩展到超过6000亿参数。Switch Transformer引入了一种切换路由算法,构建了直观增强的模型,降低了通信和计算开销。它包含了高达一万个参数,将任务分配给多达2048个专家,从而展示了MoE框架的可扩展性和有效性。Artetxe等人将稀疏语言模型扩展到1.1T参数,与密集模型相比,在语言建模、零样本和少样本学习方面表现出色。BASE Layer定义了令牌到专家的分配为线性分配问题,允许每个专家获得相同数量的令牌,实现了最优分配。PanGu-Σ是一种基于MoE的LLM,拥有1085亿参数,从密集的Transformer模型过渡到具有随机路由专家(RRE)的稀疏模型,并有效地在329B个令牌上训练模型,利用专家计算和存储分离(ECSS)。最后,Mixtral 8x7B是一个具有46.7亿总参数的MoE。通过利用MoE架构的优势,Mixtral 8x7B在大多数基准测试中超过了LLaMA-2 70B,同时推理速度提高了6倍,每令牌仅使用模型的12.9亿参数。

算法级MoE优化。可以通过算法级技术提高基于MoE的LLMs的效率。专家选择技术允许专家选择前k个令牌,而不是让令牌选择前k个专家,这意味着每个令牌可以被引导到不同数量的专家,而每个专家保持固定的桶大小。这种方法在GLUE和SuperGLUE基准测试中表现出更高的性能,并在11个任务中的7个任务中超过了T5密集模型。StableMoE识别了在训练期间相同输入改变目标专家的问题,并通过创建两个训练阶段来解决这个问题。最初,它培养了一个平衡的路由策略,然后将其蒸馏到一个解耦的轻量级路由器中。在接下来的阶段中,使用这个蒸馏的路由器进行固定令牌到专家的分配,确保了一个稳定的路由策略。X-MoE注意到早期的路由机制促进了令牌围绕专家质心的聚类,表明了表示崩溃的倾向。它提出了在低维超球面上估计令牌和专家之间的路由分数。Lifelong-MoE发现MoE增加了模型适应在线数据流中不同语料库分布的能力,而无需额外的计算成本,仅仅通过加入额外的专家层和适当的专家正则化。这促进了MoE基础LLM在序列数据分布上的连续预训练,而不会丢失以前的知识。Flan-MoE促进了MoE和指令调整的融合,观察到MoE模型比密集模型从指令调整中获得更多的好处。特别是,Flan-MoE有效地扩大了语言模型,而不需要增加计算资源或内存需求。

系统级MoE优化。已经开发了几种系统级优化技术,以加速基于MoE的LLMs的训练和推理。例如,FastMoE是一个在PyTorch上构建的分布式MoE训练系统,与常见的加速器兼容。这个系统提供了一个层次化的接口,允许灵活的模型设计和对各种应用的轻松适应,如Transformer-XL和Megatron-LM。FasterMoE引入了一个性能模型,通过类似屋顶线的方法预测延迟并分析端到端性能。利用这个模型,它提出了一种动态阴影技术用于负载平衡,一个并发细粒度调度用于操作,以及通过调整专家选择来减轻网络拥塞的策略。DeepSpeed-MoE设计了一个金字塔残差MoE(PR-MoE)来提高MoE模型的训练和推理效率。PR-MoE是一个密集-MoE混合体,使用残差连接来最优地利用专家,成功地将参数大小减少了高达3倍,而不影响质量或计算需求。此外,它提出了一个蒸馏变体,学生混合(MoS),可以将模型大小减少高达3.7倍,同时保持质量。TA-MoE强调当前MoE调度模式没有充分利用底层异构网络环境,因此引入了一种针对大规模MoE训练的拓扑感知路由策略,根据网络拓扑动态修改MoE调度模式,使其性能超过了FastMoE、FasterMoE和DeepSpeed-MoE。EdgeMoE为基于MoE的LLMs提出了一个针对设备端推理的引擎。它通过将模型分布在不同的存储级别来优化内存和计算,以进行推理。具体来说,非专家模型权重直接存储在边缘设备上,而专家权重则存储在外部,只有在必要时才加载到设备内存中。Tutel是一个具有自适应并行性和流水线功能的可扩展MoE栈,用于加速训练和推理。它为MoE参数和输入数据采用了一致的布局,支持可切换的并行性和动态流水线,没有任何数学不一致性或张量迁移成本,从而实现了自由运行时优化。SmartMoE专注于MoE的分布式训练。在离线阶段,SmartMoE构建了一个混合并行策略的搜索空间。在在线阶段,它结合了轻量级算法来识别最优的并行策略。最后,MegaBlocks将MoE导向计算与块稀疏操作结合起来,并创建了块稀疏GPU内核,以优化硬件上的MoE计算。这使得训练时间比Tutel快40%,比使用Megatron-LM训练的密集DNNs快2.4倍。

2.5.3 长上下文LLMs

在许多现实世界的应用中,如多轮对话和会议总结,现有的LLMs通常需要理解或生成比它们预训练时更长的上下文序列,这可能导致由于长期记忆不佳而导致准确性下降。解决这个问题最明显和直接的方法是对LLMs进行类似的长序列数据的微调,这是耗时且计算密集的。最近,开发了各种新方法,以一种更高效的方式使LLMs适应更长的上下文长度,包括外推和插值、循环结构、窗口分段和滑动结构以及记忆检索增强。

外推和插值。标准的位置上码方法,如绝对位置上码(APE)、学习位置上码(LPE)、相对位置上码(RPE)、相对位置偏置(RPB)和旋转位置上码(RoPE),已经推进了LLMs中位置信息的整合。然而,训练LLMs处理比训练期间所见的最大长度显著更长的序列仍然是一个挑战。鉴于此,提出了基于位置外推和位置插值的技术。

位置外推策略将位置信息的编码扩展到模型在训练期间明确学习的之外。例如,ALiBi应用带有线性偏置的注意力来实现对超出训练期间所见最大长度的序列的外推。通过应用负偏置的注意力分数,基于相关键和查询之间的距离线性递减的惩罚,而不是使用位置嵌入,它可以促进有效的长度外推。与ALiBi不同,xPOS将注意力分辨率作为外推的标记,并使用相对位置嵌入来增强注意力分辨率,从而改善长度外推。然而,这些技术尚未在一些最近的LLMs中实现,如GPT-4、LLaMA或LLaMA-2。CLEX提出将位置嵌入缩放推广到普通微分方程,以模拟长度缩放因子上的连续动态。通过这样做,CLEX摆脱了现有位置外推缩放方法的局限性,实现了长序列生成。

位置插值策略则相反,它们减少了输入位置索引的规模,并扩展了上下文窗口的大小,允许LLMs在更长的文本序列上保持性能。例如,Chen等人强调,超出训练上下文长度可能会损害自注意力机制。他们建议一种通过线性插值减少位置索引的方法,将最大位置索引与预训练阶段遇到的前一个上下文窗口限制对齐。NTK插值修改了RoPE的基础,有效地改变了每个RoPE维度的旋转速度。YaRN插值使用一个坡道函数在不同维度上以不同比例混合线性和NTK插值,并引入一个温度因子来抵消长输入引起的注意力矩阵中的分布偏移。FIRE提出了一个使用可学习映射的输入位置到偏差的功能相对位置编码,通过逐步插值,确保编码函数在所有序列长度上都有界的输入,以实现长度泛化。PoSE提出了位置跳过训练,通过使用固定上下文窗口智能地模拟长输入,并设计不同的跳过偏差项来操作每个块的位置索引。这个策略与全长微调相比,减少了内存和时间开销。

循环结构。LLMs通过循环结构增强了处理长序列的能力。例如,Transformer-XL提出了一个段级循环机制,并使用增强的相对位置上码来捕捉长期依赖关系,并解决长上下文碎片化问题。Memformer利用外部动态存储器对过去信息进行编码和检索,实现了长序列的线性时间和恒定内存空间复杂度。它还提出了记忆重放反向传播(MRBP),以显著降低内存需求,通过时间进行长距离反向传播。∞-former提出了一个带有无界长期存储器(LTM)的Transformer模型,采用连续空间注意力框架,平衡存储在记忆中的信息单元数量与它们的表示粒度之间的关系。Recurrent Memory Transformer(RMT)使用循环机制通过将特殊记忆标记纳入输入或输出序列来保留过去段级的信息,与Transformer-XL相比,在长上下文建模方面表现出色。Block-Recurrent Transformers利用自注意力和交叉注意力在广泛的状态向量和令牌上执行循环函数,以便通过并行计算对长序列进行建模。最后,Retentive Network引入了一个多尺度保留机制作为多头注意力的替代品。通过包含并行和块状循环表示,它实现了有效的扩展,允许并行训练,并实现了训练并行化和恒定推理成本,同时与其他Transformer模型相比,提供了线性长序列记忆复杂度。

分段和滑动窗口。分段和滑动窗口技术通过将输入数据分成较小的段,或应用移动窗口来滑动长序列,来解决长上下文处理问题。例如,Mistral使用滑动窗口注意力有效地处理任意长度的序列,降低了推理成本。StreamingLLM识别了注意力汇聚现象,指出保留初始令牌的Key-Value显著恢复了窗口注意力的性能。基于这一观察,它提出了一个通过合并窗口上下文和第一个令牌的高效框架,允许LLMs在不进行任何微调的情况下,训练有有限长度注意力窗口,但能够概括到无限序列长度。Parallel Context Windows将长上下文分成块,将注意力机制限制在每个窗口内工作,然后重新部署这些窗口的位置嵌入。LongNet提出了一种稀释注意力,它随着距离的增加呈指数级扩展注意力场,能够处理超过10亿个令牌的序列长度。LongNet可以通过并行化训练来实现,通过划分序列维度。SLED是一种处理长序列的简单方法,它重新利用并利用了在LLMs中使用的经过充分验证的短文本语言模型。

记忆检索增强。几项研究通过使用记忆检索增强策略来处理极长文本的推断。一个著名的例子是KNN增强Transformer,它通过k最近邻(KNN)查找来获取之前类似的上下文嵌入,从而扩展了注意力上下文大小。Landmark Attention使用一个地标标记来表示每个输入块,并训练注意力机制使用它来选择相关块。这允许通过注意力机制直接检索块,同时保持对之前上下文的随机访问灵活性,在长上下文建模方面对LLaMA-1表现出色。LongMem提出了一个解耦的网络架构,原始背骨LLM作为记忆编码器,一个自适应残差边网络作为记忆检索器和阅读器,有效地缓存和更新长期过去上下文,以防止知识陈旧。Unlimiformer增强了KNN增强Transformer,通过输出注意力点积分数作为KNN距离,使得可以索引几乎无限的输入序列。Focused Transformer(FoT)强调了随着上下文长度的增加,相关键与无关键的比率降低,并提出了一个通过对比学习来细化关键-值空间结构的优化解决方案。最后,Xu等人发现,一个具有4K上下文窗口的LLM,在生成期间通过简单的检索增强,可以与使用位置插值对16K上下文窗口进行微调的LLM相匹配,在长上下文任务上达到相同的性能,同时显著减少了计算量。

2.5.4 Transformer替代架构

尽管基于Transformer的架构现在是LLMs的前沿,但一些研究提出了新架构来取代基于Transformer的架构。

状态空间模型(SSMs)。一个有前景的方法是状态空间模型(SSMs),旨在替代注意力机制。SSMs被公式化为 x ′(t)=Ax(t)+Bu(t),y(t)=Cx(t)+Du(t)它将单唯输入信号u(t)映射到一个N维的潜在状态x(t),然后投影到单维输入信号y(t), 其中A、B、C、D是通过梯度下降学习到的参数(Gu等人,2022a)。与具有二次复杂度的注意力相比,SSMs提供了相对于序列长度的近似线性计算复杂度。鉴于这样的优势,一系列技术被提出来改进SSMs。例如,结构化状态空间序列模型(S4)通过用低秩校正来调节矩阵A,从而实现稳定的对角化,并将SSM简化为研究充分的Cauchy核的计算(Gu等人,2022a)。对角状态空间(DSS)通过提出完全对角参数化的状态空间,而不是对角加低秩结构,提高了SSMs的效率(Gupta等人,2022)。为了弥合SSMs和注意力之间的差距,并适应现代硬件,H3堆叠了两个SSMs,通过它们的输出和输入投影进行交互,允许它同时记录令牌并促进序列范围内的比较(Fu等人,2023a)。Mehta等人(2022)引入了一个更高效的层,称为门控状态空间(GSS),它在多个语言建模基准测试中的经验表明,比之前的战略(Gupta等人,2022)快2-3倍,同时保持了困惑度。块状态变换器(BST)设计了一个混合层,结合了SSM子层用于扩展范围的上下文化和块变换器子层用于短期序列表示。Gu和Dao(2023)提出了Mamba,通过设计一个选择机制来消除不相关数据,并为循环操作开发了一个硬件感知的并行算法,实现了比变换器高出5倍的吞吐量。Ren等人(2023a)提出了一个通用的模块化激活机制,稀疏模块化激活(SMA),它统一了之前关于MoE、自适应计算、动态路由和稀疏注意力的工作,并将SMA进一步应用于开发一种新的架构,SeqBoat,以实现最先进的质量效率权衡。

其他序列模型。最后,一些其他架构被提出来替代变换器层。Receptance Weighted Key Value(RWKV)模型结合了循环神经网络(RNN)和变换器的优势。这种结合旨在利用变换器的有效可并行训练特性以及RNNs的高效推理能力,从而形成了一个擅长于自回归文本生成的模型,并有效地解决了与长序列处理相关的挑战(Peng等人,2023b)。Poli等人(2023)提出了Hyena,这是变换器注意力机制的一个次二次替代品,减少了长序列中的二次成本。这个操作包括两个高效的次二次原语:一个隐式的长卷积和一个输入的乘法元素门控。通过这种方式,Hyena促进了更大、更高效的卷积语言模型的发展,用于长序列。MEGABYTE将长的字节序列分解为固定大小的块,类似于令牌,包括一个用于编码的块嵌入器、一个作为大型自回归变换器的全局模块用于块表示,以及一个用于预测块内字节的局部模块(Yu等人,2023)。PanGu-π(Wang等人,2023h)是另一种提出的模型。

3 数据中心方法

3.1 数据选择

LLMs的数据选择涉及精心选择最具信息性和多样性的示例,以便模型可以高效地捕获关键模式和特征,加速学习过程(Xie等人,2023b;Yao等人,2022a;Santamaría和Axelrod,2019;Glass等人,2020)。图15总结了LLMs有效预训练和微调的最新数据选择技术。

img

3.1.1 数据选择用于高效预训练

数据选择通过允许模型在训练期间专注于最具信息性和相关性的示例,提高了LLMs预训练的效率。通过精心策划一个代表性数据的子集,模型可以提取关键的模式和特征,导致更有效地获取泛化知识。例如,SSPT是一种基于阅读理解原则的预训练任务。它涉及从上下文相关的文本段落中选择答案,这在各种机器阅读理解(MRC)基准测试中显示出显著的性能提升。Yao等人(2022a)提出了一种基于元学习方法的句子选择方法,显著提高了机器生成翻译的质量。Xie等人(2023b)提出了DSIR,一种基于重要性重采样的数据选择方法,适用于通用和专门的LLMs。它计算了在一组更简单的特征内不同数据片段的重要性,并基于这些重要性计算选择数据。Xie等人(2023a)设计了DoReMi来解决预训练和下游任务之间分布偏移的问题,通过一个鲁棒的优化方法来选择训练数据。

3.1.2 数据选择用于高效微调

数据选择也可以提高微调效率,因为只使用了一小部分精选的示例来完善模型。这种方法确保了适应过程专注于目标领域或任务的特定细节,使微调过程更加高效。例如,指令挖掘(Cao等人,2023)提出了一种线性评估方法来评估指令遵循任务中的数据质量。它强调了高质量数据的重要性,表明使用指令挖掘策划的数据集训练的模型在42.5%的情况下超过了在通用数据集上训练的模型。这强调了数据质量的重要性,并为未来提高指令遵循模型效率奠定了基础。Ivison等人(2023)提出了使用一些未标记的示例从更大的多任务数据集中检索类似的标记示例,以改进特定任务的模型训练。这种方法在微调和少样本微调中超过了标准多任务数据采样,比当前模型实现了2-23%的相对改进。TS-DShapley(Schoch等人,2023)被引入来解决将基于Shapley的数据估值应用于LLMs微调的计算挑战。它采用了一种高效的基于采样的方法,从子集计算的Shapley值聚合以评估整个训练集。此外,它还结合了一种价值转移方法,利用了使用目标语言模型的表示训练的简单分类器的信息。低训练数据指令调整(LTD Instruction Tuning)(Chen等人,2023c)挑战了在微调中需要大型数据集的需求,表明不到原始数据集的0.5%可以有效训练特定任务的模型,而不会降低性能。这种方法使得在数据稀缺环境中实践更加资源高效,结合了选择性数据策略和量身定制的训练协议,以实现最佳的数据效率。AlpaGasus(Chen等人,2023d)是在仅9k高质量数据点上微调的模型,这些数据点是从52k的较大数据集中精心筛选出来的。它超过了在完整数据集上训练的原始模型,并减少了5.7倍的训练时间,展示了高质量数据在指令微调中的力量。LIMA(Zhou等人,2023a)使用一小组精选的示例对LLMs进行微调,显示出强大的性能,并挑战了广泛微调的需求。它对新任务泛化良好,在比较中,在43%的情况下与GPT-4相匹配或超过,表明LLMs在预训练中获得的大部分知识,在微调中需要的指令调整最少。

3.2 提示工程

提示工程(Liu等人,2023c)专注于设计有效的输入(即提示),以引导LLMs生成所需的输出。它通过为特定语言模型的能力和细节定制输入提示或查询,提高了推理效率。当用于一些简单任务,如语义分类时,提示工程甚至可以替代微调来实现高准确性(Liu等人,2022b)。如图17所总结,提示工程技术可以分为少样本提示、提示压缩和提示生成。

img

3.2.1 少样本提示

少样本提示涉及向LLM提供有限的示例集(即演示),以引导其理解需要执行的任务(Wei等人,2022a)。这些演示根据它们与测试示例的相似性从LLM的训练语料库中选择,预期LLM将使用从这些类似演示中学到的知识来进行正确的预测(Dong等人,2023)。少样本提示提供了一种高效的机制来使用LLM,通过引导LLM执行各种任务,而无需额外的训练或微调。此外,有效的少样本提示方法可以使创建的提示简洁,以允许LLMs快速调整到任务中,以高准确性和略微增加的额外上下文,从而显著提高推理速度。如图18所示,少样本提示技术通常可以分为演示选择、演示排序、指令生成和多步推理。

img

**示例组织。**示例组织指的是以适当的方式组织演示,以便为推理形成一个合适的提示。演示组织对推理速度有显著影响。不适当的组织可能导致处理大量不必要的信息,从而导致显著的减速。演示组织的主要挑战来自两个方面:演示选择和演示排序。

  • 示例选择。演示选择旨在为少样本提示选择好的示例。为了生成满意的结果,一个好的演示选择可能只需要使用几个示例作为提示,从而使提示简洁明了,从而更有效地推理。现有的演示选择技术可以分为无监督方法和监督方法。无监督方法旨在使用预定义的相似性函数(如L2距离、余弦距离和最小描述长度MDL)从训练集中选择最近的示例。例如,KATE直接使用给定测试样本的最近邻作为相应的演示。VoteK是KATE的改进版本,解决了KATE需要大量示例集才能获得良好性能的限制。与KATE不同,VoteK通过惩罚已经选择的示例的相似示例,增加了演示的多样性。相比之下,监督方法需要从训练集中训练一个特定领域的检索器,并使用它进行演示选择。例如,EPR被训练用于从未监督检索器(如BM25)初始化的一小组候选中选择演示。UDR通过采用统一的演示检索器来统一不同任务的演示选择,进一步增强了EPR。与无监督方法相比,监督方法通常可以导致更令人满意的生成结果,但需要频繁调整检索器以处理领域外数据,使它们在推理中效率较低。
  • 示例排序。在选择代表样本后,下一步是提示中对这些样本进行排序。演示的顺序对模型性能也有显著影响。因此,选择正确的演示顺序可以帮助模型快速达到良好的生成质量,使用更少的样本,从而提高推理效率。到目前为止,只有少数研究探讨了这个领域。例如,Liu等人建议根据它们与输入的距离对演示进行排序,将最近的演示放在最右边。Lu等人提出了开发全局和局部熵度量,并使用熵度量来设置演示顺序。

模板格式化。模板格式化旨在设计合适的模板来形成提示。一个好的模板通常将LLMs所需的所有信息编译成一个简短的陈述,使提示和整个输入上下文尽可能简洁,从而确保更高的推理效率。模板格式化设计可以分为两部分:指令生成和多步推理。

  • 指令生成。模板中的指令是指任务的简短描述。通过在提示中添加指令,LLMs可以快速理解上下文和它们当前正在执行的任务,因此可能需要更少的演示来创建一个令人满意的提示。给定任务的性能很大程度上受到指令质量的影响。指令不仅在相同任务的不同数据集之间有所不同,而且在不同的模型之间也有所不同。与通常包含在传统数据集中的演示不同,指令的生成严重依赖于人类努力。为了提高指令生成的效率,已经提出了自动指令生成技术。例如,Instruction Induction和Automatic Prompt Engineer展示了LLMs可以生成任务指令。Self-Instruct方法允许LLMs与自生成的指令对齐,突出了它们固有的适应性。TeGit被开发用于训练语言模型作为任务设计者,它可以自动生成输入和输出以及高质量的指令,以更好地基于给定的人类编写的文本进行微调LLMs。尽管自动指令生成方法前景广阔,但它们的复杂性仍然是它们在现实世界中采用的主要瓶颈。
  • 多步推理。引导LLMs在输出最终答案之前产生一系列中间步骤可以大大提高生成质量。这种技术也被称为链式思考(CoT)提示。与重复选择一些示例以使上下文和任务更易于LLMs理解不同,CoT只专注于有限数量的示例,并将思考的细节添加到上下文中,使提示更全面、有效,并确保更有效的推理。然而,尽管CoT有优势,但仍然很难确保每个中间步骤的准确性。为了解决这个问题,已经提出了许多技术。例如,Auto-CoT提出了逐步从LLMs生成CoT的方法。Self-Ask将每个步骤自生成的问题纳入CoT。ReAct执行动态推理,以创建、维护和调整高级计划,同时与外部环境交互,将额外信息纳入推理。Least-to-Most Prompting将复杂问题分解为较小的问题,并在先前问题和答案的上下文中迭代地回答它们。Tree-of-Thought将CoT扩展到包括对连贯文本单元的探索和决策过程的深思熟虑。CoT-SC引入了一种称为“自我一致性”的新解码方法,以取代CoT提示中的简单贪婪解码。它不是只采样一个推理路径,而是开始采样各种推理路径,然后通过考虑所有采样的路径来确定最一致的答案。Graph of Thoughts将LLM产生的信息表示为一个通用图,其中“LLM思考”作为顶点,边指示这些顶点之间的依赖关系。Contrastive CoT提出了对比链式思考,通过提供有效和无效的推理演示来增强语言模型的推理能力。最后,XoT利用预训练的强化学习和蒙特卡洛树搜索(MCTS)将外部领域知识整合到LLMs的思维过程中,从而提高它们有效概括到新的、未见问题的能力。
  • 并行生成。并行生成通过引导LLMs首先生成答案模板,然后通过并行API调用或批量解码同时完成它,从而加速推理。Skeleton-of-Thought提出了一种方法,提示LLM组织输出,并并行化不同段的生成,从而提高硬件利用率并提供加速,揭示了利用数据级组织来提高效率的可能性。

3.2.2 提示压缩

提示压缩通过压缩冗长的提示输入或学习紧凑的提示表示来加速LLM输入的处理。Mu等人提出了训练LLMs将提示蒸馏成一组更简洁的令牌,称为gist令牌。这些gist令牌封装了原始提示的知识,并且可以存储以备将来使用。通过这种方式,它能够将提示压缩高达26倍,从而将每秒浮点运算次数(FLOPs)减少高达40%。Chevalier等人提出了AutoCompressors,将长篇文本上下文压缩成紧凑的向量,称为摘要向量,这些摘要向量可以用作语言模型的软提示。这些摘要向量扩展了模型的上下文窗口,允许它以更少的计算成本处理更长的文档。Jung和Kim提出了一种使用强化学习进行提示压缩(PCRL)的方法,采用策略网络直接编辑提示,旨在在保持性能的同时减少令牌数量。它在各种指令提示中平均减少了24.6%的令牌数量。Ge等人提出了In-context Autoencoder(ICAE),它由一个可学习的编码器和一个固定的解码器组成。编码器将长上下文压缩成有限数量的存储槽,目标语言模型可以在此基础上进行条件化。通过这样的设计,ICAE能够获得4倍的上下文压缩。Nugget 2D将历史上下文表示为紧凑的“要点”,这些要点被训练以支持重建。此外,它具有使用LLaMA等现成模型进行初始化的灵活性。最后,LongLLMLingua引入了一种包含问题感知粗到细压缩、文档重排序、动态压缩比和压缩后子序列恢复的提示压缩技术,以增强LLMs的关键信息感知。

img

3.2.3 提示生成

提示生成通过自动创建有效的提示来提高效率,这些提示引导模型生成特定和相关的响应,而不是手动注释数据。AutoPrompt提出了一种自动化方法,基于梯度引导搜索为各种任务生成提示。它强调了人类编写的文本在优化LLM性能中的作用。TempLM提出了将生成性和基于模板的方法结合起来,将LLMs蒸馏成基于模板的生成器,为数据到文本任务提供了一种协调的解决方案。PromptGen是第一个考虑动态提示生成的知识探索工作,基于预训练的LLMs。它可以在输入句子的条件上自动生成提示,并在LAMA基准测试中超过了AutoPrompt。

4 LLM框架

img

DeepSpeed。由微软开发,DeepSpeed是一个集成框架,用于训练和部署LLMs。它被用来训练像Megatron-Turing NLG 530B和BLOOM这样的大型模型。在这个框架中,DeepSpeed-Inference是基础库。该模块的一个关键特性是ZeRO-Inference,这是一种优化技术,旨在解决大型模型推理的GPU内存限制。ZeRO-Inference将模型状态分布在多个GPU和CPU上,为管理单个节点的内存限制提供了一种方法。DeepSpeed-Inference的另一个方面是它的深度融合机制,它允许通过将计算平铺到迭代空间维度来融合操作,而无需全局同步。此外,DeepSpeed Model Implementations for Inference(DeepSpeed MII)模块提供了部署和管理流行深度学习模型的策略。DeepSpeed MII强调性能、灵活性和成本效率,并结合了先进的优化技术来改善模型推理。此外,DeepSpeed-Chat的引入为生态系统增加了聊天支持。这个模块专注于不同规模的聊天机器人模型的训练,将从人类反馈中学习的强化学习(RLHF)技术与DeepSpeed训练系统集成。值得注意的是,它集成了ZeRO-Offload优化器,使得在CPU和GPU上进行训练成为可能,无论它们的内存容量如何。

Megatron。Megatron是Nvidia为LLMs(如GPT和T5)的训练和部署提供便利的努力。它是Nvidia Megatron模型的底层框架。Megatron的设计核心是模型张量操作的战略分解,这些操作分布在多个GPU上,以优化处理速度和内存利用率,从而在不牺牲模型保真度的情况下提高训练吞吐量。Megatron还使用FasterTransformer优化大型Transformer模型的推理过程。此外,FasterTransformer还用于处理不同的精度模式,如FP16和INT8,以满足多样化的操作需求。该系统还包含了针对特定GPU架构(如Turing和Volta)的算法,强调性能优化。最后,Megatron使用TensorRT-LLM,为开发人员提供了专为LLMs量身定制的高级工具和优化,旨在显著降低延迟并提高实时应用的吞吐量。值得注意的是,TensorRT-LLM集成了FasterTransformer的优化内核,并采用张量并行技术,使得在多个GPU和服务器上高效推理成为可能,而无需开发者干预或模型更改。

Alpa。Alpa是一个用于训练和部署大规模神经网络的库,它通过解决操作间和操作内并行性,旨在全面提升分布式深度学习性能。Alpa的核心方法是自动并行化。通过部署一个自动调优框架,Alpa动态识别针对特定深度学习模型和硬件配置的最优并行策略。此外,Alpa展示了一个集成设计,结合了数据和模型并行。通过这样做,Alpa利用了这些并行技术的优势,导致在服务期间优化了资源利用和提高了训练吞吐量。

ColossalAI。ColossalAI是一个针对大规模分布式训练的框架,它提供了一个统一的解决方案,协调了可扩展性、效率和多功能性。ColossalAI的设计理念是强调整体集成。通过整合深度学习流水线的各个组件,从数据预处理到模型训练和验证,ColossalAI提供了一个简化的平台,减少了碎片化并提高了工作流程效率。这种集成方法减轻了在分布式环境中协调大规模训练时通常遇到的复杂性。此外,认识到深度学习研究和应用的动态环境,该系统被构建为固有的模块化。此外,该框架整合了几种其他高级优化技术,并具有如量化、梯度累积和混合精度等功能。通过利用最先进的算法和方法,ColossalAI寻求优化并行训练中固有的计算和通信开销,从而减少训练时间并提高模型性能。

FairScale。由Meta开发,FairScale是一个PyTorch扩展库,致力于高性能和大规模训练计划。FairScale的核心理念根植于三个基本原则:可用性,强调FairScale API的易用性,旨在最小化用户的认知开销;模块化,支持在用户的训练循环中无缝集成多个FairScale API,从而提升灵活性;性能,通过FairScale API提供最优的扩展和效率。此外,FairScale为Fully Sharded Data Parallel(FSDP)提供支持,作为扩展大型神经网络训练操作的首选方法。因此,它是分布式训练和推理的有力工具。此外,它还具有在资源受限系统中训练的关键特性,提供激活检查点、高效模型卸载和扩展支持。

Pax。由Google开发,Pax是一个基于JAX的高效分布式训练框架。Pax已被用于训练PaLM-2和Bard等大型模型。它针对可扩展性,并提供了大型模型训练的参考示例,包括跨模态(如文本、视觉、语音等)。Pax与JAX紧密集成,并使用JAX生态系统中的许多库。Pax包含许多关键组件,包括SeqIO用于处理序列数据、Optax用于优化、Fiddle用于配置、Orbax用于检查点、PyGLove用于自动微分,以及Flax用于创建高性能神经网络。

Composer。由Mosaic ML设计,Composer旨在使神经网络的训练更快、更高效。它已被用于训练Mosaic ML的MPT 7B和MPT 30B模型以及Replit的Code V-1.5 3B。该库建立在PyTorch之上,并提供了一系列的加速方法,用户可以将其集成到自己的训练循环中,或与Composer训练器一起使用,以获得更好的体验。它支持FSDP以实现高效并行、弹性共享检查点以实现稳健的间歇训练,以及实现在训练期间从云存储即时下载数据集的数据流式实现。因此,Composer旨在具有多功能性,具有一个用于将方法直接集成到其训练循环中的Functional API,以及一个Trainer API,它自动实现了基于PyTorch的训练循环,减少了机器学习开发人员的工作量。

vLLM。vLLM代表了一种方法论上的转变,用于服务LLMs。vLLM的设计核心是PagedAttention,一种将注意力键和值(KV)缓存分割为一定数量的令牌的机制。与连续空间存储不同,PagedAttention的KV缓存块灵活地存储,类似于虚拟内存管理。这有助于在与相同请求相关联的不同序列或甚至不同请求之间,在块级别上共享内存,从而提高处理注意力机制时的内存管理效率。它还允许按需缓冲区分配,同时通过块的统一大小消除外部碎片化。此外,vLLM整合了一种自适应加载技术。这种技术基于启发式方法,根据输入确定要加载到内存中的页面数量。与此相辅相成的是,vLLM还整合了一种参数压缩策略。通过将模型参数存储在压缩状态并在实时服务期间进行解压缩,vLLM进一步优化了内存使用。此外,vLLM支持最先进的量化技术,并支持快速模型执行的优化CUDA内核。该库还增加了对AMD的ROCm GPU的支持。因此,vLLM不仅是一个有用的分布式训练工具,它还可以处理高效的高吞吐量模型服务工作负载。

OpenLLM。OpenLLM是一个全面的方法,用于在生产环境中部署和操作LLMs。OpenLLM在BentoML生态系统内构建,旨在弥合LLMs训练与它们无缝集成到现实世界应用之间的差距。OpenLLM的一个定义特征是其对模块性和可扩展性的强调。认识到生产环境的多样化需求,OpenLLM提倡基于组件的架构。进一步增强其价值主张的是,OpenLLM整合了先进的缓存机制。通过利用这些机制,系统旨在优化重复查询,从而降低运营成本并提高响应时间。此外,OpenLLM的设计还包含了强大的监控和日志记录工具,确保运营洞察力随时可用于性能调整和故障排除。

Ray-LLM。Ray-LLM代表了LLMs与Ray生态系统的融合,旨在优化LLMs的部署和操作。Ray-LLM位于尖端模型架构和可扩展基础设施的交汇处,旨在重新定义LLMs利用的范式。Ray-LLM的核心方法是利用Ray固有的分布式计算能力。认识到LLMs的计算需求,Ray-LLM整合了Ray的分布式任务调度和执行机制,确保LLM任务可以有效地分配到可用资源中。这种无缝集成可能导致提高模型性能、降低延迟和优化资源利用。由于它是建立在Ray生态系统之上的,Ray-LLM是一个快速原型设计、训练和在集群上部署大型模型的优秀库。它还提供高级监控支持,使其可用于服务。

MLC-LLM。MLC-LLM旨在赋予个人在多种设备上开发、优化和部署AI模型的能力。MLC-LLM的核心方法是设备原生AI。认识到当今使用的设备的广泛范围,从高端服务器到智能手机,MLC-LLM编译模型并在特定于每个设备的能力约束的过程中部署它们。这种设备原生的焦点确保AI模型不仅高效,而且高度优化,适用于它们运行的环境。凭借其对在边缘设备上编译和优化模型的强烈关注,MLC-LLM是部署设备上AI模型的强大工具,在各种设备上的吞吐量方面展现出最先进的性能。

Sax。Sax是由Google设计的一个平台,用于部署Pax、JAX和PyTorch模型进行推理任务。在Sax中,有一个称为Sax单元(或Sax集群)的单元,由一个管理服务器和多个模型服务器组成。管理服务器的角色是多方面的:它监控模型服务器,为这些服务器分配发布的模型进行推理,并指导客户端为特定发布的模型找到适当的模型服务器。Sax本质上是与Pax框架互补的,而Pax专注于大规模分布式工作负载,Sax则专注于模型服务。

Mosec。Mosec是为在云环境中特别服务大型深度学习模型而设计的。它旨在简化机器学习模型作为后端服务和微服务的服务。主要功能包括高性能,由于Rust构建的Web层和任务协调;易于使用的Python接口;动态批处理;处理混合工作负载的流水线阶段;以及与模型预热、优雅关闭和Prometheus监控指标的云友好性,使其易于由Kubernetes或其他容器编排系统管理,从而易于管理。

LLM Foundry。LLM Foundry是一个用于微调、评估和部署LLMs进行推理的库,与Composer和MosaicML平台集成。它支持分布式推理、动态批处理和提示批处理,以实现高效部署。与其互补的训练框架Composer一样,LLM Foundry旨在易于使用、高效和灵活,旨在实现与LLMs中最新技术的快速实验。它还提供了Mosaic的预训练变换器(MPT)的直接接口(GPT风格的模型,内置对FlashAttention和ALiBi等功能的支持)。它与MosaicML的Composer框架互补,而Composer专注于分布式训练,LLM Foundry则提供支持,用于部署这些模型,并实现与最新技术的快速实验。

5 结论

在这项调查中,我们提供了对高效LLMs的系统性回顾,这是一个重要的研究领域,旨在使LLMs更加普及。我们首先从必要性出发,引导对高效LLMs的需求。在分类法的指导下,我们从模型中心和数据中心的角度分别回顾了LLMs的算法级和系统级高效技术。此外,我们还回顾了具有特定优化和功能的LLM框架,这些对于高效LLMs至关重要。我们相信,效率将在LLMs和以LLMs为导向的系统中扮演越来越重要的角色。我们希望这项调查能够帮助研究人员和从业者快速进入这个领域,并作为激发高效LLMs新研究的催化剂。

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2176834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入浅出MongoDB(三)

深入浅出MongoDB(三) 文章目录 深入浅出MongoDB(三)复制副本集设置分片分片实例备份与恢复监控ObjectId 复制 复制时将数据同步在多个服务器的过程,提供了数据的冗余备份,在多个服务器上存储数据副本&#…

操作平台使用中应每月不少于几次定期检查?

在当今数字化时代,操作平台作为企业与个人日常运营的核心载体,其稳定性和安全性直接关系到业务的高效运行与数据的严密保护。因此,定期进行操作平台的检查与维护,成为了不可忽视的重要环节。特别是,确保每月进行不少于…

肯富来 CRM 数字化项目启动,引领企业“智”变新时代

近年来,广东肯富来泵业股份有限公司(以下简称“肯富来”)开启企业数字化、智能化转型之路,利用云计算技术贯通全制程的信息化管理系统、通过高速网络端到端全覆盖实现生产可视化,并通过远程数据系统,帮助客…

日志的艺术:深入理解 spdlog

目录 1. 为什么需要日志? 2. 同步日志 vs. 异步日志 3. spdlog 的核心组成部分 4. 如何创建一个Logger 5. 如何选择输出目标(Sink) 6. 个性化你的日志格式 7. 异步日志的魔法 8. 刷新策略:何时将日志写入 9. 调整线程池&…

强化学习入门——Pybullet初体验

Pybullet 最近一直在想如何进行RL的学习,在学习RL的过程中,好的模拟仿真平台是非常重要的。除了Gym,还了解到Pybullet模块可以简便快捷地创建仿真环境,所以学习一下。 1.简介 PyBullet 是一个用于机器人学、游戏开发和图形研究…

mycat读写分离中间件

5、部署Mycat读写分离中间件服务 5.1安装Mycat服务 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中 5.2赋予解压后的mycat目录权限 5.3向/etc/profile系统变量…

PyQt5与Html的关于地图位置显示的动态交互

PyQt5与Html的关于地图位置显示的动态交互 1 前言2 python部分3 HTML代码4 注意总结 1 前言 上篇本是放弃关于Folium的动态显示,但是在仔细对比Folium在python的直接应用与Html中的写法,其实两者没有什么区别,都是基于Leaflet上建立区域&…

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究 目录 文章目录 [大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究目录文章研究背景 文章标题摘要1 引言2 相关工作3 数据集创建3.1 数据收集3.2 目标提示生成3.3 数据集注…

[ACS_C]:以 H2和 O2等离子体处理的 Al2O3为载体的 Pt 催化剂用于液态有机氢载体对二苄基甲苯和全氢二苄基甲苯的加氢和脱氢

摘要:二苄基甲苯 (DBT) 是一种很有前途的液态有机氢载体 (LOHC),理论储氢量为 6.2 wt%,可与可再生能源发电系统耦合。本工作采用一种方便、环保的等离子体处理方法改性氧化铝表面羟基和表面氧空位 (SOV)。通过浸渍处理后的氧化铝制备了不同的…

如何修复变砖的手机并恢复丢失的数据

您可能之前听说过“变砖”,但您知道什么是变砖手机吗?正如许多论坛中经常提出的问题一样,我如何知道我的手机是否变砖了?好吧,手机变砖主要有两种类型,即软件变砖和硬变砖。软变砖手机意味着重启后您仍然可…

MATLAB guide选择图片和全局变量使用

文章目录 前言一、按键选取文件二、全局化变量使用全局华使用 总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文内容,下面案例可供参考 一、按键选取文件 [filename,pathname]…

想要编辑 PDF 文件?使用这 10 种最佳 PDF 编辑工具

您是否遇到过利益干系人要求您对 PDF 文件进行细微更改的情况? 通常我们会这样做! 但是,对你来说,做出要求的改变有多难呢? 好吧,当您没有用于创建 PDF 文件的源文件时,问题就来了。是的&…

如何选购适合自己的内衣洗衣机?五款热门卓越型号测评推荐

相信不少小伙伴都跟我一样,一方面,认为内裤、袜子与大件的上衣、裤子放一块清洗,会感觉很不卫生,而且穿在身上也不安心。但是另一方面,本身又很懒惰,也不想自己用手洗,不但经常会遗漏一些污渍&a…

探索 DaPy:Python 中的 AI 数据处理新贵

文章目录 探索 DaPy:Python 中的 AI 数据处理新贵背景介绍DaPy 是什么?如何安装 DaPy?DaPy 的简单函数使用方法加载数据数据筛选数据聚合数据可视化自定义函数 DaPy 在实际场景中的应用数据预处理数据分析数据处理与集成 常见 Bug 及解决方案…

蓝牙资讯|2024可穿戴市场的手表将出现下滑,耳机和戒指将增长

市场调查机构 IDC 发布博文,预测 2024 年全球可穿戴设备出货量达到 5.379 亿台,同比增长 6.1%。IDC 预计新兴市场的进一步普及和成熟市场的更新周期的开始将推动听力设备的发展,因为消费者希望更换大流行病时期购买的产品。 IDC 预估 2024 …

VS2017安装Installer Projects制作Setup包

下载安装扩展包 VS2017默认未安装Installer Projects Package,需要联机下载: 也可网页上下载离线InstallerProjects.vsix文件: https://visualstudioclient.gallerycdn.vsassets.io/extensions/visualstudioclient/microsoftvisualstudio20…

Spring Boot 进阶-Spring Boot 如何实现自定义的过滤器详解

在上一篇文章中我们讲解了关于拦截器的相关内容,并且通过一个防抖的例子来讲解了拦截器在实际开发中的使用。这篇文章我们为大家带来的就是关于过滤器的相关内容的分享。下面我们首先来介绍一下什么是过滤器。 什么是过滤器? 过滤器Filter,是Servlet技术中最常用的技术,开…

K8S精进之路-控制器DaemonSet -(3)

介绍 DaemonSet就是让一个节点上只能运行一个Daemonset Pod应用,每个节点就只有一个。比如最常用的网络组件,存储插件,日志插件,监控插件就是这种类型的pod.如果集群中有新的节点加入,DaemonSet也会在新的节点创建出来…

【Router】路由功能之DMZ(Demilitarized Zone)功能介绍及实现

DMZ(Demilitarized Zone) DMZ(非军事化区域)是一个位于内部网络和外部网络之间的分段区域。在一个网络中,DMZ通常包含运行公共服务的服务器或其他设备。 DMZ是一个位于内部网络和外部网络之间的分段区域,用…

wpa_cli支持EAP-TLS认证运行设计

wpa_cli支持EAP-TLS认证运行设计 1 输入 1.1启动wpa_supplicant 和 wpa_cli 在OpenHarmony开发板或华为开发机的命令行中输入 wpa_supplicant -Dnl80211 -c/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf -gabstract:/data/service/el1/public/wifi/sock…