跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

大模型微调技术分类与 LoRA 实践指南

综述由AI生成系统梳理了大语言模型微调技术,涵盖全参微调与参数高效微调(PEFT)的分类对比。详细介绍了 Adapter、LoRA、QLoRA、Prefix Tuning 等核心方法的原理与适用场景,并阐述了预训练、有监督微调(SFT)及强化学习(RLHF)的训练流程。文章提供了基于 Python 和 Hugging Face 生态的 LoRA 微调实战代码,包含环境配置、参数设置及训练步骤。此外,还补充了数据准备规范、评估指标体系及常见问题解决方案,为大模型落地应用提供完整的技术参考。

数字游民发布于 2025/2/6更新于 2026/6/217 浏览
大模型微调技术分类与 LoRA 实践指南

前言

随着大语言模型(LLM)技术的飞速发展,如何高效地利用预训练模型解决特定领域任务成为业界关注的核心问题。全量微调虽然效果显著,但计算成本高昂;参数高效微调(PEFT)则通过更新少量参数实现快速适配。本文将系统梳理大模型微调的技术分类、核心原理及实践流程。

图 1. 大模型微调技术分类


一、微调分类

1. 按微调参数规模划分
1.1. 全参微调(Full Parameter Fine-Tuning, FPFT)

全参微调是指使用预训练权重作为初始化权重,在特定数据集上继续训练,更新模型中的所有参数。这种方法能够最大程度地适应新任务的数据分布,但需要消耗大量的显存和算力资源,通常仅适用于拥有充足硬件资源的场景。

1.2. 低参微调(Parameter Efficient Fine-Tuning, PEFT)

低参微调旨在用更少的计算资源完成参数的更新。其核心思想是只更新部分参数,或者通过对参数进行某种结构化约束(如稀疏化或低秩近似解)来降低微调的参数量。PEFT 方法在保持预训练模型通用知识的同时,显著降低了训练成本和显存占用,使得在消费级显卡上也能进行大模型微调。

经典的低参微调方法包括: Adapter(谷歌 2019)、LoRA(微软 2021)、QLoRA(微软 2023)、Prefix Tuning(斯坦福 2021)、Prompt Tuning(谷歌 2021)、P-Tuning(清华 2022)、P-Tuning v2(清华 2022)。以下将对上述多种低参微调技术进行详细整理。

1.2.1. Adapter

Adapter 微调方法涉及向预训练模型中添加小型、任务特定的模块(适配器)。这些适配器被插入到原始模型的层之间(通常在 Transformer 的 Feed-Forward 网络之后),并使用任务特定的数据进行训练。原始模型保持冻结状态,使其具有高效性并保留其通用知识,同时适应特定任务。Adapter 的优势在于模块化设计,便于多任务学习时的参数复用。

图 2. Adapter 微调原理

1.2.2. LoRA

LoRA(Low-Rank Adaptation)是一种基于低秩矩阵分解的微调策略。它假设模型权重的变化具有较低的内蕴维度,因此不直接更新所有参数,而是将权重增量分解为两个低秩矩阵 $A$ 和 $B$ 的乘积($ riangle W = BA$)。这样可以显著减少需要训练的参数数量,并保持原始模型结构不变,以较小的成本实现对下游任务的良好适应。LoRA 是目前应用最广泛的 PEFT 方法之一。

图 3. LoRA 微调原理

1.2.3. QLoRA

QLoRA(Quantized Low-Rank Adaptation)是 LoRA 方法的一种变体,特别针对量化场景设计。它在 4-bit 量化基础上结合了低秩矩阵分解,进一步压缩模型大小并降低计算成本。QLoRA 允许在单张消费级 GPU 上微调 65B 甚至更大的模型,极大地降低了大模型微调的门槛。

图 4. QLoRA 微调原理

1.2.4. Prefix Tuning

该方法为预训练语言模型引入一个可学习的'前缀'向量序列,在生成过程中将其与输入文本拼接作为模型的额外输入。模型只需优化这个固定长度的前缀向量,就能引导模型在不同的下游任务上产生合适的结果,避免了对模型主体参数的大规模更新。Prefix Tuning 保留了离散提示词的可解释性,同时具备连续提示词的灵活性。

图 5. Prefix Tuning 微调原理

1.2.5. Prompt Tuning

Prompt Tuning 专注于对提示(prompt)的微调,即将待解决的任务转化为预训练模型熟悉的格式(如同自然语言问答)。这种方法只更新少量被称为'prompt token'的参数,其余大部分参数保持固定。相比人工设计的硬提示词,Prompt Tuning 学习到的软提示词能更好地捕捉任务语义。

图 6. Prompt Tuning 微调原理

1.2.6. P-Tuning

P-Tuning 是 Prompt Tuning 的一种扩展形式,通过将连续的向量(称为'软提示')插入到模型输入中,替代手工设计的离散提示词。这种连续的提示向量经过训练后,能够更灵活且有效地指导模型处理各种下游任务,同时大幅减少需要更新的参数量。P-Tuning 引入了重参数化编码器来增强表达能力。

图 7. P-Tuning 微调原理

1.2.7. P-Tuning v2

P-Tuning V2 在 P-Tuning V1 的基础上进行了多项改进:

  1. :在每一层都加入了 Prompts tokens 作为输入,而不是仅仅加在输入层,这与 Prefix Tuning 的做法相同。这样得到了更多可学习的参数,且更深层结构中的 Prompt 能给模型预测带来更直接的影响。
层级注入
  • 移除重参数化:去掉了重参数化的编码器。研究发现重参数化的改进很小,尤其是对于较小的模型,同时还会影响模型的表现。
  • 动态提示长度:针对不同任务采用不同的提示长度。实验表明不同的理解任务通常用不同的提示长度来实现其最佳性能。
  • 多任务学习:支持先在多任务的 Prompt 上进行预训练,然后再适配下游任务,缓解连续提示随机惯性带来的优化困难。
  • 图 8. P-Tuning v2 微调原理


    2. 按训练流程划分

    图 9. LLM 训练流程划分(Pre-Training、Fine-Tuning、Alignment)

    2.1. 上下文学习 (In-Context Learning, ICL)

    ICL 区别于普通微调 Fine-Tuning,不对 LLMs 执行任何的微调,直接将模型的输入输出拼接起来作为一个 prompt,引导模型根据输入的数据结构 demo,给出任务的预测结果。ICL 能够基于无监督学习的基础上取得更好模型效果,并且不需要根据特定的任务重新微调 Fine-Tuning 更新模型参数,避免不同任务要重新进行真正的微调。另外,提示微调(Prompt Tuning)属于 ICL 的方式之一。

    2.2. 有监督微调(Supervised Fine-Tuning, SFT)

    在预训练基础上,使用标记数据对预训练模型进行微调的过程,以便模型能够更好地执行特定任务。SFT 是将通用大模型转化为垂直领域模型的关键步骤,通常需要构建高质量的指令 - 回答对数据集。

    图 10. 预训练–>有监督微调

    2.3. 基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)

    RLHF 是提升模型对齐人类价值观的重要环节,通常包含三个步骤:

    (1)预训练模型的有监督微调:收集提示词集合,并要求 Label 人员写出高质量的答案,然后使用该数据集以监督的方式微调预训练模型,得到基础 SFT 模型。

    图 11. SFT 阶段示意图

    (2)创建奖励模型(Reward Model, RM):对于每个提示 Prompt,要求微调后的 LLMs 生成多个回复,再由标注人员根据真实的偏好对所有回复进行排序,也可以称为 Alignment。接着训练奖励模型 RM 来学习人类的偏好,用于后续优化。RM 的目标是最大化人类偏好的评分。

    图 12. 奖励模型训练示意图

    (3)PPO 微调:使用强化学习的算法(如 PPO, Proximal Policy Optimization),根据奖励模型 RM 提供的奖励分数,对 SFT 模型进一步优化用于后续的推理(文字生成)。此过程旨在最大化期望奖励,同时限制模型偏离初始 SFT 模型过远(KL 散度惩罚)。

    图 13. PPO 微调流程


    3. 按训练方式划分
    3.1. 有监督微调(Supervised Fine-Tuning, SFT)

    使用标记数据对预训练模型进行微调的过程,以便模型能够更好地执行特定任务。这是目前最主流的微调方式。

    3.2. 指令微调(Instruction Tuning, IT)

    指令微调 Instruction Tuning 可以被视为有监督微调 SFT 的一种特殊形式。通过构造特殊的数据集,即<指令,输出>对的数据集,进一步训练 LLM 的过程,以增强 LLM 能力和可控性。由人类指令和期望的输出组成进行配对。这种数据结构使得指令微调专注于让模型理解和遵循人类指令。作为有监督微调的一种特殊形式,专注于通过理解和遵循人类指令来增强大型语言模型的能力和可控性。


    4. 微调优势
    4.1. 定制化模型

    通过微调大模型,可以根据用户自身的具体需求定制模型,从而提高准确性和性能,使其更贴合业务场景。

    4.2. 提高资源利用率

    通过减少从头开始构建新模型的方式进行预训练,从而来节省时间、算力资源和其他带来的成本。PEFT 技术更是将显存需求降低了数倍。

    4.3. 性能提升

    微调的过程,可以使用用户的独特数据集,来增强预训练模型的性能,特别是在专业领域的知识问答、文本生成等任务上。

    4.4. 数据优化

    可以充分利用客户的数据,调整大模型以更好地适应用特定数据场景,甚至在需要时合并新数据,实现持续学习。


    二、微调实践(以 LoRA 为例)

    在实际操作中,我们通常使用 Hugging Face 的 transformers 和 peft 库来实现 LoRA 微调。以下是完整的代码示例及关键步骤说明。

    import transformers
    import torch
    from torch.utils.data import Dataset
    from peft import LoraConfig, TaskType, get_peft_model
    
    # (1)加载微调前的原 model & tokenizer
    # 注意:需确保已安装 transformers 和 accelerate 库
    model_name_or_path = "baichuan-inc/Baichuan2-7B-Base"  # 替换为实际模型路径
    training_args = type('obj', (object,), {'cache_dir': './cache', 'model_max_length': 2048})()
    
    model = transformers.AutoModelForCausalLM.from_pretrained(
            model_name_or_path,
            trust_remote_code=True,
            cache_dir=training_args.cache_dir,
            device_map="auto"  # 自动分配设备
    )
    tokenizer = transformers.AutoTokenizer.from_pretrained(
            model_name_or_path,
            use_fast=False,
            trust_remote_code=True,
            model_max_length=training_args.model_max_length,
            cache_dir=training_args.cache_dir
    )
    
    # (2)LoRA 微调参数配置
    # r: 低秩矩阵的秩,越大能力越强但参数越多
    # lora_alpha: 缩放系数,通常设为 2*r
    peft_config = LoraConfig(
        task_type=TaskType.CAUSAL_LM,
        target_modules=["W_pack", "q_proj", "v_proj"],  # 指定要微调的层
        inference_mode=False,
        r=8,
        lora_alpha=32,
        lora_dropout=0.1
    )
    
    # (3)给 model 配置上 LoRA 参数
    model.enable_input_require_grads()    # 开启梯度记录
    model = get_peft_model(model, peft_config)    
    model.print_trainable_parameters()    # 打印可训练参数比例
    
    # (4)加载新的微调数据集
    # 此处假设已定义 SupervisedDataset 类,负责处理指令数据
    class SupervisedDataset(Dataset):
        def __init__(self, data_path, tokenizer, max_length):
            self.tokenizer = tokenizer
            self.max_length = max_length
            # 加载数据逻辑...
            
    data_path = "./data/train.json"
    dataset = SupervisedDataset(data_path, tokenizer, training_args.model_max_length)
    
    # (5)汇总 model、tokenizer、training_args & dataset
    trainer = transformers.Trainer(
        model=model,
        tokenizer=tokenizer,
        train_dataset=dataset,
        args=transformers.TrainingArguments(
            output_dir="./output",
            per_device_train_batch_size=4,
            gradient_accumulation_steps=4,
            learning_rate=2e-4,
            num_train_epochs=3,
            fp16=True,
            logging_steps=10,
            save_strategy="epoch"
        )
    )
    
    # (6)模型微调训练 & 微调结果保存
    trainer.train()        
    trainer.save_state()
    trainer.save_model(output_dir=training_args.output_dir)    
    

    环境依赖建议:

    • Python >= 3.8
    • PyTorch >= 1.13
    • transformers >= 4.30
    • peft >= 0.4.0
    • accelerate

    三、数据准备与评估

    1. 数据准备

    高质量的数据是微调成功的关键。对于指令微调,建议采用 JSONL 格式,每条数据包含 instruction(指令)、input(输入,可选)和 output(输出)。数据清洗应去除噪声、重复样本及敏感信息。若数据量较小,可采用数据增强技术(如回译、同义词替换)扩充样本。

    2. 评估指标

    微调完成后,需从多维度评估模型效果:

    • 困惑度(Perplexity, PPL):衡量模型对测试数据的预测不确定性,越低越好。
    • BLEU/ROUGE:适用于文本生成任务,衡量生成内容与参考文本的相似度。
    • 人工评估:邀请领域专家对生成结果的质量、准确性、安全性进行打分。
    • 基准测试:在 MMLU、C-Eval 等标准榜单上进行对比测试。

    四、常见问题与最佳实践

    1. 显存不足:若使用 4-bit 量化(QLoRA)仍报错,请检查 device_map 设置,或启用 gradient_checkpointing 以节省显存。
    2. 灾难性遗忘:微调可能导致模型丧失通用能力。可通过混合部分通用数据或使用较小的学习率来缓解。
    3. 过拟合:若验证集损失上升而训练集下降,应增加正则化(Dropout)或提前停止训练。
    4. 推理加速:微调后的模型可使用 bitsandbytes 库进行量化部署,提升推理速度。

    总结

    本文从微调参数规模、训练流程、训练方式三个角度对微调进行了系统分类,深入解析了 Adapter、LoRA、QLoRA 等主流 PEFT 技术的原理与差异。章节二以实战代码为例,分析了 LLM 微调的关键实现细节。章节三补充了数据准备与评估方法,帮助开发者构建完整的工作流。掌握大模型微调技术,是进入 AI 工程化领域的必经之路,建议结合具体业务场景反复实践,积累调优经验。

    目录

    1. 前言
    2. 一、微调分类
    3. 1. 按微调参数规模划分
    4. 1.1. 全参微调(Full Parameter Fine-Tuning, FPFT)
    5. 1.2. 低参微调(Parameter Efficient Fine-Tuning, PEFT)
    6. 1.2.1. Adapter
    7. 1.2.2. LoRA
    8. 1.2.3. QLoRA
    9. 1.2.4. Prefix Tuning
    10. 1.2.5. Prompt Tuning
    11. 1.2.6. P-Tuning
    12. 1.2.7. P-Tuning v2
    13. 2. 按训练流程划分
    14. 2.1. 上下文学习 (In-Context Learning, ICL)
    15. 2.2. 有监督微调(Supervised Fine-Tuning, SFT)
    16. 2.3. 基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)
    17. 3. 按训练方式划分
    18. 3.1. 有监督微调(Supervised Fine-Tuning, SFT)
    19. 3.2. 指令微调(Instruction Tuning, IT)
    20. 4. 微调优势
    21. 4.1. 定制化模型
    22. 4.2. 提高资源利用率
    23. 4.3. 性能提升
    24. 4.4. 数据优化
    25. 二、微调实践(以 LoRA 为例)
    26. (1)加载微调前的原 model & tokenizer
    27. 注意:需确保已安装 transformers 和 accelerate 库
    28. (2)LoRA 微调参数配置
    29. r: 低秩矩阵的秩,越大能力越强但参数越多
    30. lora_alpha: 缩放系数,通常设为 2*r
    31. (3)给 model 配置上 LoRA 参数
    32. (4)加载新的微调数据集
    33. 此处假设已定义 SupervisedDataset 类,负责处理指令数据
    34. (5)汇总 model、tokenizer、training_args & dataset
    35. (6)模型微调训练 & 微调结果保存
    36. 三、数据准备与评估
    37. 1. 数据准备
    38. 2. 评估指标
    39. 四、常见问题与最佳实践
    40. 总结
    • 💰 8折买阿里云服务器限时8折了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 🤖 一键搭建Deepseek满血版了解详情
    • 一键打造专属AI 智能体了解详情
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • 服务器环境 VS Code GitHub Copilot 加载超时排查与优化
    • 前端地图开发基础:服务类型、坐标系与 SDK 选型指南
    • OpenVLA 深度解析:基于 Prismatic VLM 的离散化动作预测方案
    • 零基础调用 OpenAI API 实战指南
    • OpenClaw 开源机器人项目实现空间智能体记忆与时间感知
    • NestJS 接口响应 Message 编写规范与 API 提示标准化
    • C++ 高并发内存池实战:内存释放流程详解
    • 位运算实战:两整数之和与只出现一次的数字
    • AI 产品经理转行大模型指南:核心素质与学习路径
    • Flutter 2 迁移实践与空安全详解
    • Python 将元组组成的列表转换为字典
    • 前端可访问性开发指南
    • 后仿真 SDF 反标常见 Warning 分析与处理指南
    • 多智能体架构选型:四种模式与决策指南
    • LeetCode 128:哈希集合巧解最长连续序列
    • Linux 进程间通信进阶:管道与共享内存详解
    • .NET 集成 GoView 低代码可视化大屏实战指南
    • VLA 模型真实世界分布式在线后训练系统 SOP 解析
    • GitHub 学生开发者认证指南与配置流程
    • ToDesk 发布 ToClaw:AI Agent 融入日常工作流

    相关免费在线工具

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

    • Mermaid 预览与可视化编辑

      基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

    • 随机西班牙地址生成器

      随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

    • curl 转代码

      解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online