【分布式系统篇】Jaeger实战:从零搭建到链路追踪全解析

核心内容摘要

Qwen3-Reranker在RAG中的应用案例:降低幻觉率、提升LLM输入质量
3步实现专业级音频降噪:Audacity AI智能处理全指南

Qwen3-TTS-12Hz-1.7B-VoiceDesign跨平台移动应用开发实战

本文全面介绍了大语言模型的基础概念、架构和预训练技术重点讲解了参数高效微调(PEFT)方法如适配器、LoRA和QLoRA详细分析了提示工程策略并深入探讨了模型压缩技术包括量化、蒸馏和剪枝等。

文章为开发者提供了从理论到实践的完整指南帮助理解和应用大模型技术。

什么是大语言模型大语言模型LLM是非常庞大的深度学习模型它们在大量数据上进行预训练。

其底层的Transformer是一组神经网络由具有自注意力能力的编码器和解码器组成。

编码器和解码器从文本序列中提取含义并理解其中单词和短语之间的关系。

Transformer神经网络架构允许使用非常大的模型这些模型通常包含数千亿个参数。

如此大规模的模型可以摄取大量数据这些数据通常来自互联网也可以来自如包含超过500亿个网页的Common Crawl以及约有5700万页面的维基百科等来源。

语言建模LM语言和交流的过程可以简化为计算吗语言模型通过从一个或多个文本语料库中学习来生成概率。

文本语料库是一种语言资源由一种或多种语言的大量结构化文本组成。

文本语料库可以包含一种或多种语言的文本并且通常带有注释。

语言模型可以根据其在训练过程中学习到的统计模式预测最可能跟随某个短语的单词或多个单词。

在图中语言模型可能会估计“天空的颜色是”这个短语后面跟着“蓝色”一词的概率为91%。

构建语言模型的最早方法之一是基于n - gram。

n - gram是从给定文本样本中连续的n个项目组成的序列。

在这里模型假设序列中下一个单词的概率仅取决于前面固定数量的单词其中 表示单词 是窗口大小。

然而n - gram语言模型在很大程度上已被神经语言模型所取代。

神经语言模型基于神经网络这是一种受生物神经网络启发的计算系统。

这些模型利用单词的连续表示或嵌入来进行预测神经网络将单词表示为权重的非线性组合。

因此它可以避免语言建模中的维度灾难问题。

已经有几种神经网络架构被提出用于语言建模。

基础模型和大语言模型这与自然语言处理NLP应用程序早期的方法有很大不同早期是训练专门的语言模型来执行特定任务。

相反研究人员在大语言模型中观察到了许多涌现能力这些能力是模型从未接受过训练的。

例如大语言模型已被证明能够执行多步算术运算、解乱序单词的字母以及识别口语中的冒犯性内容。

最近基于OpenAPI的GPT系列大语言模型构建的流行聊天机器人ChatGPT通过了美国医学执照考试等专业考试。

基础模型通常是指在广泛数据上进行训练的任何模型它可以适应各种下游任务。

这些模型通常使用深度神经网络创建并使用自监督学习在大量未标记数据上进行训练。

在训练过程中从语料库中提取文本序列并进行截断。

语言模型计算缺失单词的概率然后通过基于梯度下降的优化机制对这些概率进行微调并反馈给模型以匹配真实情况。

这个过程在整个文本语料库上重复进行。

尽管如此大语言模型通常在与语言相关的数据如文本上进行训练。

而基础模型通常在多模态数据文本、图像、音频等的混合上进行训练。

更重要的是基础模型旨在作为更特定任务的基础或基石基础模型通常通过进一步训练进行微调以完成各种下游认知任务。

微调是指采用预训练的语言模型并使用特定数据针对不同但相关的任务进行训练的过程。

这个过程也被称为迁移学习。

大语言模型的架构早期的大语言模型大多是使用带有长短期记忆网络LSTM和门控循环单元GRU的循环神经网络RNN模型创建的。

然而它们面临挑战主要是在大规模执行NLP任务方面。

但这正是大语言模型预期要发挥作用的领域。

这就促使了Transformer的诞生一开始大语言模型主要是使用自监督学习算法创建的。

自监督学习是指处理未标记数据以获得有用的表示这些表示可以帮助下游的学习任务。

通常自监督学习算法使用基于人工神经网络ANN的模型。

我们可以使用几种架构来创建人工神经网络但大语言模型中使用最广泛的架构是循环神经网络RNN。

RNN可以利用其内部状态来处理可变长度的输入序列。

RNN具有长期记忆和短期记忆。

RNN有一些变体如长短期记忆网络LSTM和门控循环单元GRU。

使用LSTM单元的RNN训练速度非常慢。

此外对于这样的架构我们需要按顺序或串行地输入数据。

这就无法进行并行化处理也无法利用可用的处理器核心。

或者使用GRU的RNN模型训练速度更快但在更大的数据集上表现较差。

尽管如此在很长一段时间里LSTM和GRU仍然是构建复杂NLP系统的首选。

然而这样的模型也存在梯度消失问题当反向传播多层时梯度可能会变得非常小导致训练困难。

RNN的一些问题通过在其架构中添加注意力机制得到了部分解决。

在像LSTM这样的循环架构中可以传播的信息量是有限的并且保留信息的窗口较短。

然而有了注意力机制这个信息窗口可以显著增加。

注意力是一种增强输入数据某些部分同时削弱其他部分的技术。

其背后的动机是网络应该更多地关注数据的重要部分其中 是注意力权重表示对每个输入部分的关注程度。

注意力和自注意力之间有一个微妙的区别但它们的动机是相同的。

注意力机制是指关注另一个序列不同部分的能力而自注意力是指关注当前序列不同部分的能力。

自注意力允许模型访问来自任何输入序列元素的信息。

在NLP应用中这提供了关于远距离标记的相关信息。

因此模型可以捕获整个序列中的依赖关系而无需固定或滑动窗口。

带有注意力机制的RNN模型在性能上有了显著提升。

然而循环模型本质上很难扩展。

但是自注意力机制很快被证明非常强大以至于它甚至不需要循环顺序处理。

2017年谷歌大脑团队推出的Transformer可能是大语言模型历史上最重要的转折点之一。

Transformer是一种深度学习模型它采用自注意力机制并一次性处理整个输入与早期基于RNN的模型相比Transformer有一个重大变化即它没有循环结构。

在有足够训练数据的情况下Transformer架构中的注意力机制本身就可以与带有注意力机制的RNN模型相媲美。

使用Transformer模型的另一个显著优势是它们具有更高的并行化程度并且需要的训练时间大大减少。

这正是我们利用可用资源在大量基于文本的数据上构建大语言模型所需要的优势。

许多基于人工神经网络的自然语言处理模型都是使用编码器 - 解码器架构构建的。

例如seq2seq是谷歌最初开发的一系列算法。

它通过使用带有LSTM或GRU的RNN将一个序列转换为另一个序列。

最初的Transformer模型也使用了编码器 - 解码器架构。

编码器由编码层组成这些层逐层迭代处理输入。

解码器由解码层组成对编码器的输出进行同样的处理每个编码器层的功能是生成编码其中包含关于输入中哪些部分相互相关的信息。

输出编码随后作为输入传递给下一个编码器。

每个编码器由一个自注意力机制和一个前馈神经网络组成。

此外每个解码器层获取所有编码并利用其中包含的上下文信息生成输出序列。

与编码器一样每个解码器由一个自注意力机制、一个对编码的注意力机制和一个前馈神经网络组成。

预训练在这个阶段模型以自监督的方式在大量非结构化文本数据集上进行预训练。

预训练的主要挑战是计算成本。

存储10亿参数模型所需的GPU内存1个参数 - 4字节32位浮点数10亿参数 - 4×10^9 字节 4GB存储10亿参数模型所需的GPU内存 4GB32位全精度让我们计算训练10亿参数模型所需的内存模型参数梯度ADAM优化器2个状态激活值和临时内存大小可变- 4字节参数 每个参数额外20字节所以训练所需的内存大约是存储模型所需内存的20倍。

存储10亿参数模型所需内存 4GB32位全精度训练10亿参数模型所需内存 80GB32位全精度

数据并行训练技术

1 分布式数据并行DDP分布式数据并行DDP要求模型权重以及训练所需的所有其他额外参数、梯度和优化器状态都能在单个GPU中容纳。

如果模型太大则应使用模型分片。

2 全分片数据并行FSDP全分片数据并行FSDP通过在多个GPU之间分布分片模型参数、梯度和优化器状态来减少内存使用。

微调微调有助于我们通过调整预训练的大语言模型LLM的权重使其更好地适应特定任务或领域从而充分发挥这些模型的潜力。

这意味着与单纯的提示工程相比你可以用更低的成本和延迟获得更高质量的结果。

与提示相比微调通常在引导大语言模型的行为方面要有效得多。

通过在一组示例上训练模型你可以缩短精心设计的提示节省宝贵的输入令牌同时不牺牲质量。

你通常还可以使用小得多的模型这反过来又可以减少延迟和推理成本。

例如经过微调的Llama 7B模型在每个令牌的基础上成本效益比现成的模型如GPT-

5高得多大约50倍且性能相当。

如前所述微调是针对其他任务对已经训练好的模型进行调整。

其工作方式是获取原始模型的权重并对其进行调整以适应新任务。

模型在训练时会学习完成特定任务例如GPT-3在大量数据集上进行了训练因此它学会了生成故事、诗歌、歌曲、信件等。

人们可以利用GPT-3的这种能力并针对特定任务如以特定方式生成客户查询的答案对其进行微调。

有多种方法和技术可以对模型进行微调其中最流行的是迁移学习。

迁移学习源自计算机视觉领域它是指冻结网络初始层的权重只更新后面层的权重的过程。

这是因为较底层更接近输入的层负责学习训练数据集的通用特征而较上层更接近输出的层学习更具体的信息这些信息直接与生成正确的输出相关。

1 PEFTPEFT即参数高效微调Parameter Efficient Fine-Tuning是一组以最节省计算资源和时间的方式微调大型模型的技术或方法同时不会出现我们可能在全量微调中看到的性能损失。

之所以采用这些技术是因为随着模型越来越大例如拥有1760亿参数的BLOOM模型在不花费数万美元的情况下对其进行微调几乎是不可能的。

但有时为了获得更好的性能使用这样的大型模型又几乎是必要的。

这就是PEFT发挥作用的地方它可以帮助解决在处理这类大型模型时遇到的问题。

以下是一些PEFT技术

2 迁移学习迁移学习是指我们获取模型的一些已学习参数并将其用于其他任务。

这听起来与微调相似但实际上有所不同。

在微调中我们重新调整模型的所有参数或者冻结一些权重并调整其余参数。

但在迁移学习中我们从一个模型中获取一些已学习参数并将其用于其他网络。

这在我们的操作上给予了更大的灵活性。

例如在微调时我们无法改变模型的架构这在很多方面限制了我们。

但在使用迁移学习时我们只使用训练好的模型的一部分然后可以将其附加到任何具有不同架构的其他模型上。

迁移学习在使用大语言模型的NLP任务中经常出现人们会使用像T5这样的预训练模型中Transformer网络的编码器部分并训练后面的层。

3 Adapters 适配器适配器是最早发布的参数高效微调技术之一。

相关论文Parameter-Efficient Transfer Learning for NLP表明我们可以在现有的Transformer架构上添加更多层并且只对这些层进行微调而不是对整个模型进行微调。

他们发现与完全微调相比这种技术可以产生相似的性能。

在左边是添加了适配器层的修改后的Transformer架构。

我们可以看到适配器层添加在注意力堆栈和前馈堆栈之后。

在右边是适配器层本身的架构。

适配器层采用瓶颈架构它将输入缩小到较小维度的表示然后通过非线性激活函数再将其放大到输入的维度。

这确保了Transformer堆栈中的下一层能够接收适配器层生成的输出。

论文作者表明这种微调方法在消耗更少计算资源和训练时间的同时性能可与完全微调相媲美。

他们在GLUE基准测试中仅增加

6%的参数就能达到全量微调

4%的效果。

4 LoRA——低秩自适应LoRA是一种与适配器层类似的策略但它旨在进一步减少可训练参数的数量。

它采用了更严谨的数学方法。

LoRA通过修改神经网络中可更新参数的训练和更新方式来工作。

从数学角度解释我们知道预训练神经网络的权重矩阵是满秩的这意味着每个权重都是唯一的不能通过组合其他权重得到。

但在这篇论文Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning中作者表明当预训练语言模型针对新任务进行调整时权重具有较低的“内在维度”。

这意味着权重可以用更小的矩阵表示即它具有较低的秩。

反过来这意味着在反向传播过程中权重更新矩阵的秩较低因为大部分必要信息已经在预训练过程中被捕获在微调过程中只进行特定任务的调整。

更简单的解释是在微调过程中只有极少数权重会有较大的更新因为神经网络的大部分学习是在预训练阶段完成的。

LoRA利用这一信息来减少可训练参数的数量。

以GPT-3 175B为例LoRA研究团队证明即使全秩即d高达12288非常低的秩即图1中的r可以是1或2也足够了这使得LoRA在存储和计算上都非常高效。

图2展示了矩阵 和 的维度为 而我们可以改变 r 的值。

r 值越小需要调整的参数就越少。

虽然这会缩短训练时间但r值过小时也可能导致信息丢失并降低模型性能。

然而使用LoRA时即使秩较低性能也能与完全训练的模型相当甚至更好。

用HuggingFace实现LoRA微调要使用HuggingFace实现LoRA微调你需要使用PEFT库将LoRA适配器注入模型并将它们用作更新矩阵。

from transformers import AutoModelForCausalLMfrom peft import get_peft_config, get_peft_model, LoraConfig, TaskTypemodel AutoModelForCausalLM.from_pretrained(model_name_or_path, device_mapauto, trust_remote_codeTrue)peft_config LoraConfig( task_typeTaskType.CAUSAL_LM, inference_modeFalse, r32, lora_alpha16, lora_dropout

1, target_modules[query_key_value])model get_peft_model(model, peft_config)model.print_trainable_parameters()完成这些后你就可以像平常一样训练模型了。

但这一次它将比平常花费更少的时间和计算资源。

LoRA的效率论文的作者表明LoRA仅用总可训练参数的2%就能超越全量微调的效果。

至于它训练的参数数量我们可以通过秩r参数在很大程度上进行控制。

例如假设权重更新矩阵有100,000个参数A为200B为500。

权重更新矩阵可以分解为较低维度的较小矩阵A为200×3B为3×500。

这样我们就只有200×3 3×500 2100个可训练参数仅占总参数数量的

1%。

如果我们决定只将LoRA应用于特定层这个数量还可以进一步减少。

由于训练和应用的参数数量比实际模型少得多文件大小可以小至8MB。

这使得加载、应用和传输学习到的模型变得更加容易和快速。

5 QLoRAQLoRA如何与LoRA不同它是一种4位Transformer。

QLoRA是一种微调技术它将高精度计算技术与低精度存储方法相结合。

这有助于在保持模型高性能和准确性的同时使模型大小保持较小。

QLoRA使用LoRA作为辅助手段来修复量化过程中引入的误差。

QLoRA的工作原理QLoRA通过引入3个新概念来帮助减少内存使用同时保持相同的性能质量。

它们是4位Normal Float、双重量化和分页优化器。

4位Normal FloatNF44位NormalFloat是一种新的数据类型是保持16位性能水平的关键因素。

它的主要特性是数据类型中的任何位组合例如0011或0101都会从输入张量中分配到数量相等的元素。

QLoRA对权重进行4位量化并以32位精度训练注入的适配器权重LORA。

QLoRA有一种存储数据类型NF4和一种计算数据类型16位BrainFloat。

我们将存储数据类型反量化为计算数据类型以进行前向和反向传递但我们只对使用16位BrainFloat的LORA参数计算权重梯度。

归一化首先对模型的权重进行归一化使其具有零均值和单位方差。

这确保了权重分布在零附近并落在一定范围内。

量化然后将归一化后的权重量化为4位。

这涉及将原始的高精度权重映射到一组较小的低精度值。

对于NF4量化级别被选择为在归一化权重的范围内均匀分布。

反量化在前向传递和反向传播过程中量化后的权重被反量化回全精度。

这是通过将4位量化值映射回其原始范围来完成的。

反量化后的权重用于计算但它们以4位量化形式存储在内存中。

数据会被量化到“桶”或“箱”中。

数字2和3都落入相同的量化区间2。

这种量化过程通过“四舍五入”到最接近的量化区间让你可以使用更少的数字。

双重量化双重量化是指对4位NF量化过程中使用的量化常数进行量化的独特做法。

虽然这看起来不太起眼但相关研究论文指出这种方法有可能平均每个参数节省

5位。

这种优化在采用块wise k位量化的QLoRA中特别有用。

与对所有权重一起进行量化不同这种方法将权重分成不同的块或片段分别进行量化。

块wise量化方法会生成多个量化常数。

有趣的是这些常数可以进行第二轮量化从而提供了额外的节省空间的机会。

由于量化常数的数量有限这种策略仍然有效减轻了与该过程相关的计算和存储需求。

分页优化器如前所述分位数量化涉及创建桶或箱来涵盖广泛的数值范围。

这个过程会导致多个不同的数字被映射到同一个桶中例如在量化过程中2和3都被转换为值3。

因此权重的反量化会引入1的误差。

在神经网络中更广泛的权重分布上可视化这些误差就可以看出分位数量化的固有挑战。

这种差异凸显了为什么QLoRA更像是一种微调机制而不是一种独立的量化策略尽管它适用于4位推理。

在使用QLoRA进行微调时LoRA调整机制就会发挥作用包括创建两个较小的权重更新矩阵。

这些矩阵以更高精度的格式如脑浮点16或浮点16维护然后用于更新神经网络的权重。

值得注意的是在反向传播和前向传递过程中网络的权重会进行反量化以确保实际训练是以更高精度格式进行的。

虽然存储仍然采用较低精度但这种有意的选择会引入量化误差。

然而模型训练过程本身具有适应和减轻量化过程中这些低效性的能力。

从本质上讲采用更高精度的LoRA训练方法有助于模型学习并积极减少量化误差。

用HuggingFace进行QLoRA微调要使用HuggingFace进行QLoRA微调你需要同时安装BitsandBytes库和PEFT库。

BitsandBytes库负责4位量化以及整个低精度存储和高精度计算部分。

PEFT库将用于LoRA微调部分。

import torchfrom peft import prepare_model_for_kbit_training, LoraConfig, get_peft_modelfrom transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfigmodel_id EleutherAI/gpt-neox-20bbnb_config BitsAndBytesConfig( load_in_4bitTrue, bnb_4bit_use_double_quantTrue, bnb_4bit_quant_typenf4, bnb_4bit_compute_dtypetorch.bfloat

model AutoModelForCausalLM.from_pretrained(model_id, quantization_configbnb_config, device_map{:0})model.gradient_checkpointing_enable()model prepare_model_for_kbit_training(model)config LoraConfig( r8, lora_alpha32, target_modules[query_key_value], lora_dropout

05, biasnone, task_typeCAUSAL_LM)model get_peft_model(model, config)

6 IA3IA3通过抑制和放大内部激活注入适配器Infused Adapter by Inhibiting and Amplifying Inner Activations是一种基于适配器的技术与LoRA有些相似。

作者的目标是在避免上下文学习ICLin context learning或Few-Shot prompting相关问题的同时复制其优势。

ICL在成本和推理方面可能会变得复杂因为它需要用示例来提示模型。

更长的提示需要更多的时间和计算资源来处理。

但ICL可能是开始使用模型的最简单方法。

IA3通过引入针对模型激活的缩放向量来工作。

总共引入了3个向量lv、ik和lff。

这些向量分别针对注意力层中的值、键以及密集层中的非线性层。

这些向量与模型中的默认值进行逐元素相乘。

一旦注入这些参数在训练过程中就会被学习而模型的其余部分保持冻结。

这些学习到的向量本质上是针对手头的任务对预训练模型的权重进行缩放或优化。

到目前为止这似乎是一种基本的基于适配器的参数高效微调PEFT方法。

但不止如此。

作者还使用了3个损失项来增强学习过程。

这3个损失项是LLM、LUL和LLN。

LLM是标准的交叉熵损失它增加了生成正确响应的可能性。

然后是LUL即非似然损失Unlikelihood Loss。

这个损失项通过等级分类Rank Classification来降低错误输出的概率。

最后是LLN它是一种长度归一化损失对所有输出选择的长度归一化对数概率应用软max交叉熵损失。

这里使用多个损失项是为了确保模型更快、更好地学习。

因为我们试图通过少样本示例进行学习这些损失是必要的。

现在让我们谈谈IA3中的两个非常重要的概念等级分类和长度归一化。

在等级分类中模型被要求根据正确性对一组响应进行排序。

这是通过计算潜在响应的概率得分来完成的。

然后使用LUL来降低错误响应的概率从而增加正确响应的概率。

但是在等级分类中我们面临一个关键问题即由于概率的计算方式令牌较少的响应会排名更高。

生成的令牌数量越少概率就越高因为每个生成令牌的概率都小于1。

为了解决这个问题作者提出将响应的得分除以响应中的令牌数量。

这样做将对得分进行归一化。

这里需要非常注意的一点是归一化是在对数概率上进行的而不是原始概率。

对数概率是负数且在0到1之间。

示例用法对于序列分类任务可以按如下方式为Llama模型初始化IA3配置peft_config IA3Config( task_typeTaskType.SEQ_CLS, target_modules[k_proj, v_proj, down_proj], feedforward_modules[down_proj])

7 P-TuningP-Tuning方法旨在优化传递给模型的提示的表示。

在P-Tuning论文中作者强调了提示工程在使用大语言模型时是一种非常强大的技术。

P-Tuning方法建立在提示工程的基础上并试图进一步提高优质提示的有效性。

P-Tuning通过为你的提示创建一个小型编码器网络来工作该网络为传入的提示创建一个软提示。

要使用P-Tuning调整你的大语言模型你应该创建一个表示你的提示的提示模板。

还有一个上下文x用于模板中以获得标签y。

这是论文中提到的方法。

提示模板中使用的令牌是可训练和可学习的参数这些被称为伪令牌。

我们还添加了一个提示编码器它帮助我们针对手头的特定任务更新伪令牌。

提示编码器通常是一个双向LSTM网络它为模型学习提示的最佳表示然后将该表示传递给模型。

LSTM网络连接到原始模型。

这里只有编码器网络和伪令牌被训练原始网络的权重不受影响。

训练完成后LSTM头部被丢弃因为我们有可以直接使用的hi。

简而言之提示编码器只改变传入提示的嵌入以更好地表示任务其他一切都保持不变。

8 Prefix TuningPrefix Tuning可以被视为P-Tuning的下一个版本。

P-Tuning的作者发表了一篇关于P-Tuning V-2的论文解决了P-Tuning的问题。

在这篇论文中他们实现了本文中介绍的Prefix Tuning。

Prefix Tuning和P-Tuning没有太大区别但仍然可能导致不同的结果。

让我们深入解释一下。

在P-Tuning中我们只在输入嵌入中添加可学习参数而在Prefix Tuning中我们在网络的所有层中添加这些参数。

这确保了模型本身更多地了解它正在被微调的任务。

我们在提示以及Transformer层的每一层激活中附加可学习参数。

与P-Tuning的不同之处在于我们不是完全修改提示嵌入而是只在每一层提示的开头添加很少的可学习参数。

在Transformer的每一层我们将一个带有可学习参数的软提示与输入连接起来。

这些可学习参数通过一个非常小的MLP只有2个全连接层进行调整。

这样做是因为论文的作者指出直接更新这些提示令牌对学习率和初始化非常敏感。

软提示增加了可训练参数的数量但也大大提高了模型的学习能力。

MLP或全连接层稍后可以去掉因为我们只关心软提示在推理时软提示将被附加到输入序列中引导模型。

9 Prompt Tuning并非提示工程Prompt Tuning是最早基于仅使用软提示进行微调这一想法的论文之一。

Prompt Tuning是一个非常简单且易于实现的想法。

它包括在输入前添加一个特定的提示并为该特定提示使用虚拟令牌或新的可训练令牌。

在这个过程中可以对这些新的虚拟令牌进行微调以更好地表示提示。

这意味着模型被调整为更好地理解提示。

以下是论文中Prompt Tuning与全量微调的比较从图中可以看到如果我们想将模型用于多个任务全模型微调需要存在多个模型副本。

但使用Prompt Tuning你只需要存储学习到的提示令牌的虚拟令牌。

例如如果你使用“对这条推文进行分类{tweet}”这样的提示目标将是为该提示学习新的更好的嵌入。

在推理时只有这些新的嵌入将用于生成输出。

这使得模型能够调整提示以帮助自己在推理时生成更好的输出。

Prompt Tuning的效率使用Prompt Tuning的最大优点是学习到的参数规模很小。

文件大小可能只有KB级别。

由于我们可以确定新令牌的维度大小和使用的参数数量因此可以极大地控制要学习的参数数量。

论文作者展示了即使可训练令牌的数量非常少该方法的表现也相当出色。

并且随着使用更大的模型性能只会进一步提升。

另一个很大的优点是我们可以在不做任何修改的情况下将同一个模型用于多个任务因为唯一被更新的只是提示令牌的嵌入。

这意味着只要模型足够大且足够复杂能够执行这些任务你就可以将同一个模型用于推文分类任务和语言生成任务而无需对模型本身进行任何修改。

但一个很大的限制是模型本身不会学到任何新东西。

这纯粹是一个提示优化任务。

这意味着如果模型从未在情感分类数据集上进行过训练Prompt Tuning可能不会有任何帮助。

需要特别注意的是这种方法优化的是提示而不是模型。

所以如果你无法手工制作一个能较好完成任务的硬提示那么尝试使用提示优化技术来优化软提示就没有任何意义。

硬提示与软提示硬提示可以被看作是一个定义明确的提示它是静态的或者充其量是一个模板。

一个生成式人工智能应用程序也可以使用多个提示模板。

提示模板允许提示被存储、重复使用、共享和编程。

生成式提示可以被整合到程序中用于编程、存储和重复使用。

软提示是在Prompt Tuning过程中创建的。

与硬提示不同软提示无法在文本中查看和编辑。

提示由嵌入一串数字组成它从更大的模型中获取知识。

可以肯定的是软提示的一个缺点是缺乏可解释性。

人工智能发现了与特定任务相关的提示但无法解释为什么选择这些嵌入。

就像深度学习模型本身一样软提示是不透明的。

软提示可作为额外训练数据的替代品。

10 LoRA与Prompt Tuning对比现在我们已经探索了各种参数高效微调PEFT技术。

那么问题来了是使用像适配器Adapter 和LoRA这样的添加式技术还是使用像P-Tuning和Prefix Tuning这样基于提示的技术呢在比较LoRA与P-Tuning和Prefix Tuning时可以肯定地说就充分发挥模型性能而言LoRA是最佳策略。

但根据你的需求它可能不是最有效的。

如果你想在与模型预训练任务差异很大的任务上训练模型毫无疑问LoRA是有效调整模型的最佳策略。

但如果你的任务或多或少是模型已经理解的只是挑战在于如何正确地向模型提供提示那么你应该使用Prompt Tuning技术。

Prompt Tuning不会修改模型中的许多参数主要侧重于传入的提示。

需要注意的一个重要点是LoRA将权重更新矩阵分解为较小的低秩矩阵并使用它们来更新模型的权重。

即使可训练参数较少LoRA也会更新神经网络目标部分中的所有参数。

而在Prompt Tuning技术中只是向模型添加了一些可训练参数这通常有助于模型更好地适应和理解任务但并不能帮助模型很好地学习新特性。

11 LoRA和PEFT与全量微调对比参数高效微调PEFT是作为全量微调的替代方案被提出的。

在大多数任务中已有论文表明像LoRA这样的PEFT技术即使不比全量微调更好也与之相当。

但是如果你希望模型适应的新任务与模型预训练的任务完全不同PEFT可能并不够。

在这种情况下有限数量的可训练参数可能会导致严重问题。

如果我们试图使用像LLaMA或Alpaca这样基于文本的模型构建一个代码生成模型我们可能应该考虑对整个模型进行微调而不是使用LoRA来调整模型。

这是因为这个任务与模型已知和预训练的内容差异太大。

另一个典型的例子是训练一个只懂英语的模型来生成尼泊尔语的文本。

大语言模型推理在使用大语言模型LLM进行推理时我们通常可以配置各种参数来微调其输出和性能。

以下是一些关键参数的详细介绍Top-k采样在每一步只对可能性最高的k个词元进行采样这样可以增加多样性并避免重复。

k值越高输出的多样性越强但可能连贯性会变差。

温度参数影响下一个可能词元的概率分布用于控制随机性和 “创造性”。

较低的温度会生成更可能出现但可能重复的文本而较高的温度则会鼓励多样性产生更不可预测的输出。

Top-P核采样Top-P或核采样将词元的选择限制在累计概率达到某个阈值的词汇子集内有助于控制生成输出的多样性。

最大长度设置大语言模型生成的最大词元数防止输出过长。

上下文提示通过提供特定的上下文提示或输入可以引导模型生成与该上下文一致的文本确保生成的输出在给定的上下文中相关且连贯。

重复惩罚对出现重复n - gram的序列进行惩罚鼓励多样性和新颖性。

采样方式在确定性贪心和基于随机采样的生成方式中选择。

贪心模式在每一步选择最可能的词元而随机采样则引入随机性。

贪心模式优先考虑准确性而随机采样鼓励多样性和创造性。

束搜索保留多个潜在序列在每一步扩展最有希望的序列与Top-k采样相比旨在生成更连贯、更准确的输出。

提示工程提示工程也称为上下文提示是指在不更新模型权重的情况下与大语言模型进行沟通引导其行为以获得期望结果的方法。

这是一门实证科学提示工程方法的效果在不同模型之间可能差异很大因此需要大量的实验和探索。

什么是提示我们与大语言模型交互时使用的自然语言指令被称为提示。

构建提示的过程称为提示工程。

提示的作用大语言模型根据提示中的指令进行推理并完成任务的过程被称为上下文学习。

少样本提示大语言模型在没有任何示例的情况下响应提示指令的能力称为零样本学习。

当提供单个示例时称为单样本学习。

如果提供多个示例则称为少样本学习。

上下文窗口即大语言模型可以提供和推理的最大词元数在零样本/单样本/少样本学习中至关重要。

1 思维链CoT提示思维链CoT提示Wei等人2022会生成一系列短句子逐步描述推理逻辑即推理链或推理依据最终得出答案。

在使用大型模型例如参数超过500亿的模型处理复杂推理任务时CoT的优势更为明显。

而简单任务使用CoT提示的受益则相对较小。

2 PAL程序辅助语言模型Gao等人2022PAL: Program-aided Language Models提出了一种方法使用大语言模型读取自然语言问题并生成程序作为中间推理步骤。

这种方法被称为程序辅助语言模型PAL它与思维链提示的不同之处在于它不是使用自由形式的文本获取解决方案而是将解决方案步骤交给诸如Python解释器这样的程序运行时处理。

3 ReAct提示ReAct的灵感来自于 “行动” 和 “推理” 之间的协同作用这种协同作用使人类能够学习新任务并做出决策或进行推理。

CoT由于无法访问外部世界或更新自身知识可能会导致事实幻觉和错误传播等问题。

ReAct是一种将推理和行动与大语言模型相结合的通用范式。

ReAct促使大语言模型为任务生成语言推理轨迹和行动。

这使系统能够进行动态推理创建、维护和调整行动方案同时还能与外部环境例如维基百科进行交互将更多信息纳入推理过程。

下图展示了ReAct的一个示例以及执行问答任务所涉及的不同步骤。

模型优化技术模型压缩方法包括a剪枝、b量化和c知识蒸馏。

1

1 量化模型量化是一种用于减小大型神经网络包括大语言模型LLM大小的技术通过修改其权重的精度来实现。

大语言模型的量化之所以可行是因为实证结果表明虽然神经网络训练和推理的某些操作必须使用高精度但在某些情况下可以使用低得多的精度例如float16这可以减小模型的整体大小使其能够在性能和准确性可接受的情况下在性能较弱的硬件上运行。

模型大小的趋势一般来说在神经网络中使用高精度与更高的准确性和更稳定的训练相关。

使用高精度在计算上也更为昂贵因为它需要更多且更昂贵的硬件。

谷歌和英伟达的相关研究表明神经网络的某些训练和推理操作可以使用较低的精度。

除了研究之外这两家公司还开发了支持低精度操作的硬件和框架。

例如英伟达的T4加速器是低精度GPU其张量核心技术比K80的效率要高得多。

谷歌的TPU引入了bfloat16的概念这是一种为神经网络优化的特殊基本数据类型。

低精度的基本思想是神经网络并不总是需要使用64位浮点数的全部范围才能表现良好。

bfloat16数值格式随着神经网络越来越大利用低精度的重要性对使用它们的能力产生了重大影响。

对于大语言模型来说这一点更为关键。

英伟达的A100 GPU最先进的版本有80GB内存。

在下面的表格中可以看到LLama2 - 70B模型大约需要138GB内存这意味着要部署它我们需要多个A100 GPU。

在多个GPU上分布模型不仅意味着要购买更多的GPU还需要额外的基础设施开销。

另一方面量化版本大约需要40GB内存因此可以轻松地在一个A100上运行显著降低了推理成本。

这个例子甚至还没有提到在单个A100中使用量化模型会使大多数单个计算操作执行得更快。

使用llama.cpp进行4位量化的示例大小可能会因方法略有不同量化如何缩小模型量化通过减少每个模型权重所需的比特数来显著减小模型的大小。

一个典型的场景是将权重从FP1616位浮点数减少到INT44位整数。

这使得模型可以在更便宜的硬件上运行并且 / 或者运行速度更快。

然而降低权重的精度也会对大语言模型的整体质量产生一定影响。

研究表明这种影响因使用的技术而异并且较大的模型对精度变化的影响较小。

较大的模型超过约700亿参数即使转换为4位也能保持其性能像NF4这样的一些技术表明对其性能没有影响。

因此对于这些较大的模型4位似乎是在性能与大小 / 速度之间的最佳折衷而6位或8位可能更适合较小的模型。

大语言模型量化的类型获得量化模型的技术可以分为两类。

训练后量化PTQ将已经训练好的模型的权重转换为较低精度而无需任何重新训练。

虽然这种方法简单直接且易于实现但由于权重值精度的损失可能会使模型性能略有下降。

量化感知训练QAT与PTQ不同QAT在训练阶段就整合了权重转换过程。

这通常会带来更好的模型性能但计算要求更高。

一种常用的QAT技术是QLoRA。

本文将只关注PTQ策略及其关键区别。

更大的量化模型与更小的未量化模型我们知道降低精度会降低模型的准确性那么你会选择较小的全精度模型还是选择推理成本相当的更大的量化模型呢尽管理想的选择可能因多种因素而异但Meta的最新研究提供了一些有见地的指导。

虽然我们预期降低精度会导致准确性下降但Meta的研究人员已经证明在某些情况下量化模型不仅表现更优而且还能减少延迟并提高吞吐量。

在比较8位的130亿参数模型和16位的70亿参数模型时也可以观察到相同的趋势。

本质上在比较推理成本相似的模型时更大的量化模型可以超越更小的未量化模型。

随着网络规模的增大这种优势更加明显因为大型网络在量化时质量损失较小。

在哪里可以找到已经量化的模型幸运的是在Hugging Face Hub上可以找到许多已经使用GPTQ有些与ExLLama兼容、NF4或GGML进行量化的模型版本。

快速浏览一下就会发现这些模型中有很大一部分是由大语言模型社区中一位有影响力且备受尊敬的人物TheBloke量化的。

该用户发布了多个使用不同量化方法的模型因此人们可以根据具体的用例选择最合适的模型。

要轻松试用这些模型可以打开一个Google Colab并确保将运行时更改为GPU有免费的GPU可供使用。

首先安装Hugging Face维护的transformers库以及所有必要的库。

由于我们将使用由Auto - GPTQ量化的模型因此还需要安装相应的库!pip install transformers!pip install accelerate!pip install optimum!pip install auto - gptq你可能需要重新启动运行时以便安装的库可用。

然后只需加载已经量化的模型这里我们加载一个之前使用Auto - GPTQ量化的Llama - 2 - 7B - Chat模型如下所示from transformers import AutoModelForCausalLM, AutoTokenizerimport torchmodel_id TheBloke/Llama-

b-Chat-GPTQtokenizer AutoTokenizer.from_pretrained(model_id, torch_dtypetorch.float16, device_mapauto)model AutoModelForCausalLM.from_pretrained(model_id, torch_dtypetorch.float16, device_mapauto)量化大语言模型如前所述Hugging Face Hub上已经有大量量化模型在许多情况下无需自己压缩模型。

然而在某些情况下你可能希望使用尚未量化的模型或者你可能希望自己压缩模型。

这可以通过使用适合你特定领域的数据集来实现。

为了演示如何使用AutoGPTQ和Transformers库轻松量化模型我们采用了OptimumHugging Face用于优化训练和推理的解决方案中简化版的AutoGPTQ接口from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfigmodel_id facebook/opt-125mtokenizer AutoTokenizer.from_pretrained(model_id)quantization_config GPTQConfig(bits4, dataset c4, tokenizertokenizer)model AutoModelForCausalLM.from_pretrained(model_id, device_mapauto, quantization_configquantization_config)模型压缩可能很耗时。

例如一个1750亿参数的模型至少需要4个GPU小时尤其是使用像 “c4” 这样的大型数据集时。

值得注意的是量化过程中的比特数或数据集可以通过GPTQConfig的参数轻松修改。

更改数据集会影响量化的方式因此如果可能的话使用与推理时看到的数据相似的数据集以最大化性能。

量化技术在模型量化领域已经出现了几种最先进的方法。

让我们深入了解一些突出的方法GPTQ有一些实现选项如AutoGPTQ、ExLlama和GPTQ - for - LLaMa这种方法主要侧重于GPU执行。

NF4在bitsandbytes库中实现它与Hugging Face的transformers库紧密合作。

它主要被QLoRA方法使用以4位精度加载模型进行微调。

GGML这个C库与llama.cpp库紧密合作。

它为大语言模型提供了一种独特的二进制格式允许快速加载和易于读取。

值得注意的是它最近转换为GGUF格式以确保未来的可扩展性和兼容性。

许多量化库支持多种不同的量化策略例如4位、5位和8位量化每种策略在效率和性能之间都提供了不同的权衡。

1

2 蒸馏知识蒸馏KD; Hinton等人2015年Gou等人2020年Distilling the Knowledge in a Neural Network是一种构建更小、成本更低模型“学生模型”的直接方法通过将预训练的高成本模型“教师模型”的能力转移到学生模型中来加快推理速度。

除了要求学生模型的输出空间与教师模型匹配以便构建合适的学习目标之外对学生模型的架构构建方式并没有太多限制。

知识蒸馏示意图教师模型已经在训练数据上进行了微调因此其概率分布可能与真实数据非常接近并且在生成的token上不会有太多变化。

当温度1时概率分布会变得更宽泛。

T 1时 教师模型的输出 - 软标签 学生模型的输出 - 软预测T 1时 教师模型的输出 - 硬标签 学生模型的输出 - 硬预测蒸馏对于生成式解码器模型的效果并不显著它对仅编码器模型如BERT更为有效因为这类模型存在大量的表示冗余。

1

3 剪枝网络剪枝是指在保持模型能力的同时通过修剪不重要的模型权重或连接来减小模型大小。

这一过程可能需要也可能不需要重新训练。

剪枝可分为非结构化剪枝和结构化剪枝。

非结构化剪枝允许删除任何权重或连接因此不会保留原始网络架构。

非结构化剪枝通常与现代硬件的适配性不佳并且无法真正加快推理速度。

结构化剪枝旨在保持矩阵乘法中部分元素为零的密集形式。

为了适配硬件内核的支持它们可能需要遵循特定的模式限制。

这里我们主要关注结构化剪枝以在Transformer模型中实现高稀疏性。

构建剪枝网络的常规工作流程包含三个步骤训练一个密集网络直至收敛对网络进行剪枝去除不需要的结构可选步骤重新训练网络通过新的权重恢复模型性能 。

通过网络剪枝在密集模型中发现稀疏结构同时使稀疏网络仍能保持相似性能这一想法的灵感来源于彩票假设LTH一个随机初始化的、密集的前馈网络包含多个子网络其中只有一部分稀疏网络是 “中奖彩票”当单独训练时这些子网络能够达到最佳性能。

结论在本篇文章中我们探索了检索增强生成RAG应用中的文本生成部分重点介绍了大语言模型LLM的使用。

内容涵盖了语言建模、预训练面临的挑战、量化技术、分布式训练方法以及大语言模型的微调。

此外还讨论了参数高效微调PEFT技术包括适配器、LoRA和QLoRA介绍了提示策略、模型压缩方法如剪枝和量化以及各种量化技术GPTQ、NF

GGML。

最后对用于减小模型大小的蒸馏和剪枝技术进行了讲解。

如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。

但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。

这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。

我在一线互联网企业工作十余年里指导过不少同行后辈。

帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。

2023年人才缺口已超百万凸显培养不足。

随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。

加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

大模型入门到实战全套学习大礼包

大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。

正确的学习路线可以为你节省时间少走弯路方向不对努力白费。

这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通

大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。

AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。

大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。

大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。

在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。

适用人群第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。

大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-

5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。

快速开发一个完整的基于 agent 对话机器人。

掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。

为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。

到此为止大概2个月的时间。

你已经成为了一名“AI小子”。

那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。

硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。

天道酬勤你越努力就会成为越优秀的自己。

如果你能在15天内完成所有的任务那你堪称天才。

然而如果你能完成

% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

911行情网站电视直播高清-911行情网站电视直播高清应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123