万字长文,大模型的模型压缩及效率推理综述

模型压缩常用方法简介 阅读详情

导读

大语言模型在自然语言处理任务取得了显著的成功,但其过大的规模和计算需求给实际部署带来了重大挑战。然而,模型压缩已经成为缓解这些限制的关键领域。对此,本文深入学习大模型的模型压缩与有效推理,值得点赞收藏!

1 介绍

本文对大型语言模型的压缩和效率推理进行了综述。大型语言模型基于Transformer架构,具有强大的性能,但也带来了巨大的内存和计算成本。本文从算法角度对大型语言模型的压缩和效率推理方法进行了分类,包括量化、剪枝、知识蒸馏、紧凑架构设计和动态网络。大型语言模型有两个显著特点:

(1)大多数压缩算法需要在压缩后对模型进行微调和甚至重新训练,而大型模型的微调和训练成本非常高。因此,许多算法,如量化和剪枝,开始探索免调优算法。(2)大型模型强调通用性和泛化能力,而非单一任务的性能。因此,许多算法,如知识蒸馏,关注如何在压缩后保留其通用性和泛化能力。

2 基本知识

2.1 Transformer

Transformer 是一种用于机器翻译的模型,其基本结构如图1所示。Transformer 的输入(一个句子)通常通过嵌入层投影为一系列向量(称为标记)作为 Transformer 的输入。

图片

图1 Transformer 基本结构

每个 Transformer 块由一个注意力模块和一个多层感知器(MLP)模块组成。注意力模块将查询和一组键-值对映射到输出,输出是值的加权和,权重由兼容性函数计算得出。注意力模块可以描述为将查询和键-值对映射到输出的函数。兼容性函数通常是点积函数,其中权重是查询与相应的键的点积,√d是缩放因子。多头注意力将输入标记映射到h个不同的查询、键和值({Qi,Ki,Vli∈[1,h]}),然后使用不同的线性层。最终输出是:多头注意力=连接(head1,…,headn)W。head;=注意力(Qi,Ki,Vi),其中Wo是线性投影矩阵。

Transformer 的编码器和解码器结构有所不同。编码器首先独立地处理输入序列(例如,用源语言编写),解码器将编码器的输出作为输入并预测最终输出(例如,目标语言)。编码器和解码器的注意力模块有两个核心区别:(1)编码器使用全注意力,其中输入序列中的任何两个标记都是可见的,输出标记只能看到之前的输出标记;(2)编码器使用自注意力模块,即 Q、K、V 都来自输入标记的注意力,其中 K、V 来自编码器的输出,而 Q 是解码器的最后一个输出标记。

2.2 中/大型语言模型

本文将语言模型分为中等规模和大规模两类。中等规模的语言模型参数规模在1亿以下,大规模的语言模型参数规模在1亿以上。大规模的语言模型相较于中等规模的语言模型,具有更强的泛化能力和通用性,能够处理更复杂的任务。然而,大规模的语言模型在压缩和加速方面也面临着更大的挑战。

2.3 参数高效的微调(PEFT)

参数高效的微调(PEFT)是指在微调过程中尽量减少需要调整的参数数量或微调的轮数,以降低微调成本。对于中等或大型模型,全参数微调和训练成本非常高。因此,许多参数高效的微调算法被提出,旨在尽可能减少需要调整的参数或微调的轮数。

3 量化

量化是指将输入值从一个较大的连续集合映射到一个较小的有限集合的过程。它是降低大型语言模型内存成本和加速推理的最直接方法,特别是在支持低比特数据类型快速操作的硬件上。量化方法有许多优点,例如减少内存占用、提高推理速度等。

3.1 基本概念

  • 均匀量化:将实数范围内的连续值映射到有限数量的离散值,以减少表示数据的位数。均匀量化中,相邻离散值之间的距离相等,且离散值是均匀分布的。
  • 非均匀量化:非均匀量化是均匀量化的对立面,其中量化值不一定是均匀分布的,且量化间隔的长度不一定相同。非均匀量化可以更好地适应数据的分布,从而在保持相同精度的情况下,减少量化误差。
  • 剪切范围和校准:剪切范围是指将实数范围内的连续值映射到有限数量的离散值时,相邻离散值之间的距离。校准是指选择合适的剪切范围,以最小化量化误差,通常使用最小/最大值(即-α=rmin,β=Tmax)或使用绝对最大值化损失(即KL散度)来选择剪切范围。
  • 对称/非对称量化:对称量化和非对称量化是量化方法的两种类型。对称量化是指量化范围关于0对称,即a=-β,此时对应的量化方法称为对称量化;否则称为非对称量化。
  • 量化粒度:量化粒度是指在量化过程中,将权重或激活值划分为多少个组进行量化。常见的量化粒度包括层粒度、通道粒度、组粒度等。
  • 训练后的量化PTQ/量化感知训练QAT:PTQ是一种在训练后对模型进行量化的方法,不需要重新训练模型,通常将权重和激活值量化为较低的精度,以减少模型大小和计算成本。QAT是一种在训练过程中对模型进行量化的方法,旨在最小化量化引起的性能损失,通过在训练过程中引入量化误差来调整模型权重,以最小化量化误差。
  • 静态/动态量化:静态量化在推理过程中使用固定的量化参数,而动态量化在推理过程中根据输入数据动态调整量化参数。
  • 模拟/仅整数量化:模拟量化在运行时动态调整量化参数,可以减少神经网络的内存成本和数据传输时间,通常比静态量化更准确,但计算开销较高。仅整数量化可以进一步享受特定硬件支持的高效低比特操作。
  • 仅权重/权重+激活量化:仅权重量化只量化权重,可以进一步享受特定硬件支持的高效低比特操作,但可能会损失一些精度。而权重+激活量化同时量化权重和激活,可以更好地适应输入数据的分布,但计算速度较慢。

3.2 中型语言模型的量化方法

本节主要讨论了中型语言模型的量化方法,小于或接近1B大小的模型被称为中型语言模型,如BERT、GPT-2和BART。

量化方法主要采用QAT框架而不是PTQ,因为重新训练中型语言模型的代价相对可以接受。重新训练带来的评估指标(例如精度)的改进是显著的,特别是在极端低比特设置(例如1比特或2比特量化)下。

中等规模语言模型中的QAT。 QAT是一种在训练过程中引入量化误差的方法,可以在不损失模型性能的情况下实现模型压缩。QAT技术在中等规模语言模型中的应用主要体现在将BERT类模型中的权重向量化到INT8,例如Q8BERT将BERT模型中的权重和激活都量化为8位,而没有显著降低模型性能。有些工作使用更复杂的方法实现了低于8位的量化宽度,例如Q-BERT将激活保持在8位,并将混合精度权重降低到2/3位。TernaryBERT将权重限制在-1,0和+1之间,仅使用2位,并使用8位的激活。BinaryBERT将BERT的量化限制为权重二值化,即权重限制在{-α,+α}中。BiBERT是BERT的全二进制化(即1位权重、嵌入和激活)。一些工作在模型性能退化和量化位宽之间实现了自动平衡,例如赵等人利用可微神经架构搜索方法来自动分配参数的精度。

中等规模语言模型中的PTQ。 PTQ(Post-Training Quantization)是一种在训练后对模型进行量化的方法。PTQ不需要重新训练整个模型,而是通过在训练后引入量化误差来实现模型压缩。GOBO将大多数权重进行3位量化,少数异常权重单独保存为FP32。I-BERT为特定的非线性函数设计了仅整数近似的方法,无需任何浮点运算即可实现端到端仅整数BERT推断。Dai等使用更精细的粒度来减少量化误差,将权重和激活量化为4位,并使用校准集来确定每个组的缩放因子。此外,精心定制的PTQ方法所得到的量化参数,可以作为QAT方法重新训练的一个良好的初始化点。

量化生成的中型语言模型。 尽管对BERT类模型进行量化的方法取得了成功,但在生成语言模型(如GPT、BART)出现之前,对生成式LLM进行量化的尝试却很少见。量化误差在token-by-token生成过程中逐个累积,因此量化生成式语言模型通常是一个更复杂的问题。Tao等人的研究发现,直接将专为BERT类模型设计的量化方法应用于生成语言模型会受到同质词嵌入和权重分布差异的阻碍。为了解决这些挑战,作者提出了两个解决方案:token级别的对比性引导和模块依赖的动态缩放。DQ-BART使用QAT框架和一种序列到序列模型的量化和去噪训练目标,即BART,进行去噪训练。DQ-BART采用标准对称均匀量化,并设定训练目标为最小化量化后的低精度学生模型和全精度教师模型之间的输出logits、注意力以及隐藏状态之间的差异。

3.3 LLM的PTQ

针对LLM的PTQ工作分为两类:仅权重量化和权重+激活量化。

仅权重量化(Weight-Only Quantization)只对模型的权重进行量化,以减小模型大小,降低内存占用和计算成本。权重量化方法可分为有符号量化和无符号量化,通常采用量化误差最小化的方法。基于训练后量化的方法在训练完成后对权重进行量化,而基于量化感知训练的方法在训练过程中对权重进行量化。权重量化方法可以实现不同程度的模型压缩,例如,GPTQ和QulP等方法可以将权重量化为2位或更低的精度,从而显著降低内存占用和计算成本。

权重+激活量化是一种深度学习模型压缩方法,通过将权重和激活值转换为较低精度表示,减少模型大小和计算复杂度。这种方法在移动端推理、边缘计算、嵌入式系统等领域具有广泛应用,可以显著提高推理速度、降低存储空间需求和减小计算复杂度。具体实现方法包括二值化量化、8位量化、自适应量化等。

3.4 对LLM的量化感知训练(QAT)

量化感知训练是一种重新训练量化模型的方法,用于从量化引起的性能下降中恢复。这种方法通常涉及整个模型的全部参数重新训练,但对于LLM来说成本太高。因此,一些尝试将量化与参数高效的训练方法相结合,以显著降低LLM上QAT的成本。当前针对LLM的QAT方法分为两类:全参数重新训练和参数-高效再训练。其中,参数-高效再训练是一种更有效的LLM QAT方法。

全参数重新训练是指在量化 LLM 时,对 LLM 进行完整的参数重新训练。这种方法的主要挑战是如何在不损害 LLM 的涌现能力的情况下,在较小的数据集上重新训练 LLM。当前的方法通常结合 QAT 和蒸馏来保留原始模型的这些能力。LLM-QAT 直接应用基本的 QAT 框架到 LLM,并使用数据生成方法生成数据,然后使用原始 LLM 对生成的数据进行训练,以匹配量化 LLM 的输出分布。这种方法还允许量化和 QAT 键值缓存,这在长句生成过程中占用大量内存。为了减轻重新训练完整 LLM 的成本,可以使用边缘蒸馏方法。

参数-高效再训练是指采用参数高效的方法重新训练LLM。本节讨论了使用LoRA、适配器、提示调整等方法对LLM进行微调的一系列工作。其中,LoFTQ和LACos-BLOOM等提出了改进的量化方法,而INT2.1则将额外的可训练参数用于LoRA矩阵的优化。其他工作则结合了量化和适配器以及提示调整等方法。这些工作有助于提高LLM的性能和效率。

3.5 关于LLM量化的其他主题

量化相关工作还包括与量化的算法共同设计高效的内核,设计对硬件友好的量化方法,并将量化方法集成到实际应用中。例如,LUT-GEMM是为扩展版本的BCQ方法设计的有效内核,可以表示均匀和非均匀量化。其他有意义的作品研究LLM量化的内在特性,例如,Dettmers和Zettlemoyer在BLOOM、OPT、NeoX/Pythia和GPT-2等LLM家族中进行了大规模实验,使用16位激活和k位权重的组合(3≤k≤8),规模为19M到176B参数。一些工作还专注于研究LLMs中出现系统性异常值的原因,并寻找从源头抑制异常值的方法。例如,可量化变压器认为激活中的异常值是由于注意力头部的行为,注意力头部试图避免更新残差。

4 剪枝

神经网络剪枝是一种用于压缩和加速的技术,通过消除非必要的权重或结构来保持网络性能水平。尽管剪枝在CNN中显示出显著效果,但在LLMs中效果不太稳定。剪枝效果不那么有效的原因在于微调成本高昂,但剪枝对于模型压缩至关重要,需要进一步探索以增强和改进其效果。剪枝技术对于LLMs的优化和性能提升具有重要意义。

4.1 基本概念

  • 剪枝单元:剪枝单元在剪枝过程中起到关键作用,包括权重、神经元、注意力头、层等。非结构化剪枝关注单个权重,可以获得更高的稀疏度比并保持更好的性能,但计算效率较低。结构化剪枝可以轻松实现推理速度提升,但稀疏度比低于非结构化剪枝模型。在结构化剪枝中,需要避免集成结构删除导致模型性能下降。
  • 剪枝度量:剪枝度量是决定元素是否被剪枝的准则,主要分为三类:基于幅度、基于损失和基于正则化。基于幅度的剪枝方法通过比较权重的绝对值确定重要性;基于损失的方法通过比较权重的梯度或梯度加权和确定重要性;基于正则化的方法通过比较权重的L1或L2范数确定重要性。这些方法可单独或组合使用,如GBLM-Pruner结合了基于幅度和基于正则化的方法以获得更好的剪枝效果。
  • 动态/静态剪枝:动态/静态剪枝是指在训练过程中对模型进行剪枝的方法。动态剪枝在训练过程中实时调整模型结构,适应数据分布的变化,但计算复杂度较高;静态剪枝在训练结束后一次性剪枝,计算复杂度较低,但可能无法充分利用数据分布的信息。
  • 迭代/一次性剪枝:迭代式方法通过多次迭代训练、剪枝和微调,保持模型性能,但计算时间长。一次性方法只进行一次剪枝,不迭代和微调,计算时间短,但可能影响模型性能。迭代式方法常用于较小模型,一次性方法常用于较大模型。
  • 全局/局部剪枝:全局剪枝将比较所有剪枝单元,以识别并消除不重要的单元,可能导致特定区域过度剪枝。局部剪枝则对每个区域的稀疏性施加约束,确保每个区域内的稀疏度比率不会过低,从而降低模型崩溃的风险。
  • 数据驱动和免数据裁剪:数据驱动和免数据裁剪是两种不同的网络裁剪方法,数据驱动依赖于可用数据,表现更优,而免数据裁剪独立于数据输入执行网络裁剪。Magnitude Pruning是最广泛采用的裁剪方法,简单易实现且在许多复杂方法中取得了具有竞争力的结果,同时解决了在某些场景下数据集可能不可用的挑战。
  • 上/下游剪枝:语言模型训练包括预训练和微调两个阶段。上游修剪在微调前对模型进行修剪,保留模型对多种任务的适应性,确保其多功能性;下游修剪在微调过程中进行修剪,指导模型专注于一个明确的任务。两者各有特点,根据实际需求选择合适的方法。

4.2 中型语言模型的剪枝方法

针对语言模型的专业设计剪枝方法具有独特性,不同于传统的剪枝方法。它专门针对基于转换器的模型和适用于多种不同架构模型的通用方法。这些剪枝方法可分为无结构方法和结构化方法。

4.2.1 针对中型语言模型的非结构化剪枝

非结构剪枝方法在不考虑约束的情况下,将非必要权重置为零。接下来介绍了三种修剪方法:基于规模的剪枝、基于损失的剪枝和正则化。这些技术有助于减少模型参数数量,提高模型性能和效率。

基于规模的剪枝是指根据模型的大小来选择合适的剪枝方法。基于规模的剪枝方法,将权重的规模和激活值的规模纳入到剪枝度量中,其中幅度修剪是最常用的方法,在研究中被应用于中型语言模型。Gordon等人通过幅度修剪压缩BERT,结果表明约30-40%的权重是不必要的,丢弃不会影响BERT的性能。渐变幅度修剪和GMP⋆等方法引入了稀疏度比例计划,在整个修剪过程中逐渐降低稀疏度比例,这种方法允许在随后的修剪步骤中更多的恢复时间,最终导致性能改善。

基于损失的剪枝是一种通过分析权重对损失函数的贡献来确定哪些权重可以被剪枝的方法。它通常比基于权重大小的剪枝方法更准确,因为它考虑了权重在特定任务中的重要性。基于损失的剪枝主要有两种方法:基于梯度的剪枝和基于Hessian矩阵的剪枝。基于梯度的剪枝包括OBD和OBS等,基于Hessian矩阵的剪枝包括L-OBS和L-OBD等。这些方法在语言模型剪枝中取得了很好的效果,例如SparseGPT和LLM Surgeon方法。

正则化方法包括L1、L2和Lo正则化,其中Lo正则化在模型压缩中更常用。Lo正则化将权重的Lo范数纳入损失函数,实现非零权重的稀疏化。然而,离散的Lo范数在梯度下降优化中存在挑战,因此使用硬混凝土分布作为二进制掩码的近似,如图4。

图片

图4 使用蒙特卡洛模拟对硬混凝土分布的近似概率密度直方图。该硬混凝土分布的参数为对数α=0,β=0.5,γ=−0.1,和ζ=1.1。在该规格下,硬混凝土分布大致将其质量的一半分配到{0,1}中,其余分配到(0,1)中。

**其他。**非结构剪枝方法与N:M稀疏性集成,可以解决稀疏矩阵的非规则性质带来的挑战,提供纯非结构化方法可能缺乏的推理速度提升。N:M稀疏性原则要求在神经网络中连续的M组权重中,不超过N个权重具有非零值,底层硬件可以压缩经常出现的零值,实现推理加速。这种方法在保持模型性能的同时,显著提高了计算速度。

4.2.2 针对中型语言模型的结构化剪枝

无结构剪枝方法虽然能实现高稀疏度并保持性能,但不一定能在普通硬件上实现推理加速。在应用于中型语言模型的有序剪枝方法中,选择适当的剪枝单位与度量同样重要。使用与模型架构相关的结构作为剪枝单元往往能产生更理想的结果。接下来将深入探讨结构化剪枝的领域,包括基于权重的剪枝、基于损失的剪枝和正则化技术。

**基于权重的剪枝。**修剪单元权重的加权和可以作为有意义的表示,广泛应用于CNN中的卷积核。该方法也可扩展到中型语言模型,例如通过将权重大小与L2范数加权和,表示注意力头、FFN神经元和权重块的重要性。然后,根据重要性得分排序,去除不重要的结构。

**基于损失的剪枝。**在基于损失的剪枝方法中,对注意力头部的探索和分析得到了相当的关注。头部剪枝方法可以显著提高模型性能和推理速度,同时保持测试准确性。此外,块移动修剪方法通过考虑任意大小的块并集成到运动修剪中来扩展结构方法,同时与FFN中神经元修剪的组合可以获得最佳的整体性能。此外,一些结构化剪枝方法可以泛化,因为其中的剪枝单元是神经元。

**正则化。**正则化方法包括L0和L1正则化。其中,L0正则化因其广泛的应用而脱颖而出,而L1正则化也得到了相关研究。这些方法主要应用于注意力头的剪枝,包括因子化低秩剪枝、粗粒度和细粒度剪枝等。这些方法通过结合稀疏性诱导的目标学习得到不同大小的剪枝模型,并可以通过微调提高性能。这些方法在实验中实现了超过10倍的速度提升,同时精度只略有下降。

**其他。**结构化修剪还有层修剪、令牌修剪等方法。层修剪涉及在推理过程中删除不重要的令牌以减少计算需求。学习令牌剪枝是一种直接有效的方法,根据输入序列穿过转换器层的情况来适当地删除不重要令牌。每个令牌的剪枝度量由Transformer块中归一化注意力概率的总和确定。此外,还有谱归一化身份先验(SNIP)等单元,它采取策略来剪枝注意力层和FFN子层。这些方法有助于减少计算需求并提高模型性能。

4.3 LLM的修剪方法

本节介绍了针对LLM的剪枝方法,包括其顺序和特点,并进行了全面的比较。这些方法采用与中等规模语言模型所使用的并行方法相同的方法,但省略了微调过程。表3总结了LLM的各种修剪方法,这些方法在LLM领域具有广泛的应用前景。

表3 对LLM的各种修剪方法的总结

图片

4.3.1 LLM的非结构化剪枝

非结构剪枝方法在保持模型性能方面具有优势,能够实现50%的稀疏度比率,被广泛用作后续方法的基准。后续方法在NLP任务中超越了这些方法,取得了优越的结果。虽然这些方法难以提高推理速度,但它们可以与N:M稀疏性结合以加速推理速度。这些方法需要最少的校准数据,即对模型的一次前向传递专门获取激活值或梯度以计算权重的重要性。LLM的非结构化剪枝可分为基于规模的剪枝方法和基于损失的剪枝方法。

基于规模的剪枝方法将权重幅度和激活值结合作为剪枝度量。例如,Wanda和RIA使用权重幅度和激活度量,E-Sparse还引入信息熵到度量中。Wanda引入一种新颖的修剪度量,同时考虑了权重和激活值的幅度,认为权重的意义不应该孤立地评估,而应该考虑它与相应激活值的产品。RIA也同时考虑权重和激活,主要区别在于其缓解通道腐败的方法,用相对重要性取代了权重的幅度。E-Sparse引入了隐藏状态特征的信息熵到剪枝度量中,熵作为信息丰富度的度量,数值越高表示信息越丰富。

基于损失的剪枝方法包括二阶和一阶方法。其中,SparseGPT是一种高效的二阶剪枝方法,将OBS技术融入GPT家族模型中,并使用稀疏性比率分配给每个权重矩阵。此外,还介绍了基于OBS和OBD的概念,以及一种新型剪枝度量ISC。一阶方法中,GBLM-Pruner是一种基于梯度的语言模型剪枝方法,通过与权重的幅度以及不同样本的相应梯度的归一化相乘来定义权重。

4.3.2 LLM的结构化剪枝

LLM的结构剪枝方法不依赖硬件,能加速推理,但需微调以恢复性能。LLM-Pruner作为基准,促进比较。微调虽在非结构剪枝中不再使用,但LLM中仍广泛采纳。LLM的结构化剪枝涵盖基于规模的剪枝、基于损失的剪枝和正则化。

基于规模的剪枝方法考虑行或列作为剪枝单位。例如,基于波动自适应结构化剪枝(FLAP)的剪枝单位是列。权重矩阵中每个列的重要性得分通过“波动度量”来测量,该度量是输入特征的样本方差,其中权重与权重矩阵相应列的平方范数相关联。此外,FLAP还纳入了旨在减轻组件删除所产生的负面影响偏差补偿机制,以消除微调的必要性。

基于损失的剪枝方法中,梯度信息至关重要。一些方法利用梯度信息来定义剪枝结构、选择剪枝目标等。其中一些方法可以动态地识别和指定剪枝单元,如LLM-Pruner和LoRAShear。此外,Ji等人提出了一种新颖的方法,使用非神经模型作为精度预测器来自动识别最佳修剪模型。这种方法通过评估和预测不同修剪配置对神经网络精度的冲击,促进更有效和自动化的最佳修剪模型选择。这些方法在保持模型性能的同时实现高稀疏比率具有挑战性。

正则化方法包括剪枝LLaMA和Compresso。剪枝LLaMA通过联合修剪粗粒度和细粒度模块,引入了目标结构剪枝和动态批量加载两个新颖组件,实现了紧凑替代方案并优于从头开始训练的模型。Compresso将LoRA集成到L0正则化中,通过协作剪枝范式提高LLM在剪枝过程中的理解和合作,从而提高性能并适应修改后的模型结构。

4.4 关于LLM剪枝的其他主题

**提高LLM的剪枝效率。**为了增强针对LLMs的定制修剪方法的有效性,开发出了几种辅助技术,包括针对子区域定制的稀疏性比率、后修剪微调方法和硬件优化。其中一种定制稀疏比率的方法是“离群加权分层稀疏”(OWL),它引入了一套定制的非均匀分层稀疏比率。另一种后修剪微调方法是“动态稀疏无训练”,它无需完整的微调过程即可进一步细化稀疏LLM。这些技术可以提高现有剪枝方法(如Wanda和SparseGPT)的性能,表明剪枝性能的潜在提升可以通过各种与剪枝方法核心无关的手段实现。

LLM剪枝的未来工作。 LLM剪枝领域面临两个重要挑战,一是将剪枝与其他方法结合以提高性能,二是微调成本高。科研人员和从业人员需应对无法执行完整微调的挑战,特别是当处理旨在增强剪枝性能的LLM时。解决这些挑战对于提高剪枝技术的有效性和实用性至关重要。

5 知识蒸馏(KD)

知识蒸馏是一种将教师模型的知识转移给学生模型的技术,用于压缩和加速模型,以更简洁和更有效的方式表示教师模型的知识。

5.1 基本概念

图片

图5 知识蒸馏分类

  • Logit-based KD 是一种基于输出概率的知识蒸馏方法,它通过最小化学生模型和教师模型之间的输出概率差异来实现知识传递。这种方法通常使用 KL 散度作为损失函数,将教师模型的输出概率作为目标,引导学生模型学习教师模型的输出分布。这种方法的优点是可以直接优化模型输出,避免引入额外的中间表示。
  • Feature-based KD 是一种基于特征的知识蒸馏方法,它通过匹配教师模型和学生模型的输出特征来传递知识。这种方法要求学生模型不仅要知道结果,还要理解底层过程。
  • Relation-based KD 是一种基于关系的知识蒸馏方法,它旨在让学生模型学习教师模型如何处理关系型知识。这种关系主要体现在两个方面:同一样本在不同层的输出关系和不同样本的输出关系。
  • Black-box KD 是一种黑盒知识蒸馏方法,它不需要访问教师模型的内部信息,而是通过教师模型的预测结果来传递知识。这种方法适用于大型模型的知识蒸馏,因为大型模型的内部信息通常是不可访问的。黑盒知识蒸馏的损失函数通常包括预测损失和关系损失两部分,其中预测损失用于衡量学生模型和教师模型预测结果的差异,关系损失用于衡量学生模型和教师模型在处理关系型知识时的差异。黑盒知识蒸馏的主要优点是可以更好地模拟教师模型的行为,但缺点是需要更多的计算资源。

5.2 中等规模语言模型的知识蒸馏方法

中等规模的语言模型基于transformer结构,通过预训练和微调两个阶段进行训练。预训练阶段使用大规模的无标签数据集,学习语言的通用特征和结构;微调阶段使用带标签的数据,使其适应特定任务。模型蒸馏可分为微调蒸馏和预训练蒸馏两类。表4展示了各种中等规模模型蒸馏方法的训练阶段、知识来源和损失函数。

表4 BERT各种KD方法的总结。嵌入、注意力、隐藏和预测代表知识分别来自嵌入、注意力机制、隐藏层和模型的预测。

图片

微调蒸馏计算成本高,因此提出了许多微调知识蒸馏方法来减少成本。预训练蒸馏可以减少针对特定任务的计算成本,但带来新的挑战。教师模型比学生模型具有更大的容量和更强的表示能力,学生模型在大量开放域训练数据上产生与教师模型匹配的预测是一项具有挑战性的任务。因此,选择预训练蒸馏和微调蒸馏之间的通用方法取决于如何在模型大小和性能之间进行权衡。

5.3 大语言模型的知识蒸馏方法

大型语言模型数量不断增加,但许多模型是闭源的,这限制了学生模型的知识获取。通过利用教师模型的响应,即知识剩余来源,我们可以将信息传递给学生模型,实现知识蒸馏。根据学生模型的知识来源是否仅限于教师模型提供的答案,可以将大型语言模型的知识蒸馏分为黑盒蒸馏和白盒蒸馏。黑盒蒸馏适用于学生模型可以从教师模型响应之外的其他来源获取知识的场景,而白盒蒸馏适用于学生模型只能从教师模型响应中获取知识的场景。

黑盒知识蒸馏。 研究人员发现,当模型的参数足够大时,LLMs表现出涌现能力,能够处理复杂的任务。黑箱蒸馏方法利用这种能力,通常使用三种常见的方法:指令跟随、思想链和上下文学习。此外还有还有其他方法生成特定的强化数据集,例如使用符号知识折衷为常识模型获得高质量的常识知识图谱,DISCO使用LLM获取反事实数据并过滤以获得高质量数据集以提高学生在NLI任务中的能力,PubMedBERT提出了一种全新框架处理不良事件实体和ADE关系提取,以及Promptmix使用LLM根据比例混合和重新标记文本数据用于分类问题以获得更强大的训练数据集。

白盒知识蒸馏。 白盒蒸馏的研究工作相对较少,但仍有一些探索。MINILLM和GKD等模型专注于损失函数,并使用反向KL散度来帮助学生从教师分布中学习。此外,Padmanabhan等人通过提示语言模型生成转移集,使学生的分布与转移集上的教师分布相匹配。TSLD利用判别概率表征进行标记化,以减少在应用QAT时引入的错误。MiniMA发现当学生模型的大小约为教师模型参数数量的40%时,最佳的蒸馏效果会出现。这些方法都旨在帮助学生训练,并利用教师提供的信息来增强学生的表达能力。

6 紧凑架构设计

紧凑架构设计是一种提高效率和精简的理念,通过优化网络结构和算法,显著提高模型效率,同时减少计算资源和内存的使用。它可分为微观和宏观两个层次进行研究,重点优化注意力计算和Transformer架构设计。

6.1 高效注意力

Transformer中的标准自注意力机制时空复杂度为O(N2),阻碍了处理长序列问题的能力。为了解决这个问题,出现了高效注意力工作,包括稀疏注意力、线性近似注意力和闪存注意力等。

稀疏注意力方法允许每个标记只关注局部或主要相关的项,从而实现稀疏注意力模式,从而降低计算和内存需求。稀疏注意力方法可以分为基于全局、基于窗口和基于数据三种方法。基于全局的方法包括全局注意力、基于窗口的方法包括局部注意力和固定注意力模式,基于数据的方法包括随机注意力和数据驱动的稀疏注意力。

图片

图6 比较稀疏注意力模式。(a) 完全自注意力(b) 步长注意力© 窗口注意力(d) 全局注意力

线性近似注意力方法以解决标准注意力计算中存在的二次时间复杂度问题。线性近似注意力计算方法可以分为基于关联性和低秩的方法。基于关联性的方法通过计算 KTV 并利用软最大化实现线性注意力,而低秩方法则通过将 QKT 分解为低秩矩阵实现线性注意力。

6.2 神经架构搜索(NAS)

NAS是一种通过搜索算法自动寻找最优神经网络结构的方法。这种方法可以避免手动设计神经网络结构的繁琐过程,并且能够找到在特定任务上表现更好的模型结构。HAT 是一种神经架构搜索方法,它通过构建一个 Super Transformer 来近似包含搜索空间中的所有 Sub Transformer 模型,并通过延迟预测器预测延迟,从而加速搜索过程。这种方法可以避免昂贵的重新训练,并且可以观察到一些重要的性质。

7 动态网络(DyNN)

动态网络(DyNN)是一种在资源受限环境下处理大型语言模型(LLM)的方法,它只使用网络的一部分来处理每个输入,从而降低计算和内存需求。在自然语言处理(NLP)和LLM领域,当前的DyNN研究主要包括三种方法:早期退出、级联推理和混合专家(MoE)。早期退出旨在在深度神经网络的早期层动态终止推理过程,以减少响应时间。级联推理将模型分解为多个子模型,每个子模型处理输入序列的不同部分。混合专家将模型分解为多个专家,每个专家处理输入序列的不同部分。这些方法可以结合其他压缩加速方法来提高LLMs的效率。表5中总结了一些具有代表性的MoE方法。

表5 各种MoE方法总结

图片

7.1 将MoE与其他高效技术结合使用

MoE 与其他高效技术结合的研究包括剪枝、知识蒸馏和参数高效微调(PEFT)。在稀疏 MoE 模型中,大多数现有工作都关注如何在保留大部分表示能力的同时减少内存占用。MoEBERT 将预训练 BERT 中的前馈网络(FFN)转换为多个专家,并在推理时只激活一个专家,以提高速度。MoEfication 旨在将 FFN 转换为 MoE 层的转换推广到各种 Transformer 模型。σ-MoE 和 SwitchHead 引入了额外的稀疏性到 FFN 和注意力组件,以减少标准 Transformer 的计算和内存需求。Sparse Mixers 和 SMLP 替换了大部分自注意力子层和 FFN,并使用 MoE 子层和路由机制确保来自同一句子的标记被发送到同一专家。AdaMix 提出了一种混合适配器或低秩分解矩阵的混合方法,以增强下游性能。MixDA 使用一组领域适配器注入领域特定知识,并训练一个混合适配器门动态融合多个领域任务。EcoAssistant 和 FrugalGPT 利用查询缓存和 LLM 层次结构处理不同复杂度的请求。MoE 的研究历史较长,广泛应用于今天的 LLM,包括模型压缩和加速技术。

8 加速框架

本章主要介绍了一些用于加速大型语言模型(LLM)推理的框架。这些框架旨在提高 LLM 在不同场景下的效率,包括延迟、吞吐量和内存等。这些框架可以分为通用框架和特定框架。通用框架包括 DNNFusion 和 DeepSpeed Inference,它们可以应用于各种场景,而特定框架则针对特定场景进行优化,如 TurboTransformer 和 ByteTransformer。表6为各种加速框架的总结。这些框架通过操作融合、张量并行、推理管道和卸载系统等技术来提高 LLM 的推理效率。

表6 各种加速框架的总结

图片

​

如何学习大模型

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

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

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

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

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

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

五、结束语

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

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

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

模型压缩算法国内外研究现状综述 剪枝类型参考文章评估指标简介参数驱动[99][100][101][102]基于权值的L1/L2范数[103][104][105]基于BN层的γ参数[106][107]基于BN层的γ参数衍生的缩放因子[108]基于卷积核的谱聚类[109]基于卷积核的几何中位数[110]基于卷积核的相似度数据驱动[111]基于后一层的统计信息[112][113][114]基于激活值最小重构误差[115]基于剪枝前后特征图熵值大小[116] 阅读详情

相关推荐

大模型的压缩

大模型的压缩

天涯雨的博客 1152

详解4种模型压缩技术、模型蒸馏算法

理论上来说,深度神经网络模型越深,非线性程度也就越大,相应的对现实问题的表达能力越强,但相应的代价是,训练成本和模型大小的增加。同时,在部署时,大模型预测速度较低且需要更好的硬件支持。首先是速度,比如像人脸闸机、人脸解锁手机等应用,对响应速度比较敏感,需要做到实时响应。其次是存储,比如电网周边环境监测这个应用场景中,要图像目标检测模型部署在可用内存只有200M的监控设备上,且当监控程序运行后,剩余内存会小于30M。最后是耗能,离线翻译这种移动设备内置AI模型的能耗直接决定了它的续航能力。

woaimx_1314的博客 7988

4 种方法识别Linux系统 USB 设备

导读 如果在系统中插入一个设备,尤其是在桌面环境下,比如 USB 设备,它会自动挂载到一个指定目录,一般是在 /media/username/device-label 目录下,之后你就可以进入到该目录下访问那些文件了。然而,在服务器上就不是这么回事了,你必须手动挂载这个设备,并且指定一个挂载点。 查询USB设备 Linux 系统使用 /dev 目录下特定的设备文件来标识插入的

郑帅的博客 1986

【模型压缩】模型压缩的几种方式概述

如同前面提到的,我们希望将一个强大复杂的AI模型减量、压缩后,得到一个迷你、简单的模型,但仍要能维持原有的推论精度或者只有些微(0%到指定%)的下降,就像我们平常看到的JPG影像、MP4影片,虽然采大幅度破坏性压缩,但人眼是很难分辨其品质差异的。这样可以得到几项好处,包括。(FP8, e5m2, e4m3, 1 Byte)在推论时其精度下降幅度可控制在一定程度内,同时可让储存空间和内存使用量减少1/2到3/4,若加上有支持SIMD或平行运算指令集[1]还可让运算量提升1.x ~ 3.x倍,一举多得。

All_In_gzx_cc的博客 3478

安装cartographer,跑官网数据集

今天开始写一个关于google cartographer系列文章。此类文章网上已经很多,本系列文章主要记录重点部分及容易踩坑地方。 cartographer是一个完整的激光SLAM开源项目,属于graph slam,包含了完整的前端里程计和后端地图优化,既能够同时定位建图,又能够基于先验地图进行独立全局定位。 值得 目录 一、推荐首选看官网资料,已经很详细了 二、安装 三、源码文件架构 四、跑数据集 1、建图 2、基于先验地图的全局定位 一、推荐首选看官网资料,已经很详细了 原生版:

qq_18276949的博客 6144

神经网络学习笔记-波尔兹曼(Boltzmann)机

Boltzmann机是一种反馈随机神经网络 两种输出状态,单极性0或1。输出状态的取值根据概率统计法则决定,这种概率统计法则类似Boltzmann分布,部分反馈 它在神经元状态变化中引入了统计概率,网络的平衡状态服从Boltzmann分布,网络运行机制基于模拟退火算法。 离散Hopfield神经网络+模拟退火+隐单元=Boltzman机 DHNN全反馈,转移函数:符号函数 BM机网络拓扑...

求易学堂的博客 2614

万字长文细说端侧大模型进展(综述)

大型语言模型(LLMs)的出现彻底改变了自然语言处理(NLP)领域。由于其在边缘设备上的低延迟、数据本地化和个性化用户体验的优势,越来越多的研究关注在资源受限环境中部署LLMs的挑战与解决方案。本文综述了设备端语言模型的发展,包括高效架构设计、模型压缩技术及硬件加速策略,并通过案例研究展示其实际应用及潜在优势。本综述全面阐述了设备上语言模型(LLMs)的最新进展,重点分析了模型压缩、高效架构设计和硬件-软件协同优化等领域的突破。

具身机器人和通用AI 2835

Ubuntu docker镜像中下载安装 DPABI(DPARSF)

在Ubuntu服务器的docker镜像中用MATLAB运行DPABI(以及使用DPARSF的功能)。

Pandako's Blog 1722

5万字讲解大模型语言高效推理研究(清华综述)

大模型由于其在各种任务中的出色表现而引起了广泛的关注。然而,大模型推理的大量计算和内存需求对其在资源受限场景的部署提出了挑战。业内一直在努力开发旨在提高大模型推理效率的技术。本文对现有的关于高效大模型推理的文献进行了全面的综述总结。首先分析了大模型推理效率低下的主要原因,即大模型参数规模、注意力计算操的二次复杂度作和自回归解码方法。然后,引入了一个全面的分类法,将现有优化工作划分为数据级别、模型级别和系统级别的优化。此外,本文还对关键子领域的代表性方法进行了对比实验,以及分析并给出一定的见解。

qq_40500099的博客 1476

从 RAP OData 到可交付的 SAP Fiori 应用:部署与授权全链路实战笔记

摘要:本文探讨了RAP开发中常见的交付误区,指出开发者预览(FEAP)并非可部署应用,强调从服务发布到业务应用落地的完整链路。文章详细对比了不同部署路径(ABAP/BTP),解析权限管理关键点(SAP_BR_DEVELOPER的临时性),并提供了标准授权组合方案(IAM+业务目录+角色)。通过"发运跟踪"案例,展示了从开发验证到生产部署的全流程,特别提醒注意开发环境与生产环境的权限差异,避免"开发机正常、生产机403"的典型问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1401

【推荐100个unity插件】帮助你快速开发一款FPS游戏—— FPS Framework

FPS Framework 快速入门指南 FPS Framework 是一个 Unity 开发框架,可加速 FPS 游戏开发。主要功能包括: 第一人称控制器:基于 Character Controller 实现,提供移动、跳跃、下蹲等功能,支持自定义参数调整 渲染管线转换:内置 RP 转换器,支持 URP/HDRP 等渲染管线一键切换 库存系统: 采用双列表管理:物品列表(Items)和可收集物列表(Collectables) 支持自定义库存物品和可收集物类型 提供拾取/丢弃功能实现 快速开始: 通过预制件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2569

【三万字长文】大模型量化入门到精通:解决显存瓶颈,提升推理效率,小白也能上手!!

本文详细介绍了大模型量化技术,解决万亿参数模型面临的显存占用大、推理效率低的问题。文章系统讲解了权重量化、激活量化和KV Cache量化的原理,对比了仅权重量化与全量化优劣,深入探讨了PTQ、QAT等策略及异常值处理。通过将模型从FP32转换为INT8/INT4等低精度格式,量化可显著减小体积、降低显存需求、提升推理速度,是部署大模型的核心技术。

libaiup的博客 1515

YOLOv10改进,YOLOv10添加DICAM,用于水下图像增强模块,以提高朦胧水下图像的质量、对比度和色偏

在水下环境中,成像设备会出现水浑浊、光衰减、散射和颗粒问题,导致图像质量低、对比度差和彩色图像有偏差。这给使用传统视觉技术进行水下状态监测和检查带来了巨大挑战。近年来,水下图像增强因其在提高当前计算机视觉任务在水下目标检测和分割中的性能方面发挥着关键作用而受到越来越多的关注。由于主要从自然场景构建的现有方法在提高色彩丰富度和分布方面存在性能限制,作者提出了一种新颖的基于深度学习的方法,即 Deep Inception 和 Channel-wise Attention Modules (DICAM),以提高朦

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 480

万字长文!大模型(LLM)推理优化技术总结(非常详细)

大模型训练成本很高,且在推理过程中需要大量的计算资源,为了能够实现大模型应用落地,需解决大模型推理成本、模型响应速度等问题,这就需要对大模型进行推理优化。

瓦罗兰特顶级C位的博客 962

61、增益调度控制器:原理、建模与调优

本文详细介绍了增益调度控制器的原理、建模方法和调优流程。增益调度是一种针对非线性系统的控制策略,通过在不同工作点使用不同的线性控制器实现全局控制。文章涵盖了在Simulink中使用Control System Toolbox模块建模的具体步骤,以及如何利用systune进行增益调度表的调优。同时,还讨论了实际应用中的注意事项、典型案例(如化学反应器和飞机控制),并与其它控制方法进行了对比。最后,文章展望了增益调度控制器的未来发展趋势,包括与人工智能的结合、多目标优化调优以及实时调优能力的提升。

rgv234567的博客 186

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

万字长文带你全面了解大模型高效推理与优化

Prompt摘要的核心思想是将原始prompt浓缩为更短的摘要,同时保留相似的语义信息。这些技术也作为prompts的在线压缩方法。

2501_94005722的博客 915

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

如何加速大模型推理?万字综述全面解析大语言模型高效推理技术

许多研究工作致力于设计优化大语言模型推理开销的技术,优化模型的推理延迟、吞吐、功耗和存储等指标,成为许多研究的重要目标。为了对这些优化技术有更全面、更系统的认知,为大语言模型的部署实践和未来研究提供建议和指南,来自清华大学电子工程系、无问芯穹和上海交通大学的研究团队对大语言模型的高效推理技术进行了一次全面的调研和整理,在《A Survey on Efficient Inference for La...

Paper weekly 1452

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【万字长文】边缘智能大模型:训练、推理与部署全攻略!

边缘智能下的大模型通过参数高效微调和联邦学习技术实现边缘训练,结合模型压缩和推理加速优化边缘部署。这种结合显著降低成本、延迟和带宽需求,增强数据隐私,但面临资源限制、异构性和隐私等挑战。未来研究将聚焦新型架构、动态适应和伦理规范等方向,推动大模型在边缘场景的广泛应用。

2401_85375151的博客 1432

万字长文综述大模型核心技术:微调、推理与优化指南,入门到精通非常详细,看这一篇就够了

大语言模型(LLM)是非常庞大的深度学习模型,它们在大量数据上进行预训练。其底层的Transformer是一组神经网络,由具有自注意力能力的编码器和解码器组成。编码器和解码器从文本序列中提取含义,并理解其中单词和短语之间的关系。Transformer神经网络架构允许使用非常大的模型,这些模型通常包含数千亿个参数。如此大规模的模型可以摄取大量数据,这些数据通常来自互联网,也可以来自如包含超过500亿个网页的Common Crawl,以及约有5700万页面的维基百科等来源。

HJS123456780的博客 1224

【万字长文】大模型落地实战:从训练到推理,掌握Transformer、Bert、GPT等核心模型!

文章系统介绍了大模型从语言模型到当前先进模型的发展历程,详细解析了Transformer架构和Bert、GPT等核心模型原理。重点分享了在大模型落地过程中针对推理延迟高、显存占用大等挑战的优化方法,包括连续批处理、分块注意力机制、分布式训练等技术,并结合实践分析了优化策略在显存效率、吞吐量及训练加速中的应用效果。

m0_59162248的博客 918

【万字长文】大模型推理加速全攻略:七大方法全面提升推理效率,从简单优化到复杂架构改进的全方位解决方案!

这篇文章详细介绍了大模型推理加速的七大方法:减少token输入、模型量化、cache压缩裁剪、推测解码、架构优化、serve层优化及硬件升级。分析了各种方法的原理、适用场景、优缺点及实现方式,为不同需求的开发者提供了从简单工程优化到复杂架构改进的全方位解决方案,帮助提升大模型推理效率。

2401_85325557的博客 1121

Deepseek推理太慢,蚂蚁集团&浙大提出LightThinker:动态压缩推理链,LLM效率飙升

随着Deepseek R1范式的爆发,越来越多人相信给定足够的思考时间,模型能更好地回答问题,但是当前的大模型多采用基于Transformer架构的模型,其注意力机制的计算复杂度随上下文长度呈二次增长,而KV缓存的存储开销随上下文长度线性增长。这导致在长文本生成和复杂推理任务中,LLMs的效率受到严重限制。

m0_59163425的博客 1686

【万字长文】LLM大模型推理卡顿?这套系统化的全栈优化方法来了!

本文系统探讨了LLM推理优化的全栈架构,从基础设施层到算法层进行全面解析。重点包括:1)硬件选型与NVLink/InfiniBand网络优化;2)云原生平台通过KServe实现标准化模型服务;3)AI网关层的智能流量调度;4)推理引擎关键技术如PagedAttention和连续批处理;5)模型压缩与架构创新(MoE/GQA)。文章提出Prefill/Decode分离架构和PD-Aware调度等前沿方案,并提供了工程选型框架,为构建高效LLM推理系统提供系统性指导。

Trb201013的博客 1144

万字长文 | 大模型与异构算力融合关键技术解析

模型特性(如层数、每层计算量、内存占用等)、硬件配置(如设备数量、设备间带宽、内存容量等)、训练目标(如训练速度、内存效率、扩展性等)。任务特性(如计算类型、资源需求、延迟要求等)、资源特性(如计算能力、内存容量、网络带宽等)、系统目标(如吞吐量、延迟、资源利用率等)。数据维度(数据并行)、张量维度(张量并行)、层维度(流水线并行)和参数维度(分组参数切片)。硬件特性(如支持的精度、计算能力等)、应用场景(如延迟要求、精度要求等)、模型特性(如结构、敏感度等)。图优化、算子优化、内存管理、批处理优化等。

SuaniCommunity的博客 1101
上一篇: LLM | 面向对话式医疗健康场景的医疗大模型
下一篇: 让AI转化为生产力,Dify 私有化部署 + 接入Ollama部署本地模型。
少喝冰美式
博客等级 码龄3年 6839粉丝 517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值