当前位置: 首页 > news >正文

【工程开发】LLMC准确高效的LLM压缩工具(一)

​【文献阅读】LLMC: Benchmarking Large Language Model Quantization with a Versatile Compression Toolkit

北航

2024年10月


摘要

大语言模型(LLMs)的最新进展凭借其卓越的涌现能力和推理能力,正推动我们迈向通用人工智能。然而,大量的计算和内存需求限制了它们的广泛应用。量化作为一种关键的压缩技术,虽可能对准确性构成潜在风险,但能够通过压缩和加速大语言模型,有效缓解这些需求。

众多研究致力于将量化带来的准确性损失降至最低。然而,它们的量化配置各不相同,无法进行公平比较。在本文中,我们提出了LLMC,这是一个即插即用的压缩工具包,用于公平且系统地探究量化的影响。

LLMC集成了数十种算法、模型和硬件,提供了从整数到浮点量化、从大语言模型到视觉语言(VLM)模型、从固定比特到混合精度,以及从量化到稀疏化的高度可扩展性。借助这个多功能工具包,我们的基准测试涵盖了三个关键方面:校准数据、算法(三种策略)和数据格式,为进一步研究提供了新颖的见解和详细分析,并为用户提供了实用指导。我们的工具包可在https://github.com/ModelTC/llmc获取。

 1 引言

最近,像GPT-4(OpenAI等人,2024年)这样的大语言模型在自然语言处理(NLP)领域展现出了前所未有的生成能力,并且得到了广泛应用。然而,其高昂的计算和存储成本阻碍了它们在用户中的进一步普及。例如,BLOOM(Touvron等人,2023年)是一个拥有1760亿参数的多语言大语言模型,以全精度(FP16)格式存储模型权重至少需要350GB的空间。更糟糕的是,它需要5块80GB的A100或9块40GB的A800英伟达GPU来进行推理。因此,降低大语言模型的服务成本对于进一步推动其应用至关重要。

针对上述挑战,模型量化(Nagel等人,2021年)可能是一个有效的解决方案。它将权重和 / 或激活映射到较低比特的数据格式,以减少内存占用并加速模型推理。现有的量化方法可分为两类:量化感知训练(QAT)(Bhalgat等人,2020年;Gong等人,2019年;Esser等人,2020年)和训练后量化(PTQ)(Wei等人,2023年a;Li等人,2021年)。尽管量化感知训练性能卓越,但它需要使用大量训练数据进行微调或重新训练,成本高昂,这使得大多数用户难以企及。相应地,训练后量化无需重新训练即可压缩模型,由于其对资源的需求极小,成为大语言模型的首选方法因此,本文中我们未提及一些量化感知训练方法(Du等人,2024年;Liu等人,2024年,2023年b;Egiazarian等人,2024年)。

然而,当前的训练后量化方法总是在不同的量化配置下,通过模拟量化在不同的数据集上进行评估。例如,AWQ(Lin等人,2023年)使用Pile(val)(Gao等人,2020年a)作为校准数据,而GPTQ(Frantar等人,2022年)使用的是C4(Raffel等人,2019年)。这种情况会导致对大语言模型高效且准确量化配置的评估不准确。

校准数据是在模型量化过程中用于调整和优化量化参数的数据。在大语言模型量化里,校准数据对确定模型量化参数、提升模型性能和确保量化准确性极为关键。

  • 确定量化参数:量化将模型的权重和 / 或激活映射到较低比特的数据格式,而校准数据是这个过程的重要依据。以均匀量化为例,需确定缩放因子(scale)和零点(zero - point)等参数 ,校准数据能为这些参数的确定提供参考,让量化过程更贴合模型特性。如在一些量化算法中,通过分析校准数据的分布特征,找到合适的缩放因子,使量化后的数值能较好地保留原始数据的信息,减少量化误差。
  • 提升模型性能:合适的校准数据可提升量化后模型的性能。研究发现,校准数据与测试数据标记分布一致性对模型性能影响重大。当校准数据的标记分布与测试数据更匹配时,模型性能更优。如使用 WikiText2 校准数据对 LLaMA - 2 - 7B 进行 GPTQ 量化,相比用 Pile(val)校准数据,在 WikiText2 测试数据上的困惑度降低了 0.2。这表明选择与测试数据分布一致的校准数据,能让模型在测试时表现更好。
  • 确保量化准确性:校准数据能有效避免因量化导致的模型准确性大幅下降。在实际应用中,若校准数据选择不当,会使量化配置评估不准确,影响模型性能。像不同量化方法使用不同校准数据,会干扰对量化配置效果的准确判断。而合适的校准数据可减少这种干扰,保证量化后的模型在保持低比特数据格式的同时,尽可能维持较高的准确性。

为了给用户提供全面的选择菜单,并为进一步研究提供有见地的方向,我们进行了一项公平的基准测试,该测试考虑了三个关键维度,即校准数据、算法和数据格式。首先,我们系统地探究校准数据提高模型性能的影响。然后,我们旨在研究三种主要算法策略(变换、剪裁和重建)有效性及其潜在机制

最后,我们探索如何在整数浮点量化之间进行选择,以进一步提高准确性。上述所有研究都得益于我们的LLMC,这是一个用户友好、即插即用的大语言模型压缩工具包。如图1所示,这个工具包具有几个独特的特点,为用户提供了选择最适合自身需求选项的自由。

简而言之,我们的主要贡献如下:

  • 我们发布了一个多功能的大语言模型压缩工具包LLMC,它支持数十种算法、模型和多个推理后端,具有强大的扩展性和全面的评估功能。它还使用户能够仅用一个GPU对具有1000亿参数的大语言模型进行压缩,极大地促进了大语言模型量化的应用。
  • 我们从校准数据、算法和数据格式三个方面,对大语言模型量化进行了模块化且公平的基准测试。通过详细的观察和分析,我们针对不同配置下的性能和方法改进,提供了各类新颖的观点。
  • 借助我们强大的工具包和全面的见解,未来的大语言模型研究人员能够为他们的应用高效集成合适的算法和低比特格式,从而实现大语言模型压缩的普及化。

图一:我们的LLM压缩工具包LLMC概述,它集成了多种算法,超低成本量化,多个后端支持和高扩展性。更多功能正在开发中。

 2 LLMC:一个多功能的大语言模型压缩工具包

首先,我们开发了一个名为LLMC的综合性大语言模型压缩工具包,其主要特点如下,这些特点也在图1中展示。

支持多种算法:LLMC支持广泛的量化算法,包括16种不同的方法,涵盖仅权重量化、权重-激活量化和混合精度量化。这种多样性使得能够对不同方法进行公平比较和深入分析。

超低成本量化:我们的工具包旨在实现资源高效利用,能够在最低硬件要求下运行大型模型。得益于我们带有卸载技术的流水线,仅需一个40G的A100即可校准和评估OPT-175B(Zhang等人,2022年),其权重占用约350GB。

多后端兼容性:基于LLMC构建,各种量化设置和模型格式与多个后端和硬件平台兼容,如LightLLM(ModelTC,2023年)、TRT-LLM(Nvidia,2023年)、PPL-LLM(OpenPPL,2023年)、vLLM(Kwon等人,2023年)、MLC-TVM(团队,2023年)和llama.cppllama.cpp团队,2023年),使其具有高度的通用性。

高扩展性:该工具包具有高度的模块化和可扩展性,允许轻松从整数量化扩展到浮点量化、从大语言模型扩展到视觉语言模型(Zhang等人,2024年)、从量化扩展到稀疏化,以及从密集模型扩展到专家混合(MoE)模型(Shazeer等人,2017年)。这种模块化确保用户可以扩展和定制该工具包以满足他们的需求。

全面评估:LLMC能够对量化模型进行全面评估,提供详细的性能指标和分析,如困惑度(PPL)(Alon和Kamfonas,2023年),以及数据可视化分析,如峰度值、量化误差和异常值分布。这种全面的评估能力确保用户可以就最适合其模型的量化策略做出明智的决策。

 3 大语言模型量化基准测试

借助LLMC工具包,我们从三个不同的角度探索大语言模型的量化:3.2小节中的校准数据、3.3小节中的算法,以及3.4小节中的量化数据格式。更多探索内容,如LLMC的可扩展性、KV缓存量化和推理速度,可在附录中找到。

 3.1 实验设置

我们首先介绍如下实验设置。关于量化初步的更多实现细节可在附录中找到。

模型

为了展示我们基准测试的通用性,我们评估了LLaMA2(Touvron等人,2023年)和LLaMA-3(AI@Meta,2024年)系列模型在一般语言任务上的性能,模型规模从70亿到700亿不等。

为了拓宽评估范围,我们在附录中展示了更多结果,包括具有长上下文能力的ChatGLM(Zeng等人,2023年)、用于多模态任务的LLaVA-1.5(Liu等人,2023年a),以及作为专家混合模型代表的Mixtral(Jiang等人,2024年)。

数据集

我们将评估数据集分为上游和下游数据集。对于上游数据集,我们使用WikiText2(Foundation)和C4(Raffel等人,2019年)数据集,并采用困惑度指标进行评估,因为困惑度可以稳定地反映大语言模型的性能(Dettmers和Zettlemoyer,2023年)。

对于下游任务,我们选择了包括MMLU(Hendrycks等人,2021年)、ARCe(Clark等人,2018年)、BoolQ(Clark等人,2019年)、HellaSwag(Zellers等人,2019年)、PIQA(Bisk等人,2020年)、GPQA(Rein等人,2023年)、MBPP(Austin等人,2021年)、Human-Eval(Chen等人,2021年a)、用于长上下文评估的LongBench(Bai等人,2023年),以及用于多模态评估的MME(Fu等人,2023年)等测试任务。

对于校准数据,为确保公平比较,绝大多数实验使用Pile(Gao等人,2020年b)验证集的相同子集。我们使用相同数量的128个校准数据样本和相同的512序列长度。我们还发现,校准数据的不同预处理方法会显著影响量化准确性。因此,我们使用与我们开源代码中相同的预处理方法。

 3.2 校准数据的影响

在公平的实验设置下,我们首先探究校准数据对量化准确性的影响。先前的研究(Li等人,2023年;Liu等人,2023年b)强调了不同校准数据集对量化模型性能的显著影响。然而,缺乏对关键因素的系统分析。为了解决这个问题,我们确定并提出了两个关键方面,以指导未来校准数据的选择。

标记分布一致性

先前的研究(Cai等人,2020年;Zhang等人,2021年)专注于合成更好的分布匹配校准图像,以实现视觉模型的更高性能。受此启发,我们首次研究了校准数据和测试数据之间的标记分布关系对模型性能的影响。

如表1和图2所示,我们发现用与测试集标记分布更匹配的数据进行校准的模型,其性能往往更优。例如,使用WikiText2校准数据(\(D_{KL}\)值低1.97)在WikiText2测试数据上进行GPTQ量化时,比使用Pile(val)校准数据的模型,困惑度降低了0.2。这一发现表明,在实际应用中,选择与数据分布一致的校准数据非常重要。

句内逻辑

与使用图像校准数据的视觉模型不同,大语言模型的校准数据按顺序排列的标记序列组成,这些序列体现了逻辑意义。因此,我们也进行了实验,以探索这种逻辑对大语言模型量化的影响。

从表1中的数据索引可以看出,破坏校准数据中的逻辑会导致不可忽视的准确性下降。值得注意的是,在这种情况下,基于学习 / 重建的算法(如GPTQ和OmniQuant)的鲁棒性低于非学习方法。

具体而言,与AWQ相比,它们的困惑度都增加了3.3倍。总体而言,人们不应寻求或生成不合逻辑的语料库来校准大语言模型。

图2:校准 / 测试数据集的标记分布。y轴表示频率,x轴表示标记ID,“\(D_{KL}\)”计算校准数据与特定测试数据(WikiText2)之间的KL散度。

表1:校准数据对不同算法性能的影响。我们评估了WikiText2测试数据的困惑度,采用w3a16g128的GPTQ(Frantar等人,2022年)和AWQ(Lin等人,2023年),以及w6a6的OmniQuant(Shao等人,2023年)对LLaMA-2-7B进行量化。数据索引显示了在每个数据条目中随机打乱标记顺序后的结果差异。

 3.3 深入研究量化算法

除了校准数据,我们还可以借助LLMC系统地探索和对大语言模型量化算法进行基准测试。该领域的三种主要技术是异常值变换、权重剪裁和权重重建。然而,在不同场景下它们如何发挥作用以及效果如何,仍不明确,因为现有研究缺乏公平的比较。因此,我们将在本节分别讨论这些方法。

 3.3.1 变换如何影响激活和权重异常值?

现有的大多数工作旨在通过不同类型的等价变换来减少异常值\(^{2}\),这些变换可分为基于缩放的变换,如AWQ(Lin等人,2023年)、SmoothQuant(Xiao等人,2023年)、OS +(Wei等人,2023年b)和OmniQuant(Shao等人,2023年),以及基于旋转的变换,例如QuaRot(Ashkboos等人,2024年)。

基于缩放的变换通常涉及搜索学习一个缩放向量,通过优化层的量化误差,将激活异常值转换为权重。相反,基于旋转的变换使用正交矩阵,而不考虑输出误差。为了全面研究它们的效果,我们分析了变换后各层的峰度值\(^{3}\),以深入了解其内在机制。

图3:在w6a6量化下,不同方法对各种层类型的权重(左)和输入激活(右)的峰度值(Kurtosis。图例表示量化方法及其在WikiText2上相应的困惑度。为了公平比较,我们未对下投影层应用变换,因为只有默认的AWQ和QuaRot包含此位置。彩色数值表示所有基于缩放的方法在下投影层使用变换,以及QuaRot使用在线变换后峰度值\(K\)的变化。需要注意的是,我们仅标记所有情况下大于0.2的数值。

表2:w3a16g128的LLaMA-3-8B在WikiText2上,基于缩放的变换方法AWQ和基于旋转的变换方法QuaRot的峰度值\(K\)和困惑度PPL的比较。由于QuaRot忽略了优化输出量化误差(灰色单元格中的余弦相似度),即使异常值问题较少,也会导致更高的困惑度。

从图3和表2中,我们观察到三个不同的发现。

1)与全精度相比,基于缩放的变换方法降低激活峰度值的同时,会增加权重的峰度值,这可能会导致低比特权重量化时出现不可忽视的性能下降,即使使用高比特激活也无法消除这种风险(表3中\(w6a6 > w4a8\))。

2)某些特定位置(如下投影层)的峰度值明显高于其他位置。这些位置对准确性有显著影响。例如,当下投影层进行变换(图3中峰度值明显降低)时,如表3所示,会获得显著的性能提升。

3)尽管基于旋转的变换通过直接优化张量的异常值来减少异常值,但在某些情况下可能无法实现明显的准确性提升。从表2中可以明显看出,输出张量的量化误差并未最小化,因为优化并未专注于降低输出误差,从而导致更高的困惑度。

表3:LLaMA-3-8B在WikiText2上,不同变换方法在下投影层是否变换情况下的困惑度PPL。灰色行表示下投影层进行变换时的结果。

 3.3.2 我们何时应该使用权重剪裁?

权重剪裁技术,即在量化前限制权重值的范围,已被公认为对维持量化过程中的更好性能有贡献(Lin等人,2023年;Du等人,2024年;Shao等人,2023年)。在此,我们分析其在两种不同场景下的应用情况。

图4:不对称和对称权重剪裁与不对称 / 对称量化的比较。权重剪裁后,我们得到要量化的张量的最终范围如与不对称/对称量化相关的实心灰色框中所示。

对称或不对称

剪裁和量化可分为对称或不对称两类。然而,先前的研究(Lin等人,2023年;Liu等人,2024年)常常忽略它们之间的关系,并采用错误的模式。

如图4所示,我们可以观察到,对称剪裁与对称量化(?)相结合,比与不对称量化相结合能保留更多信息(即实心灰色框所示),而对于不对称剪裁则反之亦然。这一发现有助于改进当前方法,显著恢复准确性,特别是在极低比特宽度的情况下。

例如,在表4中,默认的AWQ采用对称剪裁和不对称量化,对于2比特的LLaMA-2-70B,困惑度得分为6.8e4,与3比特配置相比,性能下降了48.11%。相反,在LLMC中采用不对称剪裁的AWQ,在可接受的困惑度下,准确率提升了42.47%。

对称量化是量化操作中的一种类型,与不对称量化相对,二者在零值表示、数据映射方式等方面存在差异。在大语言模型量化场景下,对称量化不引入额外零值点调整数据范围,量化映射相对简单直接;不对称量化则通过零值点来灵活适配数据范围。

  • 对称量化定义:对称量化是量化过程中不引入零值点(zero-point)来调整数据范围的量化方式。在这种量化模式下,量化范围以零点为中心对称分布。比如,给定 t 比特的量化,其量化区间通常是\([-2^{t - 1}, 2^{t - 1} - 1]\) ,像常见的 8 比特对称量化,其量化范围就是\([-128, 127]\)。这种量化方式的优点是计算相对简单,不需要额外存储零值点信息,但缺点是在处理数据范围不对称的情况时,可能无法充分利用量化区间,导致信息损失。
  • 不对称量化:不对称量化通常会引入零值点 z 来表示浮点零,通过调整零值点,可以让量化范围更好地适配数据的实际分布。以激活值量化为例,如果激活值的分布并非以零为中心对称,不对称量化可以通过设置合适的零值点,使得量化后的数值能更准确地反映原始数据的特征,减少量化误差。而对称量化在处理这类数据时,由于缺乏零值点的调整,可能会导致部分数据被错误映射,从而损失信息。在实际应用中,当数据分布较为对称时,对称量化能发挥其计算简单的优势;当数据分布不对称时,不对称量化则更具优势。
  • 对模型量化的影响:在大语言模型量化中,对称量化和不对称量化的选择对模型性能有显著影响。文中研究发现,对称剪裁与对称量化相结合,在某些情况下能保留更多信息。例如,对于特定的量化配置,对称剪裁与对称量化的组合,相比与不对称量化的组合,能让模型在保持一定性能的同时,更有效地利用量化资源。但在其他情况下,如处理具有明显不对称特征的数据时,不对称剪裁和不对称量化的组合可能会更合适。所以,在实际进行模型量化时,需要根据数据的分布特点和模型的具体需求,合理选择对称量化或不对称量化方式,以优化模型性能 。
比特宽度

除了不同的量化和剪裁组合,我们还研究了不同比特宽度下剪裁的影响。从表5中可以看出,权重剪裁并非在所有比特宽度下都具有优势。

1)对于较高比特(4比特)的仅权重量化,剪裁会产生副作用,而在较低比特(3比特)时则有改进作用。我们假设在4比特量化中,权重剪裁导致的信息损失比量化舍入更大。然而,在3比特量化中,量化舍入的影响更大。

2)对于权重-激活量化,无论比特宽度如何,合适的剪裁都具有积极效果。我们将此归因于剪裁异常值有效地调整了大多数权重(即中等和小元素)。考虑到经过硬量化且影响较大的激活,这种方法显著减少了量化后的大激活与调整后的权重相乘所导致的输出误差,从而大大降低了这些量化激活的影响。

表4:不对称/对称权重剪裁的影响。我们在此评估平均准确率和平均困惑度PPL。“asym. clip”表示我们采用不对称剪裁。

 3.3.3 我们应该结合变换和重建吗?

除了变换和剪裁,像GPTQ(Frantar等人,2022)这样基于重建的方法也广泛用于权重量化。该方法迭代更新未量化的权重,以补偿当前量化权重的影响,从而最小化输出量化误差。一些近期的变换方法(Ashkboos等人,2024;Lin等人,2023)集成了这项技术以展示其可扩展性。

然而,我们发现这种组合并不总能带来显著的精度提升。从表6中,我们得出以下结论:

1)像AWQ w/ GPTQ这样基于缩放的变换,对LLaMA-3-8B有适度的性能提升。

2)然而,基于旋转的方法QuaRot w/ GPTQ的表现远超单独使用QuaRot,在3比特的LLaMA-3-8B上甚至有28.94%的准确率提升。

内在原因可能有两个方面:

1)基于缩放的变换方法可能会放大权重异常值 7。这给重建过程中的迭代补偿带来了更大的挑战,尤其是GPTQ难以处理的后几列权重 8。然而,能有效消除权重异常值的QuaRot与GPTQ配合良好。从图5中可以看出,与QuaRot w/ GPTQ相比,AWQ w/ GPTQ后面权重列的量化误差更陡峭,这验证了我们的分析。

2)基于旋转的变换仅旨在减少张量异常值,而不考虑输出误差,因此峰度值显著降低。然而,对于仅权重量化,激活中的异常值可能会放大量化权重中的误差 9,导致明显的输出差异。GPTQ通过近似海森矩阵考虑了输出误差,因此总能补充基于旋转的变换。如表7所示,QuaRot w/ GPTQ在相应层的输出与其量化后的输出之间实现了更高的余弦相似度,这有助于证实我们的分析。

表6:在w3a16g128的LLaMA-3-8B上,重建(GPTQ)与基于缩放(AWQ)和基于旋转(QuaRot)的变换相结合的影响。

图5:w3a16g128的LLaMA-3-8B中,第一个块的q_proj权重的相对量化误差可视化。\(\widehat{W}\)表示权重\(w\)的量化对应项。

表7:在w3a16g128的LLaMA-3-8B上,QuaRot和QuaRot w/ GPTQ的细粒度分析比较。我们报告原始层和量化层输出之间的余弦相似度。

 3.4 整数还是浮点量化?

上述算法基于整数量化(INT)。尽管传统的整数量化在行业中已被广泛采用,但浮点量化(FP)已成为一种新兴的替代方案。这归因于其卓越的准确性和高灵活性,在处理长尾分布方面具有优势。

表8:LLaMA-2-7B在WikiText2上,仅权重量化和权重-激活整数量化(灰色行)/浮点量化(白色行)的困惑度PPL。Naive表示简单的四舍五入量化。

表8报告了大语言模型的详细浮点量化结果。对于权重-激活量化,浮点量化在很大程度上始终优于整数量化,因为它能更好地处理异常值问题。值得注意的是,在w4a4的情况下,整数量化会出现明显的性能下降,而浮点量化则提升到了可用水平。

相反,在应用仅权重量化时,在超低比特(\(\leq\)3比特)或小组大小的情况下,浮点量化的性能更差。这些发现表明:

1)FP格式中的正零和负零限制了这种量化类型的表示能力,特别是在低比特情况下

2)小组大小的范围更均匀,不适合浮点量化

3)对称的浮点量化难以处理大语言模型中的不对称性。

 4 额外结果与讨论

量化对微调的影响

我们对在Evol instruction-66k 10上进行监督微调(SFT)的LLaMA-3-8B进行量化实验,以分析其影响。我们选择ms-swift(Zhao等人,2024)作为微调框架。此外,我们将学习率设置为2e-6,小批量大小设置为2,并在16个40G A800 GPU上对模型训练1个epoch。微调后,我们使用w4a16的Naive量化和AWQ对模型进行量化。我们选择HumanEval(Chen等人,2021b)和HumanEvalX(Zheng等人,2023)进行评估。如表9所示,与基础模型相比,量化导致微调模型的准确率下降更严重。这可能是由于微调数据有限,未来需要进行更深入的分析。此外,对于微调模型,像AWQ这样的先进算法与Naive量化相比,带来了明显的性能提升。

表9:量化后基础模型/微调模型的准确率。“Base”表示LLaMA-3-8B。我们报告了HumanEval-X中5种语言的平均准确率。

 校准数据对视觉语言模型的影响

除了大语言模型,我们在此进一步展示校准数据对LLaVA-7B(Liu等人,2023a)的影响。表10中的结果表明,对于视觉语言模型的量化,我们应该同时收集文本和视觉数据

表10:校准数据对视觉语言模型的影响。我们采用w4a16的AWQ。“T&V”表示MS-COCO(Lin等人,2014)和TextVQA(Singh等人,2019)。

 与现有方法的准确性对齐

除了附录A.3小节中的困惑度对齐结果,我们还对LLaMA-2-7B进行了下游实验,以证明我们的可重复性(实验细节见附录)。如表11和表12所示,我们的LLMC在重现现有量化方法的结果方面是可靠的。

表11:仅权重量化的对齐结果。“LLMC”表示使用我们的工具包LLMC重现的结果。

表12:权重-激活量化的对齐结果。

 模型规模的作用

除了LLaMA-2和LLaMA-3系列,我们还在附录A.8小节中对不同的大语言模型系列进行了量化实验,如SmolLM-135M/350M/1.7B 11、MiniCPM-1B/2B(Hu等人,2024)和Qwen-20.5B/1.5B(Yang等人,2024)。

我们发现,低比特量化对更大规模的同源模型会导致更严重的性能下降。这种现象与直觉相反,需要进一步探索。

此外,更高精度的量化,如w8a8或w4a16,会导致所有规模的大语言模型出现轻微的准确率下降。未来我们将探索模型规模对更大的大语言模型的作用。

 LLMC的流程

基本上,我们的LLMC接收一个FP格式的大语言模型,并使用先进算法计算其量化参数。最后,这个工具可以将带有量化参数的模型导出为与特定后端(如vLLM(Kwon等人,2023))兼容的量化格式。详细的使用方法可以在官方文档 12中找到。此外,LLMC可以为那些量化后的大语言模型提供量化分析和困惑度评估。借助这个工具,人们可以生成各种部署在不同硬件上的压缩工业模型 13。

 5 结论

本文介绍了LLMC,这是一个用户友好且多功能的大语言模型压缩工具包。在该工具包的支持下,我们进行了一系列观察和分析,为社区提供了有价值的新颖见解和建议。

附录

A.1 量化初步

一个完整的均匀量化过程可以用以下公式表示: \(\overline{w} = clip\left(\left\lfloor\frac{w}{s}\right\rceil + z, N_{min}, N_{max}\right)\) \(\hat{w} = s \cdot (\overline{w} - z)\) 其中,\(s \in \mathbb{R}_{+}\)和\(z \in \mathbb{Z}\)分别称为缩放因子和零点。

\(\lfloor\cdot\rceil\)将连续数字四舍五入到最接近的整数。公式(1)首先将权重或激活量化到目标整数范围\([N_{min}, N_{max}]\),然后将整数反量化回原始范围。

朴素量化可以分为四个维度:比特宽度、对称 / 不对称、分组大小和动态 / 静态。

  • 比特宽度:给定t比特,\([N_{min}, N_{max}]\)由\([-2^{t - 1}, 2^{t - 1} - 1]\)确定。在本文中,“wxay” 用于表示权重 “w” 和激活 “a” 的比特宽度;
  • 对称或不对称:对于不对称量化,通常会引入一个零点值z来表示浮点零。否则,对称量化没有可调节的z来适应各种范围;
  • 分组大小:Shen 等人(2020 年)首次提出分组量化,它将权重的每个通道\(^{14}\)划分为不同的组,并为每个组\(W_{i, j:j + g}\)(组大小为g)采用不同的缩放因子和零点集。然而,张量级(\((W_{:,:})\))量化或通道级(\((W_{i,:})\))量化也可以看作是具有更大分组大小的分组量化;
  • 动态或静态:由于大语言模型中激活范围的差异,Yao 等人(2022 年)首次引入了针对激活的令牌级(\((X_{i,:})\))量化,它在模型推理期间为每个令牌动态计算最小 / 最大范围。我们还测量动态 / 静态张量级激活量化,以进行全面比较。

表 13:正文中三种主要策略的详细比较。“Eq. Trans.” 表示该算法是否为等价变换。\(\gamma\)是缩放因子。s和Q分别表示变换向量和矩阵。I是单位矩阵。L是损失函数,学习率为\(\eta\)。\(\alpha\)和\(\beta\)表示剪裁的最小值和最大值。H是海森矩阵,E表示用H计算的量化误差。\(\lambda\)是衰减系数。

如表 13 所示,我们还总结了正文中的三种策略,即变换、剪裁和重建,并定义了它们的行为。此外,对于等价变换类别 OS + 和 OmniQuant,考虑到我们使用的是 LLaMA 系列模型(其某些层没有偏置),我们旨在避免在模型的推理过程中引入额外的计算。因此,我们决定不探索这两种方法中涉及的移位操作。

A.2 更多实现细节

除非另有说明,我们的实现对激活和权重都采用不对称量化。具体来说,我们对激活应用每个令牌的动态量化,对权重应用静态量化。

g128和g64代表组权重量化中两种常用的设置,分别表示分组大小为 128 和 64。与先前的工作 Shao 等人(2023 年)、Liu 等人(2024 年)、Ashkboos 等人(2024 年)一致,对于 OmniQuant,在重建阶段,权重剪裁和变换的学习率分别为\(5e^{-3}\)和\(1e^{-2}\)。

我们遵循默认的 20 个学习轮次的设置。此外,我们使用评估工具 OpenCompass(Contributors,2023 年),并以 LightLLM(ModelTC,2023 年)为后端,在英伟达 A100 80G GPU 上对下游任务进行基准测试。另外,我们在自己的 LLMC 中使用 2048 的序列长度评估困惑度。

A.3 与现有方法的困惑度对齐

在本节中,我们对几种已有的量化算法进行了对齐实验(LLMC 与原始论文 / 代码对比)。我们的实验设置与原始论文或其开源代码的默认设置相同(如表 14 所示)。

这些实验结果总结在表 15、表 16、表 17 和表 18 中。表中的性能数据表明,我们的 LLMC 工具实现的性能与文献中报道原始量化算法几乎相同

通过这些实验,我们证明了我们的工具不仅有效,而且在重现现有量化方法的结果方面是可靠的。这确保了我们的贡献对大语言模型量化的持续研究既可信又有价值。

表 14:我们对齐实验中的校准和超参数设置。

表 15:LLaMA - 2 - 7B 模型仅权不对称量化在 WikiText2 上的困惑度对齐结果。“- LLMC” 表示我们使用 LLMC 工具包的实现。

表 16:LLaMA - 2 - 7B 模型权重 - 激活不对称量化在 WikiText2 上的困惑度对齐结果。

表 17:LLaMA - 2 - 7B、70B 和 LLaMA - 3 系列模型在 Wanda(Sun 等人,2024 年)提出的 50% 非结构化稀疏化方法下,在 WikiText2 上的困惑度对齐结果。

表 18:LLaMA - 2 - 7B 模型权重 - 激活对称量化在 WikiText2 上的困惑度对齐结果。

A.4 KV 缓存量化

这部分展示了代码生成任务中 KV 缓存量化的准确性。从表 19 中可以发现,朴素的 int8 和 int4 KV 缓存量化在 Human - Eval 和 MBPP 数据集上几乎不会导致准确性下降。

这一结论证明,朴素的 4 比特 KV 缓存可以在不损害性能的情况下采用。然而,朴素的 2 比特 KV 缓存会导致生成崩溃,因此不应采用。在表 23 的长上下文评估中也可以发现类似的结果。

表 19:LLAMA - 2 系列模型在 Human - Eval 和 MBPP 上的朴素 KV 缓存量化结果。我们在此采用分组量化(即g8)。

A.5 LLMC 的可扩展性

为了进一步展示该工具包的可扩展性,我们进行了广泛的实验,包括专家混合模型(MoE)量化(如表 20 所示)、视觉语言模型(VLM)量化(如表 21 所示)和稀疏化(如表 24 所示)。

  • 专家混合模型量化:我们使用我们的工具包评估量化后的 Mixtral - 8x7B 的性能,如表 20 所示。
  • 视觉语言模型量化:对于视觉语言模型量化,我们的工具包在感知和认知任务上评估了量化后的 LLaVA - 7B,如表 21 所示。
  • 稀疏化:表 24 展示了使用 Wanda(Sun 等人,2023 年)稀疏化方法对 LLaMA - 2 - 7B、70B 和 LLaMA - 3 系列模型得到的结果。
  • 混合精度:表 22 展示了 LLaMA - 2 - 7B 和 LLaMA - 3 - 8B 仅权重混合精度的结果。混合精度是减少量化误差的有效方法。除了特定的算法,LLMC 还支持自定义层的比特分配。我们发现,对 down_proj 层采用 5 比特到 8 比特的精度提供的效果几乎相同。

表 20:Mixtral - 8x7B 仅权重量化和权重 - 激活量化的消融实验结果。

表 21:LLaVA - 7B 仅权重量化和权重 - 激活量化的消融实验结果。

表 22:使用 AWQ 在 WikiText2 上进行混合精度的困惑度结果。我们仅对 down_proj 应用更高的比特分配,因为它对正文中提到的性能有很大影响。

A.6 推理速度

为了评估不同量化方法的实际效果,我们使用英伟达的云(SMX 80G A100)和边缘(Drive Orin)GPU,以及官方推理库 TensorRT - LLM(Nvidia,2023 年)进行了评估\(^{15}\)。如图 9 所示,我们的部分结果突出了具有 32,000 个输入令牌和 512 个输出令牌的模型在吞吐量上的改进。研究结果表明,8 比特权重和激活的量化使预填充阶段的速度提高了 20% - 30%,解码阶段的速度提高了 40% - 60%。相比之下,4 比特仅权重量化使预填充速度降低了 10%,但使解码速度提高了 40% - 60%。需要注意的是,这些加速率在较大模型上往往会降低。此外,8 比特 KV 缓存量化对预填充时间的影响最小,并且对于非常大的模型(如 700 亿参数的模型),会略微降低解码吞吐量。图 7 和图 8 补充展示了各种量化方案在 1K 和 4K 输入上下文长度下带来的加速效果。我们还发现,这两种情况下的结论与 32K 输入上下文长度的情况相同。此外,图 6 展示了 Drive Orin 边缘 GPU 上的加速情况。可以看出,在这种设置下,仅权重量化也有助于预填充,这与云 GPU 的情况不同。

图 6:在边缘 GPU(Drive Orin)上量化的吞吐量比较(令牌 / 秒)

图 7:7B、13B 和 70B 的 LLaMA - 2 模型在英伟达 A100 GPU 上的推理速度(输入序列长度:1024,输出序列长度:512)。

图 8:7B、13B 和 70B 的 LLaMA - 2 模型在英伟达 A100 GPU 上的推理速度(输入序列长度:4096,输出序列长度:512)。

图 9:7B、13B 和 70B 的 LLaMA - 2 模型在英伟达 A100 GPU 上的推理速度(输入序列长度:32K,输出序列长度:512)。

A.7 详细的准确率和困惑度

本节展示了正文中一些实验的详细数据。表 25 和表 26 展示了表 4 的详细数据。表 27 展示了表 6 的详细数据。

A.8 不同模型系列的结果

从表 28 到表 34,我们报告了不同模型系列的量化结果,包括 SmolLM\(^{16}\)、MiniCPM(Hu 等人,2024 年)和 Qwen2(Yang 等人,2024 年)。

我们还提供了在 SIQA(Sap 等人,2019 年)、ARC - c(Clark 等人,2018 年)、OBQA(Luo 等人,2021 年)和 WinoGrande(Sakaguchi 等人,2019 年)上的结果。

表 23:来自 LongBench(Bai 等人,2023 年)的单文档问答任务中 KV 缓存量化结果。

表 24:LLaMA - 2 - 7B、70B 和 LLaMA - 3 系列模型在 Wanda 方法下的困惑度结果。

表 25:LLaMA - 2 - 7B 模型不对称 / 对称权重剪裁的结果。

表 26:LLaMA - 2 - 70B 模型不对称 / 对称权重剪裁的结果。

表 27:在 LLaMA - 3 - 8B 模型上,重建(GPTQ)与基于缩放(AWQ)和基于旋转(QuaRot)的变换相结合的结果。此处取消了 AWQ 的剪裁以排除干扰。

表 28:SmolLM - 135M 模型的量化结果。为了公平比较,取消了 QuaRot 中的激活剪裁和在线旋转。“HellaS.” 和 “WinoG.” 分别代表 HellaSwag 和 WinoGrande。我们用粗体标记最佳结果。

表 29:SmolLM - 350M 模型的量化结果。

表 30:SmolLM - 1.7B 模型的量化结果。

表 31:MiniCPM - 1B 模型的量化结果。

表 32:MiniCPM - 2B 模型的量化结果。

表 33:Qwen2 - 0.5B 模型的量化结果。

表 34:Qwen2 - 1.5B 模型的量化结果。

相关文章:

【工程开发】LLMC准确高效的LLM压缩工具(一)

​【文献阅读】LLMC: Benchmarking Large Language Model Quantization with a Versatile Compression Toolkit 北航 2024年10月 摘要 大语言模型(LLMs)的最新进展凭借其卓越的涌现能力和推理能力,正推动我们迈向通用人工智能。然而&#…...

回顾CSA,CSA复习

RHCSA redhat certificate system Administrator RHCE redhat certificate engineer 回顾CSA 文件管理 创建文件:touch 、重定向、vim 阅读文件:cat看短小的文件、vim、head看文件前面部分、tail看文件的尾部内容、more、less看文档使用more和less…...

基于电子等排体的3D分子生成模型 ShEPhERD - 评测

一、背景介绍 ShEPhERD 是一个由 MIT 开发的一个 3D 相互作用感知的 ligand-based的分子生成模型,以 arXiv 预印本的形式发表于 2024 年,被ICLR2025 会议接收。文章链接:https://openreview.net/pdf?idKSLkFYHlYg ShEPhERD 是一种基于去噪扩…...

平凡日子里的挣扎

2025年4月13日,9~23℃,好 待办: 融智云考平台《物理》《物理2》~~《地理》《地理1》~~重修试卷 卫健委统考监考(2025年4月12日早上7点半) 冶金《物理》课程标准 冶金《物理》教案 期中教学检查——自查表材料&#xff…...

智能制造方案精读:117页MES制造执行系统解决方案【附全文阅读】

本方案围绕制造执行系统(MES)展开,阐述了智能制造相关概念及发展趋势,指出 MES 是连接 ERP 与生产现场的关键系统。介绍其在加工、装配及其他场景的应用,通过实例展示各场景下的功能、特点和实施效果,如实现生产信息可视化、产品追溯、设备监控等。还提及实施 MES 面临的…...

[推荐]AI驱动的知识图谱生成器(AI Powered Knowledge Graph Generator)

网址:https://github.com/robert-mcdermott/ai-knowledge-graph# 一、介绍 简介:以非结构化文本文档为输入,使用您选择的LLM以主语-谓语-宾语 (SPO) 三元组的形式提取知识,并将这些关系可视化为交互式知识图谱 特点&#xff1a…...

波束形成(BF)从算法仿真到工程源码实现-第七节-关于波束10个基本概念

一、波束10个基本概念 1.作用: 对多路麦克风信号进行合并处理,抑制非目标方向的干扰信号,增强目标方向的声音信号。 2.原理: 调整相位阵列的基本单元参数,使得某些角度的信号获得相长干涉,而另一些角度的…...

深度学习(第一集)

123 import torch# 创建一个需要计算梯度的张量 x1 torch.tensor([2.0], requires_gradTrue)# 定义一个简单的函数 y x^2 y x1 ** 4# 计算梯度 y.backward()print("x1.grad 的值:", ) # 打印 x1.grad print("x1.grad 的值:", x1…...

Spring 事务传播行为

在Spring框架中,事务传播行为(Transaction Propagation)定义了事务在多个方法调用之间的行为方式。理解这些传播行为对于设计可靠的事务管理策略至关重要。以下是Spring支持的七种事务传播行为及其应用场景的详细说明: 1. REQUIRED(默认) 行为:如果当前存在事务,则加入…...

搬运机器人的基本工作场景及原理

搬运机器人广泛应用于工业生产中,主要用于搬运、堆放、装配等工作。它通过机械手臂的运动,结合机器视觉技术完成各种自动化作业。 一、搬运机器人的设计原理 搬运机器人通常采用可移动门架式结构,手臂承载机构安装在导轨上,可以沿…...

Ubuntu终端中常用的快捷键整理

1. 导航与编辑 光标移动: Ctrl A:跳转到行首。 Ctrl E:跳转到行尾。 Alt B:向左移动一个单词(或 Ctrl ←)。 Alt F:向右移动一个单词(或 Ctrl →)。 删除操作…...

mysql安装-MySQL MGR(Group Replication)+ ProxySQL 架构

文章目录 前言一、环境规划二、安装 MySQL 8.0.36(主库,CentOS 9)2.1 添加 Yum 源2.2 安装 MySQL 8.0.362.3 初始化 三、配置主库 my.cnf(192.168.1.101)四、(可选)创建远程可访问的用户&#x…...

Opencv使用cuda实现图像处理

main.py import os import cv2 print(fOpenCV: {cv2.__version__} for python installed and working) image cv2.imread(bus.jpg) if image is None:print("无法加载图像1") print(cv2.cuda.getCudaEnabledDeviceCount()) cv2.cuda.setDevice(0) cv2.cuda.printCu…...

ubuntu 安装samba

ubuntu 版本:Ubuntu 24.04.2 LTS 1. 保证连网 2. 安装samba sudo apt install samba 在安装结束以后,我们可以使用下面的命令来查看安装: apt list | grep samba freeipa-client-samba/noble 4.11.1-2 amd64 ldb-tools/noble 2:2.8.0samba…...

山东大学软件学院创新项目实训开发日志(12)之将对话记录保存到数据库中

在之前的功能开发中,已经成功将deepseekAPI接口接入到springbootvue项目中,所以下一步的操作是将对话和消息记录保存到数据库中 在之前的开发日志中提到数据库建表,所以在此刻需要用到两个表,conversation表和message表&#xff…...

欢乐力扣:反转链表二

文章目录 1、题目描述2、思路 1、题目描述 反转链表二。  给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 2、思路 参考官方题解&#xff0c;基本思路…...

【CS*N是狗】亲测可用!!WIN11上禁用Chrome自动更新IDM插件

现象&#xff1a;每次打开chrome后IDM会弹出提示插件版本不一致。经过排查后发现是chrome把IDM插件给更新了&#xff0c;导致IDM提示版本不匹配。经过摸索后&#xff0c;得到了可行的方案。 第一步&#xff0c;打开Chrome&#xff0c;把IDM插件卸载掉&#xff0c;然后重新安装I…...

Linux:DNS服务配置(课堂实验总结)

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 操作系统&#xff1a;rocky Linux 9.5 ​​一、配置DNS服务器的核心步骤​​ 步骤 1&#xff1a;安装 BIND 软件​​ ​​检查是否安装​​&#xff1a; rpm -qa | grep "^bind"…...

啥是Spring,有什么用,既然收费,如何免费创建SpringBoot项目,依赖下载不下来的解决方法,解决99%问题!

一、啥是Spring&#xff0c;为啥选择它 我们平常说的Spring指的是Spring全家桶&#xff0c;我们为什么要选择Spring&#xff0c;看看官方的话&#xff1a; 意思就是&#xff1a;用这个东西&#xff0c;又快又好又安全&#xff0c;反正就是好处全占了&#xff0c;所以我们选择它…...

【LeetCode】算法详解#4 ---合并区间

1.题目介绍 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 1 < intervals.length < 104interval…...

安装树莓派3B+环境

目录 一、安装树莓派3B环境 1.1 格式化SD卡 1.2 环境安装与配置 1.2.1 安装Raspberry Pi 1.2.2 SSH访问树莓派 1.3 创建用户账号 二、在树莓派上用C和Python编程运行一个简单的程序 2.1 C语言程序 2.2 Python程序 三、总结 树莓派是一款功能强大的微型计算机&#xf…...

​​STM32(3.3V 系统)通过串口直接向 ATmega328P(5V 系统)发送数据​​,居然能正常通信

​​核心结论​​ 如果 ​​STM32&#xff08;3.3V 系统&#xff09;通过串口直接向 ATmega328P&#xff08;5V 系统&#xff09;发送数据​​&#xff0c;​​3.3V 的 TX 高电平可能无法被 ATmega328P 可靠识别为逻辑“1”​​&#xff01;以下是详细分析&#xff1a; ​​1.…...

Java 8中的Lambda 和 Stream (from Effective Java 第三版)

42.Lambda 优先于匿名类 在之前的做法中&#xff08;Historically&#xff09;&#xff0c;使用单个抽象方法的接口&#xff08;或很少的抽象类【只有一个抽象方法的抽象类数量比较少】&#xff09;被用作函数类型。它们的实例称为函数对象&#xff0c;代表一个函数或一种行为。…...

MIPI协议介绍

MIPI协议介绍 mipi 协议分为 CSI 和DSI,两者的区别在于 CSI用于接收sensor数据流 DSI用于连接显示屏 csi分类 csi 分为 csi2 和 csi3 csi2根据物理层分为 c-phy 和 d-phy, csi-3采用的是m-phy 一般采用csi2 c-phy 和 d-phy的区别 d-phy的时钟线和数据线是分开的,2根线一对…...

深入解析 HTML 中 `<script>` 标签的 async 和 defer 属性

一、背景与问题 在网页性能优化中&#xff0c;脚本的加载和执行方式直接影响页面渲染速度和用户体验。传统 <script> 标签的阻塞行为可能导致页面“白屏”&#xff0c;而 async 和 defer 属性提供了非阻塞的解决方案。本周重点研究二者的差异、适用场景及实际应用。 二、…...

【从0到1学Elasticsearch】Elasticsearch从入门到精通(上)

黑马商城作为一个电商项目&#xff0c;商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的&#xff0c;存在很多问题。 首先&#xff0c;查询效率较低。 由于数据库模糊查询不走索引&#xff0c;在数据量较大的时候&#xff0c;查询性能很差…...

2.0 全栈运维管理:Linux网络基础核心概念解析、Proxmox网络组件详解、虚拟化网络模型分类

本文是Proxmox VE 全栈管理体系的系列文章之一&#xff0c;如果对 Proxmox VE 全栈管理感兴趣&#xff0c;可以关注“Proxmox VE 全栈管理”专栏&#xff0c;后续文章将围绕该体系&#xff0c;从多个维度深入展开。 摘要&#xff1a;Linux 网络基础借助桥接、VLAN 和 Bonding 实…...

案例驱动的 IT 团队管理:创新与突破之路: 第四章 危机应对:从风险预见到创新破局-4.1.3重构过程中的团队士气管理

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 案例驱动的 IT 团队管理&#xff1a;创新与突破之路 - 第四章 危机应对&#xff1a;从风险预见到创新破局4.1.3 重构过程中的团队士气管理1. 技术债务重构与团队士气的矛盾2…...

洛谷刷题小结

#include <iostream> using namespace std; int n, m,ans0; char s[105][105]; //深搜 void dfs(int x, int y) {//将搜索到的水坑看为干地s[x][y] .;//确定八个方向int next[8][2] {{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1},};//朝八个方向搜索for (in…...

Android Compose 权限申请完整指南

Android Compose 权限申请完整指南 在 Jetpack Compose 中处理运行时权限申请需要结合传统的权限 API 和 Compose 的状态管理。以下是完整的实现方案&#xff1a; 1. 基本权限申请流程 添加依赖 implementation "com.google.accompanist:accompanist-permissions:0.34…...

VirtualBox虚拟机转换到VMware

VirtualBox虚拟机转换到VMware **参考文章&#xff1a;**https://blog.csdn.net/qq_30054403/article/details/123451969 一.找到对应文件位置 Windows11系统&#xff0c;VirtualBox版本为6.1.50&#xff0c;VMware版本为17.5.2 1.首先找到自己需要转换的vdi文件位置 D:\v…...

Spring Boot(二十二):RedisTemplate的List类型操作

RedisTemplate和StringRedisTemplate的系列文章详见&#xff1a; Spring Boot&#xff08;十七&#xff09;&#xff1a;集成和使用Redis Spring Boot&#xff08;十八&#xff09;&#xff1a;RedisTemplate和StringRedisTemplate Spring Boot&#xff08;十九&#xff09;…...

【MySQL】关于何时使用start slave和start slave user=‘’ password=‘’

这个问题是我在配置三个服务器的复制拓扑时&#xff0c;一开始没有给复制用户 repl 创建密码&#xff0c;搭建好循环拓扑后&#xff0c;给server1的复制用户通过 ALTER USER USER() IDENTIFIED BY oracle 设置了密码&#xff0c;然后同步给了server2和server3。 这时server2突…...

(个人题解)第十六届蓝桥杯大赛软件赛省赛C/C++ 研究生组

宇宙超级无敌声明&#xff1a;个人题解&#xff08;好久不训练&#xff0c;赛中就是一个憨憨&#xff09; 先放代码吧&#xff0c;回头写思路。 文章目录 A. 数位倍数B. IPv6C. 变换数组D. 最大数字E. 冷热数据队列F. 01串G. 甘蔗H. 原料采购 A. 数位倍数 问&#xff1a; 在1至…...

GitLab + Jenkins + .Net8 实现CICD部署

前提条件&#xff1a;需要安装好 Jenkins 和 GitLab 。 1. Jenkins配置 登录 Jenkins 找到自己的一个任务&#xff0c;点击配置&#xff08;没有任务就新建&#xff09;。 按图操作 点击高级展开后截图&#xff0c;点击生成Token 配置好自己的作业&#xff08;我的是一个 .Ne…...

AI工具导航 快速找到喜欢的AI工具 功能使用介绍

此篇文章内容来源CTO Plus技术服务栈官网&#xff1a;http://www.mdrsec.com/ 在人工智能技术迅猛发展的2025年&#xff0c;AI工具的数量和种类呈爆炸式增长&#xff0c;涵盖文本生成、图像创作、视频编辑、编程辅助等多个领域。面对琳琅满目的AI工具&#xff0c;如何高效筛选和…...

[题解] Educational Codeforces Round 168 (Rated for Div. 2) E - level up

链接 思路 1 注意到在 k ∈ [ 1 , n ] k \in [1,n] k∈[1,n] 可以得到的最高等级分别为: n , n 2 , n 3 . . . . . n n n,\frac{n}{2},\frac{n}{3}.....\frac{n}{n} n,2n​,3n​.....nn​, 总的个数是一个调和级数, s u m n ∗ ln ⁡ n sumn*\ln n sumn∗lnn, 完全可以处…...

达梦数据库-学习-19-兼容ORACLE相关参数介绍

目录 一、环境信息 二、介绍 三、参数 一、环境信息 名称值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系统CentOS Linux release 7.9.2009 (Core)内存4G逻辑核数2DM版本1 DM Database Server 64 V8 2 DB Version: 0x7000c 3 03134284194-202…...

如何通过 Spring 层面进行事务回滚?

Spring 中事务可以分为声明式事务和编程式事务&#xff0c;那么解下来就从这两方面说一说在 Spring 层面个怎么进行回滚 声明式事务回滚&#xff1a; 1. 基础注解配置 通过Transactional注解实现自动回滚&#xff0c;默认对RuntimeException和Error生效 Transactional publ…...

学Qt笔记

使用的是Qt SDK5.14.0 根据比特汤众老师的课程学习 先叠个甲&#xff1a;本人正在学qt&#xff0c;视角还不完备&#xff0c;如有错误请多多包含 选了widget开始学习 1.qt creator设计提供了拖拽式的编辑ui的控件&#xff0c;和代码直接编辑构建的方式 2.浅浅的认识了qt的对…...

【HarmonyOS 5】鸿蒙实现手写板

​ 【HarmonyOS 5】鸿蒙实现手写板 一、前言 实现一个手写板功能&#xff0c;基本思路如下&#xff1a; 创建一个可交互的组件&#xff0c;用户在屏幕上触摸并移动手指时&#xff0c;会根据触摸的位置动态生成路径&#xff0c;并使用黑色描边绘制在屏幕上。当用户按下屏幕时…...

JavaWeb 课堂笔记 —— 09 MySQL 概述 + DDL

本系列为笔者学习JavaWeb的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;涵盖SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习…...

设计模式 --- 访问者模式

访问者模式是一种行为设计模式&#xff0c;它允许在不改变对象结构的前提下&#xff0c;定义作用于这些对象元素的新操作。 优点&#xff1a; 1.​​符合开闭原则&#xff1a;新增操作只需添加新的访问者类&#xff0c;无需修改现有对象结构。 ​​2.操作逻辑集中管理​​&am…...

【Linux C】简单bash设计

主要功能 循环提示用户输入命令&#xff08;minibash$&#xff09;。创建子进程&#xff08;fork()&#xff09;执行命令&#xff08;execlp&#xff09;。父进程等待子进程结束&#xff08;waitpid&#xff09;。关键问题 参数处理缺失&#xff1a;scanf("%s", buf)…...

如何在Agent中设置Memory

什么是LLM代理&#xff1f; LLM代理可以被定义为能够对环境采取行动的大型语言模型。代理的主要组成部分包括&#xff1a;记忆、规划、提示、知识和工具。大型语言模型可以被视为这个架构的大脑&#xff0c;而其他所有组件则是代理正常工作的基础模块。 代理的组成部分 1. 提…...

【强化学习-蘑菇书-3】马尔可夫性质,马尔可夫链,马尔可夫过程,马尔可夫奖励过程,如何计算马尔可夫奖励过程里面的价值

欢迎去各大电商平台选购纸质版蘑菇书《Easy RL&#xff1a;强化学习教程》 文章是根据 蘑菇书EasyRL &#xff0c;网络查找资料和汇总&#xff0c;以及新版本的python编写的可运行代码和示例&#xff0c;包含了一些自己对书内容的简单理解 一、 马尔可夫性质 在随机过程中&a…...

leetcode 718 最长公共子数组

这个题目和最长公共子数组&#xff0c;类似于镜像题&#xff0c;子问题比较难想。对于 d p [ i ] [ j ] dp[i][j] dp[i][j] &#xff0c;定义为分别以 i i i 和 j j j 结尾的最长公共子数组&#xff08;公共后缀&#xff09; 核心代码&#xff1a; if(nums1[i-1] nums2[j-…...

【C++】继承:万字总结

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲面向对象三大特性之一——继承 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C学习笔记 &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C语言入门基础&#xff0c;py…...

java和c#的相似及区别基础对比

用过十几种语言&#xff0c;但是java和c#是最为重要的两门。c#发明人曾主导开发了pascal和delphi&#xff0c;加入微软后&#xff0c;参考了c和java完成了c#和net。大家用过java或c#任意一种的&#xff0c;可以通过本篇文章快速掌握另外一门语言。 基础语法 变量声明&#xf…...

TP8 PHP 支付宝-通用版-V3 SDK 接口加签方式为证书方式

TP8 已安装支付宝-通用版-V3 SDK 接口加签方式之前使用密钥方式&#xff0c;现在要使用证书 官方文档小程序文档 - 支付宝文档中心 SDK源码仓库https://github.com/alipay/alipay-sdk-php-all/tree/master/v3 第一步&#xff1a;生成证书 需要先下载支付宝官方工具&#xff1a…...