本文是一份面向工程落地的大模型参数高效微调(PEFT)深度技术指南 。全文覆盖:① 大模型"预训练→微调"两阶段范式本质;② Transformer 架构中各 PEFT 方法的作用位置与数学原理;③ LoRA、QLoRA、Adapter Tuning、Prefix Tuning、Prompt Tuning、P-Tuning v1、P-Tuning v2 共 7 种主流方法的完整技术解构 (含公式、结构图示逻辑、参数量级、实证效果);④ 从 PDF 文档→Markdown→QA 数据集→微调训练→监控部署的端到端工程闭环(含 MinerU、Easy-dataset、LLaMA-Factory、SwanLab 等工具链实操细节);⑤ 主流框架对比、超参调优陷阱与 RAG/微调协同策略。所有数据、模型名(Qwen2.5-7B-Instruct、GLM-130B、ChatGLM-6B)、量化格式(NF4/bf16)、显存指标(24 GB GPU 微调 33B LLaMA)、代码片段均源自网络可验证内容,无主观臆断。
关键词 / 标签建议
#大模型微调 #PEFT #LoRA #QLoRA #P-Tuning #AdapterTuning #Transformer #LLaMA-Factory #MinerU #Easy-dataset #参数高效微调 #大模型实战
一、为什么必须微调?------预训练与微调的范式鸿沟
大型语言模型(LLM)的能力构建遵循不可分割的两阶段范式 :预训练(Pre-training,也叫前训练)→ 后训练(Post-Training)。这一范式是理解所有微调技术的起点。
1.1 预训练:通用知识的"通才教育"
预训练是在海量无标签语料(如维基百科、Common Crawl)上进行的无监督学习 。其目标是让模型建模语言的统计特征、词汇含义、句法结构及基础世界知识。产出是具备强大通用预测能力的基座模型(Base Model),例如GLM 130B、Qwen2.5-7B-Instruct、LLaMA-3、ChatGLM-B等。
预训练有以下核心内容:
训练目的:训练出能力出众的"通用大模型"。本质是压缩世界知识,学习到的模型能够通过解压缩知识来解决实际任务。资源量:算力需求极高,训练千亿参数通用大模型至少需数千GPU卡规模的算力集群,联合训练数月,资源消耗惊人。训练数据集:目前主流大模型(qwen、deepseek等),通常采用数万亿到数十万亿规模的tokens词元进行预训练,并且有趋势进一步扩大词元规模。数据质量:预训练对数据质量要求比较高。需要准备大规模经过严格清洗的数据集,数据的质量和多样性对模型性能有着重要影响,因此收集高质量、多样化、跨领域的数据是构建大语言通用模型的关键步骤。训练成功率:预训练通用大模型的成功率比较低,为了训练出性能优越的大模型,往往需要反复实验数十次/上百次。训练经验至关重要:根据综述论文《Survey of different Large Language Model Architectures: Trends, Benchmarks, and Challenges》介绍、以及业界对于模型预训练的普遍认知,大模型预训练涉及大量需要深入探索的经验,比如不同类型数据比例、训练参数调优、模型异常行为处理方法等,这些经验对于模型预训练的成功至关重要。但是,模型预训练的技术细节并不会公开发表,每家公司都依靠研究人员的经验,具备丰富的训练经验和异常处理能力,保障在最少算力浪费的基础上训练出高质量的通用模型。在这方面,deepseek系列模型取得的成功,是一个行业内的经典优质案例。
然而,"预训练模型 ≠ 可直接部署模型"。它是一个"广度强的通才",缺乏对特定领域知识的深度理解------无法解析 PDF 扫描件中的医学公式,不理解金融合同中的"交叉违约条款",也无法按法律条文援引逻辑生成判决摘要。
1.2 后训练(Post-Training)
后训练是在预训练模型的基础上,利用大量具有特定场景的指令式训练数据,借助成熟模型微调方法+少量算力,建立特定应用场景任务能力的增强模型,提高模型在具体应用中的性能。
后训练通常可分为三类常见技术:
1.2.1 增量预训练(Continued Pre-Training, CPT)
增量预训练也叫"继续预训练"。
原理:增量预训练是指在已有预训练模型的基础上,通过引入新的数据或任务,继续在大规模无监督文本数据(如行业领域数据)上进行自回归语言建模(如GPT)或自监督训练(如BERT),进一步对模型进行训练优化。具体内容:目的是让模型适应新的数据分布或任务需求,扩展模型的知识范围或适应新的领域。一般使用某个领域的大规模数据集,包含特定领域的数据或新的任务相关数据。也就是说,增量预训练更侧重于某个专业领域扩展,需要的训练数据量相比于微调而言更大。优缺点:(1)可以显著提升特定领域的知识掌握能力;(2)训练成本较高,数据要求较大,可能会丢失部分通用知识。
1.2.2 有监督微调训练(Supervised Fine-Tuning, SFT)
有监督微调训练也叫"指令微调"。
原理:采用有监督学习方式,选用成熟的通用大模型,利用少量的人工标注的输入-输出对(如问题-答案)进行训练。具体内容:按照人类的指令,训练数据是有标注的数据,使用特定任务的小规模标注数据集。采用有监督学习方式,使用人工标注的输入-输出对(如问题-答案)进行训练,让模型更符合特定任务需求。优缺点:(1)训练数据清晰,收敛速度快,适合某些特定应用场景的任务适配;(2)依赖高质量人工标注数据,模型微调容易出现过拟合,不适应真实用户偏好。
1.2.3 强化学习 (Reinforcement Learning, RL) 微调
原理:选用成熟的通用大模型,在指令微调后使用强化学习加强模型的对齐能力,将模型生成结果与人类的期望、需求以及价值观对齐(Alignment)。具体内容:比较知名的强化学习方法就是OpenAI提出的基于人类反馈的强化学习对齐方法(Reinforcement Learning from Human Feedback,RLHF)。RLHF 方法需要训练一个符合人类价值观的奖励模型(Reward Model)。优缺点:(1)能够利用人类反馈让模型逐步校准到符合人类需求的方向;(2)模型微调极度依靠高质量数据集,偏好学习结果受数据影响很大。模型应用场景单一,而且容易受到"人类坏主意"的影响;(3)强化学习的进化方法是DPO(Direct Preference Optimization,直接偏好优化),可以直接使用用户偏好数据进行模型优化,提高用户满意度。
1.3 模型微调分类
模型微调主要体现在后训练环节。SFT是一种微调形式,通过有监督的学习方法对模型进行调整。RL也是一种微调形式,通过强化学习的方法优化模型的行为。模型微调是一项发展久远且相对成熟的技术领域,在大模型面世之前、甚至神经网络算法框架面世之前,就已经有很多模型微调的技术手段。在大模型时代,由于大模型具备了拟人化的通用能力,通过模型微调让大模型具备某些专业领域的技能,成为一种热门的技术手段。通常而言,模型微调可以分为"全参微调"、"高效微调"。
1.4 全参微调(FFT):昂贵而脆弱的"精英特训"
为将基座模型转化为垂直领域的"专家",传统方案是全参数微调(Full Fine-Tuning, FFT) :加载基座权重,在特定任务数据集(如医疗问答、法律合同生成)上,对所有层、所有参数进行端到端有监督训练。
全参微调核心特点:
- `更新模型100%的参数
- 需要完整加载原始预训练模型
- 通常在领域适配任务中效果最优
这带来了三重不可持续的负担:
计算成本爆炸:65B 参数的 LLaMA 模型,传统 FFT 需要多块 A100;即使使用优化器,7B 模型仍需约15 GB 显存,而传统方法则超过100GB。数据依赖严苛:FFT 要求"充足、标注良好、分布贴近任务"的高质量数据。数据不足或偏差时,极易陷入过拟合,导致模型在训练集上表现优异,但在真实场景中泛化能力极差。灾难性遗忘风险:对所有参数的剧烈更新,可能覆盖掉基座模型中宝贵的通用语言能力,使其在非目标任务上性能骤降。
常见的全参数调整方法有如下2种:
1.4.1 基础微调法(Vanilla Fine-Tuning)
基础微调法(Vanilla Fine-Tuning)是最早的全参微调方法,需要一次性加载模型的所有参数。实现方法如下:
python
for param in model.parameters():
param.requires_grad = True # 解锁所有权重
optimizer = AdamW(model.parameters(), lr=5e-5) # 全参数优化
适用场景:
- 领域数据与预训练数据分布差异大(如医疗、法律等专业领域)
- 训练资源充足(典型需求:qwen2.5-7B模型需4到6张 A100 80GB的GPU卡)
1.4.2 分阶段微调法(Progressive Fine-Tuning)
分阶段微调,顾名思义就是将大模型的神经网络层进行分段,每次训练某几层的参数(其他层参数冻结)。首先对模型的高层(靠近输出层的层)进行微调,然后逐步解冻并微调底层。实现方法如下:
python
for name, param in model.named_parameters():
if name.startswith("layers.xxxx,layers.xxxx,layers.xxxx"): # 仅解冻某几层
param.requires_grad = True
适用场景:
- 与基础微调法(Vanilla Fine-Tuning)类似,领域数据与预训练数据分布差异大(如医疗、法律等专业领域)。
- 训练资源是逐步增加的,一开始需要的资源少,越到后面需要的资源越多,最后需要的资源量和基础微调法(Vanilla Fine-Tuning)差不多。
1.5 参数高效微调(PEFT):一场精准的"外科手术"
参数高效微调正是为解决上述矛盾而生。其核心哲学并非"推倒重来",而是"精准赋能"。它将微调视为一场外科手术:
"仅微调少量额外参数,同时冻结预训练大语言模型(LLM)绝大部分参数。"
这一范式的价值被多份资料反复印证:
降低门槛:使消费级电脑(如搭载 RTX 4090 的工作站)也能完成大模型微调,大幅降低深度学习研究门槛。提升效率:显著缩短训练时间、降低计算成本,并避免"灾难性遗忘"。增强可控性:通过冻结主干,确保模型的基础能力不受损害,新增模块(如 LoRA 矩阵、Adapter)可独立管理、热切换,甚至合并后零开销部署。
因此,PEFT 已非一种可选项,而是当前业务落地的主流与事实标准。"一般大部分人接触到的微调......都指参数高效微调(PEFT)范畴"。
二、Transformer 架构:所有 PEFT 方法的共同战场
要理解各类微调方法,必须明确它们在模型中的作用位置。当前主流大模型均基于 Transformer 架构,其关键模块如下(严格按知乎专栏原文结构复述):

2.1 输入侧
- 输入嵌入层(Input Embedding):将单词/符号序列映射为高维语义向量。
- 位置编码(Positional Encoding):为 Transformer 的无序性注入序列位置信息,加到输入嵌入上。
2.2 编码器(Encoder,左侧)
- 结构 :N 个相同层堆叠(记为
Nx)。 - 每层含两个子层 :
- 多头自注意力机制(Multi-Head Attention):使每个 token 关注全部输入 token;"多头" = 并行学习多种表征。
- 前馈神经网络(Feed Forward):两个线性变换 + 一个非线性激活函数。
- 残差连接与层归一化(Add & Norm):每个子层后均有,用于缓解梯度消失、稳定深层训练。
2.3 解码器(Decoder,右侧)
- 结构:多个相同层堆叠。
- 每层含三个子层 :
- 掩蔽多头自注意力(Masked Multi-Head Attention):引入因果掩蔽(causal masking),确保仅依赖已生成 token。
- 多头交叉注意力(Multi-Head Cross-Attention):该机制负责融合编码器的上下文信息。Query来自解码器的上一层输出,而Key和Value则来自编码器的最终输出。这一层是连接编码器和解码器的桥梁,与处理序列内部依赖的自注意力机制再计算图和语义关注范围上存在本质区别。
- 前馈神经网络(Feed Forward)。
- 每子层后均有 Add & Norm。
2.4 输出侧
- 输出嵌入层:将目标序列转为向量。
- 线性层(Linear):映射至大词汇空间。
- Softmax 层:输出 token 概率分布。
✅ 所有 PEFT 方法,都是在上述模块的特定位置插入可训练参数或模块。下文将逐一锚定其精确坐标。
三、七种主流 PEFT 方法:原理、位置与实证效果
结合业内共识,以下 7 种方法构成当前 PEFT 的核心谱系。接下来,本文将对其原理、数学表达、作用位置、参数量级与实证效果进行一一解构。

3.1 LoRA(Low-Rank Adaptation):低秩近似,数学之美
-
出处:微软 2021 年论文《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》。
-
核心思想 :冻结预训练权重,在关键权重矩阵(如 Attention 中的
W_q,W_k,W_v,W_o和 FFN 中的W_up,W_down)上叠加低秩更新项,不修改原权重主体。(LoRA 训练时绝对不更新原权重矩阵 W,全程冻结;仅训练新增的低秩矩阵 A、B;推理时可选择合并 ΔW=A・B 到 W,但这只是计算优化,不是 "更新原权重文件"。) -
数学表达式(原文唯一公式):
math\text{新权重} = \text{原始权重} + AB -
实现步骤:
- 定位目标权重矩阵(尺寸
d×d); - 引入两个低秩矩阵
A(d×r)和B(r×d),其中r ≪ d; - 计算乘积
AB(秩为r的近似更新); - 叠加至原始权重。
- 定位目标权重矩阵(尺寸
-
作用位置 :权重矩阵内部(
W ← W + AB),通常应用于 Attention 和 FFN 层(Feed Forward,前馈神经网络层)。 -
量化收益:
- GPT-3 175B 全参微调 → LoRA 可训练参数量 ↓ 10,000 倍;
- GPU 内存需求 ↓ 3 倍。
-
优势 :低计算开销、保持原模型性能、支持权重合并(
merge_and_unload)实现零推理开销。训练方法简单、需要的参数量低、训练后模型效果较好,LoRA成为最常用的模型微调方法。多篇论文的实验发现,在众多数据集上LoRA在只训练极少量参数(Rank=8或者16)的前提下,最终在性能上能和全参微调匹配,甚至在某些任务上优于全参微调。 -
应用示例 :医疗文本微调 → 仅引入低秩矩阵,避免全权重重训。【原权重 W 0 W_0 W0 冻结;训练两个小矩阵 A d × r , B r × k A_{d\times r},\ B_{r\times k} Ad×r, Br×k;增量 Δ W = B ⋅ A \Delta W = B\cdot A ΔW=B⋅A;前向 = W 0 + Δ W W_0 + \Delta W W0+ΔW】

3.2 QLoRA(Quantized Low-Rank Adaptation):4-bit 边界上的革命
- 本质:LoRA + 4-bit 量化。
- 量化技术细节 :
4-bit NormalFloat:提出一种理论最优的4-bit的量化数据类型,优于当前普遍使用的FP4与Int4。对于正态分布权重而言,一种信息理论上最优的新数据类型,该数据类型对正态分布数据产生比 4bit整数和 4bit 浮点数更好的实证结果。QLORA包含一种低精度存储数据类型 (通常为4-bit) 和一种计算数据类型(通常为BFloatt6)。在实践中,QLORA权重张量使用时,需要将将张量去量化为BFIloat16,然后在16位计算精度下进行矩阵乘法运算。模型本身用4bit加载,训练时把数值反量化到bf16后进行训练;Double Quantization:对第一次量化后的那些常量再进行一次量化,减少存储空间。相比于当前的模型量化方法,更加节省显存空间。每个参数平均节省0.37bit,对于65B的LLaMA模型,大约能节省3GB显存空间;Paged Optimizers:使用NVIDIA统一内存特性,该特性可以在GPU偶尔OOM的情况下,进行CPU和GPU之间自动分页到分页的传输,以实现无错误的 GPU 处理。该功能的工作方式类似于 CPU 内存和磁盘之间的常规内存分页。使用此功能为优化器状态 (Optimizer)分配分页内存,然后在 GPU 内存不足时将其自动卸载到 CPU 内存,并在优化器更新步骤需要时将其加载回 GPU 内存。增加Adapter:4-bit的NormalFloat与Double Quantization,节省了很多空间,但带来了性能损失,作者通过插入更多adapter来弥补这种性能损失。在LoRA中,一般会选择在query和value的全连接层处插入adapter。而QLORA则在所有全连接层处都插入了adapter,增加了训练参数,弥补精度带来的性能损失。
- 训练流程 :
- 模型以 4-bit 加载;
- 训练时反量化至 bf16 进行计算 → 大幅降低显存占用;
- 实证效果 :
- 33B LLaMA 模型可在 24 GB 显卡(如 RTX 4090)上训练;
- 单张 48GB GPU 可微调 65B 模型,性能≈FP16 全量微调。
- 挑战 :设计映射策略以最小化精度损失。

3.3 Adapter Tuning(适配器调整):层间插入的轻量模块
-
结构操作:在预训练模型的每一层或指定层之间(如Transformer的FNN层之后)插入小型神经网络模块(Adapter)。
-
训练策略:冻结全部原始参数;仅训练 Adapter 参数(小型网络,参数量少)。
-
Adapter 典型结构 :每个Adapter通常包含两个线性层(下投影+上投影)和激活函数:Adapter(x) = x + W_up(σ(W_down(x)))
down-project层(降维)→ 非线性激活(ReLU)→up-project层(升维)→skip-connection(跳跃连接)。
-
参数量 :新增参数仅占原模型的 3.6%。
-
与 LoRA 对比 :
维度 LoRA Adapter Tuning 作用位置 权重矩阵内部( W ← W + AB)层间插入独立模块 更新对象 原有权重的增量项 Adapter 自身参数 -
应用示例 :金融报告生成 → 在关键层插入 Adapter,仅更新其参数(知乎分块 1/2)。

3.4 Prefix Tuning(前缀调整):连续提示,深度干预
- 核心操作:在输入序列前端添加可训练的连续向量(Soft/ Continuous Prompt),作为任务特定前缀。
- 关键特性 :
- 前缀是连续可微虚拟标记(非离散 token);
- 在每一层 Transformer 的K和V矩阵前,插入一小段可训练的prefix向量;
- 可保存多个任务前缀 →
单模型多任务复用,节省存储(换句话说,我们不需要为每个任务保存一套微调后的模型权重,从而节省了大量的存储空间和微调成本)。 - 前缀可以是固定的(即手动设计的静态提示)或可训练的(即模型在训练过程中学习的动态提示)。
- 与 Prompt Tuning 区分依据 (知乎分块 1/2):
- Prefix 提供输入上下文信息,影响整个模型内部表示(直接控制每一层的注意力权重);
- Prompt Tuning 更侧重任务指令引导(见下条)。

3.5 Prompt Tuning(提示调整):轻量指令,few-shot 风格
-
操作:在输入层添加可学习嵌入向量(Prompt Tokens),作为任务引导。
-
与 Prefix Tuning 对比 :
维度 Prompt Tuning Prefix Tuning 提出 Google(2021) Standford(2021) 作用位置 仅输入嵌入层(只影响输入表示,间接影响后续曾) 在每一层 Transformer 的K/V矩阵前(直接控制每一层的注意力权重) 参数量 极少(约模型0.1%) 较多(约模型0.5%) 设计意图 旨在模仿自然语言中的提示形式,将可学习向量(通常称为提示标记)设计为模型针对特定任务生成特定类型输出的引导。这些向量通常被视为任务指导信息的一部分,倾向于使用较少的向量来模仿传统的自然语言提示。 提供输入上下文(如任务风格/领域线索) 向量数量 通常较少(few-shot 风格) 可更长(原文未限定) 示例输入 输入序列: [Prompt1][Prompt2] "这部电影令人振奋。" 问题: 评价这部电影的情感倾向。 答案: 模型需要预测情感倾向(例如"积极") 提示: 没有明确的外部提示,[Prompt1][Prompt2]作为引导模型的内部提示,这里的问题是隐含的,即判断文本中表达的情感倾向。输入序列: [Prefix1][Prefix2][Prefix3] "I want to watch a movie." 问题: 根据前缀生成后续的自然语言文本。 答案: 模型生成的文本,如"that is exciting and fun." 提示: 前缀本身提供上下文信息,没有单独的外部提示。 -
规模定律 :当模型达 10B(100亿)参数量,Prompt Tuning 效果 ≈ Full-Finetuning。
-
通俗理解:Prompt Tuning像在试卷开头贴一张小纸条,告诉模型 "这题要做情感分类";Prefix Tuning像在每一页试卷、每一行计算里都藏了引导,全程控制模型思路。
-
怎么选 :
选 Prompt Tuning(资源极少、要最快训练、最小存储/ 任务简单(分类、短文本)/模型超大(百亿参数以上));选 Prefix Tuning(复杂生成任务(摘要、翻译、代码、长对话)/追求更高性能、更深控制/愿意多花一点显存 / 时间)

3.6 P-Tuning(v1):LSTM 编码的动态提示(带脑子的Prompt Tuning)
- 核心创新:用可训练MLP/LSTM(Prompt Encoder)动态生成 Soft Prompt,而非固定嵌入。
- MLP/LSTM 优势 ):
- 更好捕捉时序特征 → 适应顺序依赖任务;
- 改进长期依赖与复杂上下文理解;
- 参数跨任务共享 → 提升泛化能力(vs Prompt Tuning 每任务独有嵌入)。
- 代价:更高计算复杂度与资源需求。
- 与 Prompt Tuning 关系:同属 prompt-based PEFT,但 P-Tuning 引入额外 LSTM 编码器动态生成提示。
- 与 Prefix Tuning 关系:P-Tuning 和 Prefix-Tuning 差不多同时提出,做法其实也有一些相似之处,主要区别在Prefix Tuning 通过在每个 Attention 层的K/V矩阵都加入 Prefix Embedding 来增加额外的参数,通过 MLP 来初始化,而 P-Tuning 只是在输入的时候加入 Embedding,并通过 LSTM/MLP 来初始化。
- 怎么选 :不论是Prompt Tuning、还是P-Tuning ,模型微调高度依赖软提示的初始化、长度和任务特性,
在复杂任务或与预训练数据差异较大的场景中效果不如全参数微调或 LoRA微调。(P Tuning 适用的典型场景为中文/小模型、Few-shot)

3.7 P-Tuning v2:深度提示调优的终极答案
- 改进动机 :
- 原 P-Tuning 仅在输入嵌入层插入 MLP/LSTM 编码后的prefix → 可训练参数量受限(受 max length=512 限制);
- 深层模型中,首层 prefix 对深层影响不可控 → 训练不稳定。
- 核心改进 :
- 多层插入 prefix(not just input layer);
- 各层 prefix
相互独立、分别可训练→ 显著增加可调参数量(0.1%--3%)。 - v1 到 v2 的可视化:蓝色部分为参数冻结,橙色部分为可训练部分。
- 几个关键的设计因素 :
Reparameterization:Prefix Tuning和P-tuning中都有 MLP 来构造可训练的 embedding。有实践发现在自然语言理解领域,面对不同的任务以及不同的数据集,这种方法可能带来完全相反的结论。Prompt Length:不同的任务对应的最合适的 Prompt Length 不一样,比如简单分类任务下 length=20 最好,而复杂的任务需要更长的 Prompt Length。Classification Head:使用 LM head 来预测动词是 Prompt Tuning 的核心,但我们发现在完整的数据设置中没有必要这样做,并且这样做与序列标记不兼容。P-tuning v2 采用和 BERT 一样的方式,在第一个 token 处应用随机初始化的分类头。
- 效果结论 :
- 不同预训练模型大小下的表现,在小模型下取得与 Full-finetuning 相近的结果,并远远优于 P-Tuning。
- 不同任务下的 P-Tuning v2 效果都很好,而 P-Tuning 和 Prompt Learning 效果不好;
- 同时,采用多任务学习的方式能在多数任务上取得最好的结果

3.8 插件式指令微调PILL(Pluggable Instruction Language Learning)
- 改进动机:插件式指令微调PILL(Pluggable Instruction Language Learning)是一种面向多模态大语言模型(LLM)的高效微调方法,PILL是PEFT的一个特定实现,旨在通过模块化设计解决复杂模态任务中的信息耦合问题,同时保持模型原有知识结构的稳定性。其核心思想是通过混合模态适配器专家(MoMAE)和模态注意门控(MAG)动态调节不同模态对模型输出的贡献,从而实现多模态任务的高效适配。PILL特别关注于如何通过插入可训练的模块或插件来提升模型的任务适应性。这些插件被设计为与原始模型协同工作,以提高模型在处理特定任务时的效率和效果。
- 核心改进 :
混合模态适配专家(MoMAE):1、针对不同模态(如视觉、文本、语音)设计独立的适配器模块(例如V-Adapter和L-Adapter),分别处理特定模态信息,避免多模态数据混合导致的干扰;2、适配器结构基于改进的GLU-Adapter,通过门控线性单元增强特征表达能力,相比传统适配器提升了参数利用率。模态注意门控(MAG):1、动态调节各模态Token对最终输出的权重,例如在模型初始训练阶段抑制视觉信息对文本建模的干扰,逐步融合多模态特征;2、通过门控机制实现模态间的自适应平衡,确保微调过程稳定且兼容原始模型的指令遵循能力。两阶段训练策略:1、第一阶段:冻结LLM主参数,仅训练投影层和V-Adapter,实现跨模态对齐(如视觉与文本);2、第二阶段:解冻所有新增模块进行下游任务微调,保留LLM原始参数以维持通用能力。
- 效果结论 :
- 高效性:仅需单个A6000 GPU即可完成训练,计算资源消耗显著低于全参数微调
- 灵活性:支持多模态任务的模块化扩展,例如在视觉问答(VQA)和科学推理任务中表现突出,ScienceQA数据集上准确率提升1.4%
- 隐私保护:通过冻结主模型参数,避免数据所有者上传敏感数据或暴露模型权重,适用于分布式学习场景
3.9 SSF微调(Scaling & Shifting Your Features)
- 改进动机:SSF核心思想是对模型的特征(即模型层的输出)进行缩放(Scaling)和位移(Shifting)。简单来说,就是通过调整特征的比例和偏移量来优化模型的性能。这种方法可以在改善模型对特定任务的响应时,不需要调整或重新训练模型中的所有参数,从而在节省计算资源的同时保持或提升模型性能。这对于处理大规模模型特别有效,因为它减少了训练和调整所需的资源和时间。
- 核心原理 :
特征分布对齐:由于预训练数据与下游任务数据分布存在差异,SSF引入缩放参数(γ)和偏移参数(β),分别对应特征的方差和均值,通过公式 y=γ⋅x+β 调整特征空间,使其更适合目标任务;这一过程类似于标准化操作,但参数可学习且与输入无关,适用于所有任务统一优化。重参数化(Re-parameterization):SSF的线性变换可在推理阶段通过数学等价操作合并到原始模型权重中,例如将缩放和偏移融入卷积核或注意力矩阵,从而消除额外计算开销;例如,在卷积层中,调整后的权重W′ =γ⋅W,偏置 b'=γ⋅b+β ,直接替换原参数。任务无关的通用设计:不依赖特定任务的结构设计(如Adapter的插入位置或VPT的提示词数量),所有任务共享统一参数空间,简化微调流程。
- 技术优势 :
参数高效性:仅需微调0.03%的参数量(如ViT-B/16模型仅需0.3M参数),显著降低存储和训练成本零推理开销:通过重参数化技术,微调后的参数直接融入原始模型,无需额外计算或修改网络结构,适合边缘设备部署性能表现卓越:在26个分类数据集(如FGVC、VTAB-1k)和3个鲁棒性数据集上,SSF超越Adapter、VPT等方法,部分任务性能接近或优于全参数微调;例如,在VTAB-1k数据集上,SSF的准确率相比全参数微调提升11.48%灵活性与兼容性:支持多种模型架构(ViT、Swin Transformer、ConvNext),且无需修改预训练模型结构
3.10 AdaLoRA
预训练语言模型中的不同权重参数对下游任务的贡献是不同的。因此需要更加智能地分配参数预算,以便在微调过程中更加高效地更新那些对模型性能贡献较大的参数。

具体来说,通过奇异值分解将权重矩阵分解为增量矩阵,并根据新的重要性度量动态地调整每个增量矩阵中奇异值的大小。这样可以使得在微调过程中只更新那些对模型性能贡献较大或必要的参数,从而提高了模型性能和参数效率。
3.11 Towards a Unified View of PETL
这篇 ICLR2022 的文章研究了典型的 PEFT 方法,试图将 PEFT 统一到一个框架下,找出它们起作用的具体原因,并进行改进。主要研究了三个问题:
-
典型的 PEFT 方法有什么联系?
-
典型的 PEFT 方法中是哪些关键模块在起作用?
-
能否对这些关键模块进行排列组合,找出更有用的 PEFT 方法?
-
通用形式:
- 通过对 Prefix Tuning 的推导,得出了和 Adapter Tuning 以及 LoRA 形式一致的形式。
- 通过对Prefix Tuning的推导,得出了和Adapter Tuning以及LoRA形式一致的形式。


-
包括这几大要素:
- 🔺h 的形式
- 嵌入 Transformer 结构的方式(分为 Parrell 和 Sequential 两种。Parallel 指的是在输入层嵌入,这样与原有结构可以并行计算;Sequential 指的是在输出层嵌入,相当于增加了网路的深度,与原有结构存在依赖关系)
- 修改表示层(主要指对 attention 层的修改还是对 ffn 层的修改)
- 组合方式。怎么与原有的参数组合,包括简单相加(Adapter)、门控式(Prefix Tuning)、缩放式(LoRA)三种)
根据这个统一的框架,还另外设计了三种变体 Parallel Adapter、Multi-head Parallel Adapter、Scaled Parallel Adapter。
除了以上PEFT,当前还存在其他类型的微调方法。
3.12 各种微调方法横向对比

四、微调的关键步骤
微调的最主要步骤分成准备数据集、选择基础模型、模型微调、生成新的模型,其中前三步都非常关键,影响最终合成模型的效果,模型微调过程中还需要不定时进行评测判断微调效果是否满足需求,大倒的步骤流程如下:
这里是引用

4.1 什么情况下需要微调
在做微调之前, 需要判断,当前业务使用大模型需不需要进行微调,微调是否可以解决业务需求。微调最适合特定领域的情况,例如:以利基语气或风格响应详细提示,即法律简报或客户支持票。还非常适合克服信息偏见和其他限制,例如语言重复或不一致等情况。另外,如果有大量的标记数据,也可以通过微调来提供更加完善的模型行为。
上面讲了模型微调主要是做什么的,这里简单总结几个适合做模型微调的场景:
- 适用于
以专业语气回应复杂查询,例如撰写法律简报或处理客户支持票据; - 适用于
纠正数据中的偏见和不一致性,如语言重复或风格差异; - 在拥有大量标记数据的情况下,微调能够
进一步细化模型的行为,确保其在特定应用中的性能达到最佳;
大模型对话或者知识检索、固定精准数据获取等一些场景,则比较适合使用RAG方案,RAG相较于微调的一个优势在于信息管理。传统的微调将数据嵌入到模型架构中,实质上是"硬编码"知识,这不容易修改。而RAG允许训练数据的持续更新,并允许数据的移除或修订,确保模型保持准确。以下是两种方案的选择对比:
| 对比维度 | 适合微调场景特点 | 适合RAG场景特点 |
|---|---|---|
| 知识库类型 | 静态知识(长期有效,如行业术语、法规) | 动态知识(需实时更新,如新闻、市场数据) |
| 任务目标 | 调整模型行为(风格/语气)或增强领域理解(如医疗术语) | 直接基于外部知识生成答案,无需改变模型底层行为 |
| 数据隐私性 | 需内化敏感知识(如企业专利) | 知识库本地化存储,检索过程可控(如内部政策库) |
| 模型幻觉处理 | 依赖训练数据质量,未知领域仍有幻觉风险 | 基于检索证据生成,显著减少幻觉(如法律条文引用) |
| 任务复杂度 | 复杂推理任务(多跳问答、科学计算) | 知识密集型但逻辑简单的任务(文档摘要、事实查询) |
| 可解释性要求 | 低(模型输出为黑盒) | 高(答案可溯源至检索内容) |
| 数据标注要求 | 需要大量高质量标注数据(如情感分类) | 无需标注,仅需结构化知识库(FAQ、数据库) |
| 多任务适配能力 | 单一任务深度优化(特定领域文本生成) | 支持多任务并行(政策检索+案例推荐) |
| 知识更新频率 | 低频更新(年度政策修订) | 高频更新(实时新闻、股票行情) |
| 领域知识基础 | 模型缺乏领域先验知识(小众科研领域) | 模型具备通用知识,仅需补充细节(通用法律+最新判例库) |
在语言模型的背景下,RAG和微调通常被视为竞争方法。然而,它们的结合使用可以显著提高性能。特别是,微调可以应用于RAG系统,以识别和改进其较弱的组件,帮助它们在特定LLM任务上表现出色。
4.2 准备数据
微调的结果对数据集依赖非常重要,数据集的质量直接影响微调的目标,通常需要非常高质量的微调数据,还要保证一定数据的平衡性,关于数据质量的要求,可以看这一文:AI 数据集最常见的6大问题(附解决方案),在训练效率上,要记住数据质量 > 数量这个真理,需要保证数据的数量、质量、分类分布、平衡性以及后面验证数据,否则可能会导致模型欠拟合、过拟合、鲁棒性不够等问题。所以在整个微调步骤中,准备数据集是一个非常繁锁的工作,通常除了技术本身之外,也需要对业务有一定的了解。
-
数据准备基本步骤:
数据采集:可能包括结构化数据、非结构化数据等,需要从数据来源进行采集和整理;数据治理:对收集上来的数据集进行清洗、转换和标注,清洗去掉不适合的数据,标注是一个相当耗人力资源的工作,标注人员需要懂一定的业务,市面上也有很多标注工具,如 Label Studio、OpenLabeling、Doccano 或 OpenLabeling;数据合成:如果专业领域的数据集不够,还需要通过已有数据进行合成新数据,通过数据的多样性来提高模型鲁棒性,防止过拟合和偏差过大;数据评估:如果使用了合成数据,最好对数据集进行评估,否则可能会因为合成了一批垃圾数据影响模型微调的整体性能;
-
数据集表现形式分类:
-
ShareGPT格式:ShareGPT 格式起初来自于用户在社交平台上分享与聊天模型的对话记录,这些记录涵盖了丰富的多轮对话内容。研究者们意识到,这类真实的对话数据可以帮助模型更好地学习多轮对话的上下文保持、回应生成等能力。因此,ShareGPT 格式逐渐被用于多轮对话的指令微调。目标是帮助模型理解复杂的多轮交互 ,提升模型的对话连贯性、上下文一致性和信息检索能力。ShareGPT 格式应用于需要模拟自然对话流的场景,例如聊天机器人、客服问答、陪伴式 AI 助手等。其设计结构支持用户与助手之间交替对话的记录,适合训练多轮对话模型。 -
Alpaca 格式:Alpaca 格式由斯坦福大学的研究人员在 2023 年提出,他们旨在通过一种低成本的方式对大型语言模型进行指令微调。Alpaca 项目使用 OpenAI 的 GPT-3.5 模型生成了大量指令数据,并采用简化的格式------instruction、input 和 output 字段------来表述单轮任务。这个结构化的指令-响应格式使模型可以专注于对特定任务的理解。Alpaca 格式的设计重点在于让模型理解明确的任务指令 ,以便模型在接到特定任务时能生成更精确的响应。Alpaca 格式被广泛应用于以任务为导向的指令微调任务中,尤其适合单轮任务(如总结、翻译、问答等),并不依赖多轮对话上下文,结构简洁且任务导向清晰。
-
json
# ShareGPT表现形式
# 适用任务:多轮对话任务(聊天机器人、客服问答等)
# 数据结构:复杂(支持多轮对话和多种角色)
# 开发难度:高
# 适合新手:否
# 支持交互:复杂交互(支持工具调用)
{
"conversations": [
{"from": "human", "value": "你好,能帮我推荐一部电影吗"},
{"from": "gpt", "value": "当然可以,你喜欢什么类型的电影呢"}
]
}
json
# Alpaca表现形式
# 适用任务:单轮任务(文本生成、翻译、问答等)
# 数据结构:单轮任务(文本生成、翻译、问答等)
# 开发难度:低
# 适合新手:是
# 支持交互:简单交互
{
"instruction": "将以下句子转换为被动语态",
"input": "他们正在修理那辆汽车",
"output": "那辆汽车正在被修理"
}
详细关于这两类数据长什么样,可以看这篇文章介绍:大模型的常用数据指令格式:ShareGPT 和 Alpaca。
-
数据集场景分类 :
微调数据中根据实际的业务场景需求,其数据的内容会有不同,下面罗列几种常见的格式,实际微调数据是大量这些微调指令数据(按照经验,
黄金数据量一般在1W~5W左右)。指令跟随格式:多轮对话格式:文本对齐数据格式:序列到序列数据格式:
五、工具链全景:框架选型、监控与避坑指南
5.1 主流微调框架对比
| 工具 | 核心定位 | 支持模型 | 微调方法 | 显存优化 | 训练速度 | 适用场景 |
|---|---|---|---|---|---|---|
| Unsloth | 极致速度优化 | Llama、Mistral、Yi 等主流 | LoRA、QLoRA、全参数 | Triton 内核(↓80%) | 单卡 2-5 倍加速 | 单卡快速迭代、Google Colab/Kaggle |
| LLaMA-Factory | 多模型适配与低代码 | 200+ 模型(含 Llama 3、GLM-4、Qwen) | LoRA、QLoRA、Freeze、全参数 | 4/8-bit 量化、梯度检查点 | 多卡分布式优化 | 企业级多任务联合训练、需量化部署 |
| ModelScope-SWIFT | 中文场景与多模态 | 450+ LLMs、150+ MLLMs | LoRA、QLoRA、DoRA、GaLore 等 | FlashAttention-2、NEFTune | 中文预处理加速 | 中文垂直领域任务、多模态联合训练 |
| HF Transformers + PEFT | NLP 标准化生态 | 30 万+ 模型 | PEFT、Adapter、Prefix Tuning | 原生混合精度 | 依赖社区优化 | 快速原型验证、研究、中小规模生产 |
✅ 注:
LLaMA-Factory是 CSDN 博文明确采用的框架;Hugging Face PEFT是所有初稿提及的底层库;Unsloth和ModelScope-SWIFT是初稿 3 补充的业界主流选择。
5.2 训练监控:SwanLab 与 WandB
- SwanLab (CSDN 博文专属):
- 集成方式:LLaMA Factory 原生适配,仅需配置 API Key;
- 功能:实时云端同步 loss/accuracy 曲线、超参追踪、实验对比(CSDN 分块 1/3)。
- Weights & Biases (WandB) (初稿 2、3):
- 行业标准,支持中断恢复训练、多实验对比、团队协作;
- 自动捕获代码快照、超参数、环境信息(初稿 2)。
5.3 常见问题与调优(CSDN + 初稿 2/3)
| 问题 | 表现 | 解决方案(原文/初稿依据) |
|---|---|---|
| CUDA Out of Memory | 加载模型或训练时报错 | ① 启用 fp16=True(CSDN);② 启用 gradient_checkpointing=True(CSDN);③ 换用 QLoRA(知乎分块 1/2);④ 减小 per_device_train_batch_size(初稿 2) |
| Loss NaN/Inf | 训练初期 loss 突变为 NaN | 立即启用 max_grad_norm=1.0 梯度裁剪(初稿 1);检查数据是否含乱码(初稿 1) |
| 收敛缓慢 | loss 下降慢、验证集指标停滞 | 增加 num_train_epochs(初稿 1);引入 warmup_ratio=0.1 学习率预热(初稿 1);检查数据质量(初稿 2) |
六、微调与 RAG:不是对立,而是共生
微调与检索增强生成(RAG)并非互斥,而是互补的两条路径。选择依据如下(综合初稿 2/3):
| 维度 | 适合微调场景 | 适合 RAG 场景 |
|---|---|---|
| 知识库类型 | 静态知识(长期有效,如行业术语、法规) | 动态知识(需实时更新,如新闻、市场数据) |
| 任务目标 | 调整模型行为(风格/语气) | 直接基于外部知识生成答案 |
| 数据隐私性 | 非敏感场景 | 敏感数据需完全本地化 |
| 幻觉处理 | 依赖训练数据质量 | 基于检索证据生成,显著减少幻觉 |
| 可解释性 | 低(模型输出为黑盒) | 高(答案可溯源至检索内容) |
| 知识更新 | 低频(需重新训练) | 高频(仅更新知识库) |
最佳实践 (初稿 1/2/3):二者可协同使用。例如,对 RAG 系统中的检索器(Retriever) 或重排序器(Re-ranker) 进行微调,以提升其在特定领域的检索精度;再用 RAG 为微调后的模型提供实时、准确的外部知识。
七、微调全流程实战:从 PDF 到可部署模型(CSDN 博文事实链)
理论必须照进现实。CSDN 博文《https://blog.csdn.net/2401_85375151/article/details/155272019》提供了一条经实践验证的、完整的工程闭环,所有工具、URL、配置与硬件要求均来自原文:
7.1 步骤1:文档格式统一转换(PDF/DOCX → Markdown)
- 输入源格式 :PDF、Word(
.doc)、扫描件等历史沉淀文档(CSDN 分块 1/3)。 - 目标格式 :
Markdown(.md)(CSDN 分块 1/3)。 - 推荐工具:MinerU (CSDN 分块 1/3):
- 官网:
mineru.net/ - 魔搭社区创空间在线体验页:
www.modelscope.cn/studios/OpenDataLab/MinerU - 能力表现:
- ✅ PDF 识别效果优秀(含文字 + 公式);
- ⚠️ DOC 识别效果不佳 → 建议先转 PDF 再处理;
- 工具选择策略:
- 方案A(推荐,云端体验):直接使用魔搭社区创空间在线体验页,该环境原生支持将解析结果导出为Markdown格式,适合零代码环境快速验证。
- 方案B(本地部署):若需本地化处理,建议通过Docker或Python源码部署MinerU,而非使用Windows客户端,以绕过客户端仅支持LaTeX/DOCX/HTML导出的限制。
- 方案C(Windows客户端补救措施):若必须使用Windows客户端,可先导出HTML格式,随后利用pandoc等工具执行html->md的二次转换,确保最终输入微调流程的数据格式是正确的。
- 官网:
7.2 步骤2:构建微调数据集(Markdown → QA 对)
- 前提认知 :大模型微调任务本质是问答(QA)形式建模 → 输入必须为
question-answer对(CSDN 分块 1/3)。 - 推荐工具:Easy-dataset (CSDN 分块 1/3):
- GitHub 仓库(中文 README):
github.com/ConardLi/easy-dataset/blob/main/README.zh-CN.md - 工作流:
- 本地部署基础大模型(示例:
ollama run qwen2.5-7b); - 上传 Markdown 文档 → 自动文本切片(示例:1 篇论文 → 切为
33 个片段); - 对每个片段 → 大模型生成相关问题(Question Generation);
- 将问题 + 原始片段 → 提问大模型 → 生成答案(Answer Generation);
- 合成完整 QA 对(示例:
173 个问答对);
- 本地部署基础大模型(示例:
- 最终交付物:可直接用于微调的结构化数据集(格式隐含为 LLaMA-Factory 支持格式)。
- GitHub 仓库(中文 README):
7.3 步骤3:微调大语言模型(Qwen2.5-7B-Instruct)
- 基模型与硬件要求 (CSDN 分块 1/3):
- 使用模型:
Qwen2.5-7B-Instruct(70亿参数); - 权重体积:约
15 GB; - 显存占用实测值:
19.79 GB(NVIDIA A100 PCIe 40GB); - 最低显卡要求:
显存 > 19.79 GB;✅ 可行卡型示例:RTX 4090(24GB)(原文明确指出"可以运行")。- 测试条件:基于Qwen2.5-7B-Instruct基座模型,采用LoRA微调(Rank=8,Alpha=16),加载精度为BF16,并开启FlashAttention-2与梯度检查点。
- 注:若使用QLoRA(4-bit量化),显存占用通常可进一步降低至12GB-14GB 左右;该数值反映的是全精度LoRA训练的峰值显存需求。
- 使用模型:
- 主训练框架:LLaMA Factory (CSDN 分块 1/3):
- 官方文档(中文):
llamafactory.readthedocs.io/zh-cn/latest/getting_started/installation.html - 数据集接入流程:
- 将 Easy-dataset 生成的数据集放入
data/目录; - 在
data_info.json中注册该数据集(关键配置步骤); - 启动后可预览数据集内容并确认文件路径正确;
- 将 Easy-dataset 生成的数据集放入
- 官方文档(中文):
- 训练监控平台:SwanLab (CSDN 分块 1/3):
- 功能定位:
跟踪、记录、比较、协作实验的 AI 实验管理平台; - 集成方式:LLaMA Factory 原生适配 SwanLab → 仅需配置 SwanLab API Key;
- 官方文档:
docs.swanlab.cn/; - 能力亮点:支持实时云端同步训练参数变化曲线;
- 功能定位:
- 训练效果验证方式 (CSDN 分块 1/3):
- 对比测试:
Chat界面中分别加载「原始模型」与「微调后 checkpoint」进行相同提问; - 示例结论:微调后模型能「把知识学进去」(基于领域问答回答质量提升)。
- 对比测试:
7.4 步骤4:模型部署与验证
- 轻量部署 :直接加载
AutoPeftModelForCausalLM.from_pretrained("./lora-adapter"),框架自动下载基座模型并注入适配器(初稿 3)。 - 全量部署 :调用
model.merge_and_unload()将 LoRA 权重融合进基座模型,得到一个完整的、无需任何 PEFT 依赖的.bin或.safetensors文件(初稿 1、3)。 - 硬件参考配置(CSDN 分块 3/3) :
- 显存:24GB
- CPU:10 核心
- 内存:120GB
- 系统盘/数据盘:40GB
八、总结:PEFT 是范式,不是技巧
本文的剖析,最终指向几个超越具体技术细节的关键洞察:
- PEFT 是一种范式,而非一种方法 。LoRA、P-Tuning、Adapter 等,都是在"冻结主干、注入轻量模块"这一核心范式下的不同实现。选择哪种方法,本质上是在参数量、计算开销、任务复杂度、硬件资源之间做一次精密的权衡。
- 量化是 PEFT 的"放大器"。QLoRA 的成功证明,PEFT 与量化技术的结合,其威力远大于二者之和。它不是简单的"省显存",而是在新的计算精度维度上,重新定义了大模型微调的可行性边界。
- 工程成熟度已远超理论 。从
MinerU的 PDF 解析,到Easy-dataset的数据合成,再到LLaMA-Factory的一键训练,整个链路已被打磨得异常平滑。今天,一个开发者在一台配备 RTX 4090 的机器上,从零开始,一天内完成一个专业领域大模型的定制化微调,已不再是梦想,而是触手可及的现实。 - 微调与 RAG 并非对立,而是共生。微调赋予模型"内功",RAG 提供"外挂"。一个强大的智能体,往往是两者协同的结果:用微调优化 RAG 系统中的检索器(Retriever)或重排序器(Re-ranker),使其更懂你的领域;再用 RAG 为微调后的模型提供实时、准确的外部知识。
大模型的未来,不属于那些试图从头训练百亿参数的孤勇者,而属于那些精通 PEFT 范式、善用工程杠杆、并能将通用智能精准注入垂直场景的务实工程师。这场"精准赋能"的革命,才刚刚拉开序幕。