
大模型微调技术基础
一、微调基础概念
1.1. 什么是大模型微调?
1.2 全量微调与高效微调的区别
1.3 模型微调的优劣势分析
二、高效微调核心技术:LoRA 与 QLoRA 简介
2.1 LoRA:低秩适配的高效微调方法
2.2 QLoRA:量化与低秩结合的优化方案2.3 LoRA 与 QLoRA 对比
三、高效微调的四大应用场景
3.1 对话风格微调
3.2 知识灌注
3.3 推理能力提升
3.4 Agent 能力提升
四、主流微调工具介绍
4.1 unsloth
4.2 LLama-Factory
4.3 ms-SWIFT
4.4 ColossalAI
4.5 其他微调框架
五、模型性能评估框架:EvalScope核心功能和特点
六、微调所需软硬件环境说明
6.1 硬件要求
6.2 Qwen3 系列模型微调显存占用
七、准备微调数据集
7.1 理解数据集构造的底层原理
7.2 常见微调数据集格式详解
7.2.1 基础问答格式(Alpaca 风格)
7.2.2 带系统提示和 Function calling 的格式
7.2.3 带思考过程的格式
7.3 Qwen3 混合推理模型的数据集构造方法
7.3.1. 选择基础数据集
7.3.2 数据集配比调整
7.3.3 格式统一与清洗
7.4 数据集获取与组装渠道
一、微调基础概念
1.1. 什么是大模型微调?
大模型微调指在已有的大规模预训练模型基础上,通过对标注数据进行训练,进一步优化模型的表现,以适应特定任务或场景的需求。与 RAG 或者 Agent 技术通过搭建工作流来优化模型表现不同,微调是通过修改模型参数来优化模型能力,是一种能够让模型 “永久” 掌握某种能力的方法。
1.2 全量微调与高效微调的区别
从方法大类划分,微调可分为全量微调与高效微调:
- 全量微调:带入全部数据进行微调,算力消耗更大,但对模型的能力改造更为彻底。
- 高效微调:只带入部分数据进行微调,更类似 “四两拨千斤” 的方法,通过修改模型部分参数,来调整模型整体能力。
1.3 模型微调的优劣势分析
- 优势:能够通过修改模型参数的方式,永久地修改模型的能力。
- 劣势:若处理不当,很可能造成模型原始能力的灾难性遗忘,即导致模型原始能力丢失,对于复杂模型尤其如此。因此需要小心谨慎地设计模型微调数据集和微调训练流程,并经过反复多次训练验证,得到最佳模型。
二、高效微调核心技术:LoRA 与 QLoRA 简介
尽管全量微调可以深度改造模型能力,但需消耗大量算力且有一定技术门槛。在绝大多数场景中,若只想提升模型某个具体领域的能力,高效微调会更加合适,而目前适用于大模型的最主流高效微调方法是 LoRA。
2.1 LoRA:低秩适配的高效微调方法
LoRA(Low-Rank Adaptation)微调是一种参数高效的微调方法,旨在通过引入低秩矩阵来减少微调时需要调整的参数数量,从而显著降低显存和计算资源的消耗。具体来说,LoRA 微调并不直接调整原始模型的所有参数,而是通过在某些层中插入低秩的适配器(Adapter)层来进行训练。
- 原理:在标准微调中,会修改模型的所有权重,而在 LoRA 中,只有某些低秩矩阵(适配器)被训练和调整。原始模型的参数保持不变,只是通过少量的新参数来调整模型的输出。低秩矩阵的引入能在显存和计算能力有限的情况下,有效对大型预训练模型进行微调,成为显存较小设备上的理想选择。
- 优势:
显存优化:只需要调整少量的参数(适配器),显著减少了显存需求,适合显存有限的 GPU。
计算效率:微调过程中的计算负担更轻,因为减少了需要调整的参数量。
灵活性:可以与现有的预训练模型轻松结合使用,适用于多种任务,如文本生成、分类、问答等。
2.2 QLoRA:量化与低秩结合的优化方案
QLoRA(Quantized Low-Rank Adaptation)是 LoRA 的扩展版本,它结合了 LoRA 的低秩适配器和量化技术。QLoRA 进一步优化了计算效率和存储需求,特别是在极端显存受限的环境下。与 LoRA 不同的是,QLoRA 会将插入的低秩适配器层的部分权重进行量化(通常是量化为 INT4 或 INT8),在保持性能的同时显著降低模型的存储和计算需求。
- 核心思想:在 LoRA 的基础上加入量化技术,减少权重表示的位数,从而降低显存和计算需求。QLoRA 结合了低秩适配器和量化的优点,能够在显存有限的设备上进行更高效的微调。
- 量化作用:通过将模型权重量化为低精度(如 INT4),减少内存占用,并提高推理和训练速度。
- 优势:在显存非常有限的情况下仍能进行微调;可以处理更大规模的模型;适合用于边缘设备和需要低延迟推理的场景。
2.3 LoRA 与 QLoRA 对比
特性 | LoRA | QLoRA |
核心技术 | 低秩适配器 (Low-Rank Adapters) | 低秩适配器 + 量化技术 (Low-Rank Adapters + Quantization) |
适用场景 | 显存受限,但设备性能较好 | 极限显存受限或需要快速推理的设备 |
计算效率 | 提高计算效率,减少调整的参数数量 | 进一步提升效率,减少内存使用并加快推理速度 |
量化技术 | 无量化 | 将权重量化为低精度 (如 INT4 或 INT8) |
内存消耗 | 较低,但不如 QLoRA 低 | 显著降低内存消耗,适合更小的设备 |
训练复杂度 | 较简单,适用于大多数微调场景 | 需要更多的量化和适配工作,但适合超大模型和设备受限场景 |
注意:大模型微调的 LoRA 与 QLoRa,二者相差一个字母的大小写,是完全两种不同的技术;LoRA 除了可以用于微调大语言模型(LLM)外,目前在围绕 diffusion models(扩散模型)进行微调,及图片任务中也表现惊艳。
三、高效微调的四大应用场景
在实际大模型应用场景中,高效微调主要用于以下四个方面:
3.1 对话风格微调
高效微调可以用于根据特定需求调整模型的对话风格。例如,针对客服系统、虚拟助理等场景,模型可以通过微调来适应不同的语气、礼貌程度或回答方式,从而在与用户互动时提供更符合要求的对话体验。通过微调少量的参数(例如对话生成的策略、情感表达等),可以使模型表现出更具针对性和个性化的风格。
3.2 知识灌注
知识灌注是指将外部知识或领域特定的信息快速集成到已有的预训练模型中。通过高效微调,模型可以更好地学习新领域的专有知识,而无需重新从头开始训练。例如,对于法律、医疗等专业领域,可以使用少量的标注数据对预训练模型进行微调,帮助模型理解特定行业的术语、规则和知识,进而提升专业领域的问答能力。
3.3 推理能力提升
高效微调还可以用于提升大模型的推理能力,尤其是在处理更复杂推理任务时。通过微调,模型能够更加高效地理解长文本、推理隐含信息,或者从数据中提取逻辑关系,进而在多轮推理任务中提供更准确的答案。这种微调方式可以帮助模型在解答复杂问题时,提高推理准确性并减少错误。
3.4 Agent 能力提升
在多任务协作或功能调用场景中,高效微调能够显著提升模型的 Agent 能力,使得模型能够有效地与其他系统进行交互、调用外部 API 或执行特定任务。通过针对性微调,模型可以学会更精准的功能调用策略、参数解析和操作指令,从而在自动化服务、智能助手或机器人控制等领域表现得更加高效和智能。
四、主流微调工具介绍
在入手学习大模型微调时,首先推荐功能层次封装层次较高的微调四套工具:unsloth、LlamaFactory、ms-SWIFT 和 ColossalAI。除此之外,也可以借助更加底层的库,如 peft、LoRA、transformer 等实现高效微调。对于初学者来说,首先使用现成工具来进行微调更为合适。
4.1 unsloth
unsloth 是一个专为大型语言模型(LLM)设计的动态量化与微调框架,旨在提高微调效率并减少显存占用。它通过手动推导计算密集型数学步骤并手写 GPU 内核,实现了无需硬件更改即可显著加快训练速度。
- GitHub 主页:https://github.com/unslothai/unsloth23。
- 性能表现:支持 Qwen3、Llama 4、Gemma 3 等多种模型,微调速度提升 2 倍,显存使用减少 70%-80% 等。
- 兼容性:与 HuggingFace 生态兼容,可以很容易地与 transformers、peft、trl 等库结合,以实现模型的监督微调(SFT)和直接偏好优化(DPO),仅需修改模型的加载方式,无需对现有训练代码进行修改。
- 核心优势:显著提升微调效率,采用独家 4bit 动态量化技术,节省时间成本;降低硬件要求,用户可在显存较小的 GPU 上进行大模型微调;开源免费,用户可在 Google Colab 或 Kaggle Notebooks 上免费试用。
4.2 LLama-Factory
LLaMA-Factory 是一个统一且高效的微调框架,旨在为超过 100 种大型语言模型(LLMs)和视觉语言模型(VLMs)提供便捷的微调支持。用户能够灵活地定制模型以适应各种下游任务。
- GitHub 主页:https://github.com/hiyouga/LLaMA-Factory30。
- 主要功能和特点:支持对 100 多 LLMs 和 VLMs 进行微调,包括最新模型版本;集成多种高效微调方法,提高训练速度并减少显存占用;支持音频识别、音频理解等多模态任务;提供丰富的实验监控工具;框架提供类似 OpenAI 风格的 API、Gradio UI 和命令行界面,结合 vLLM worker 实现高效推理能力。
4.3 ms-SWIFT
ms-swift(Scalable lightWeight Infrastructure for Fine-Tuning)是由魔搭社区(ModelScope)开发的高效微调和部署框架,旨在为研究人员和开发者提供一站式的大模型与多模态大模型的训练、推理、评测、量化和部署解决方案。
- GitHub 项目主页:https://github.com/modelscope/swift37。
- 模型支持:支持超过 450 种大型模型(LLMs)和 150 多种多模态大模型(MLLMs)的训练和部署,包括最新模型版本及多模态模型等。
- 技术特点:集成多种训练技术,满足不同微调需求;支持多种轻量级微调方法,降低显存和计算资源消耗;支持分布式训练技术,提升推理加速;提供多种量化方法,支持多种模态型训练;提供基于 Gradio 的 Web 界面,简化大模型全链路流程。
4.4 ColossalAI
Colossal-AI 是一个高效的分布式人工智能训练系统,旨在最大化提升人工智能训练效率,同时最小化训练成本。作为深度学习框架的内核,提供自动超高维并行、大规模优化库等前沿技术。
- GitHub 项目主页:https://github.com/hpcaitech/ColossalAI42。
- 优势表现:与英伟达的 Megatron-LM 相比,仅需一半数量的 GPU 即可完成 GPT-3 训练,半小时内预训练 ViT-Base/32,并在两天内训练完 15 亿参数的 GPT 模型。提供多种并行技术,如数据并行、流水线并行和张量并行,以加速模型训练。
- 特色:支持 DeepSeek R1 非量化模型高效微调,仅需 4 个节点、8 卡 A100 服务器即可完成 DeepSeek R1 高效微调44。
若是强化学习训练,则推荐veRL和OpenRLHF等框架。
4.5 其他微调框架
五、模型性能评估框架:EvalScope
项目地址:https://github.com/modelscope/evalscope45
EvalScope 是由阿里巴巴魔搭社区(ModelScope)推出的一款开源模型评估框架,旨在为大语言模型(LLM)和多模态模型提供统一、系统化的性能评估方案。该框架具备高度的自动化和可扩展性,适用于研究机构、工业界以及模型开发者在模型验证与性能对比场景中的广泛需求。
核心功能和特点
- 丰富的评测基准覆盖:内置多种权威评测数据集,涵盖中英文通用知识问答、数学推理、常识判断、代码生成等多个方向,支持多维度评估47。
- 多样的评估模式支持:提供单模型评估模式(Single)、基于基线的两两对比模式(Pairwise-Baseline)、全模型两两对比模式(Pairwise-All),满足不同使用场景。
- 统一的模型接入接口:对不同类型的模型提供统一调用方式,兼容 HuggingFace、本地部署模型及 API 远程调用,降低模型集成复杂度。
- 评估流程高度自动化:实现评测任务全自动执行,包括客观题自动打分、复杂问题使用评审模型辅助判定结果等,支持批量评估与日志记录。
- 完善的可视化工具:支持生成详细评估报告和图表,展示模型在不同任务维度下的表现,便于横向对比和性能分析。
- 多后端与评测能力扩展:可集成多个评测后端,支持从单模态到多模态、从语言建模到 RAG 端到端评测的全链路能力。
- 支持部署性能测试:提供服务端推理性能测试工具,涵盖吞吐量、响应时延等关键指标,帮助评估模型部署实用性。
六、微调所需软硬件环境说明
大模型微调属于大模型进阶类技术,不同于普通的模型对话或搭建基础应用,微调往往需要一定的软硬件条件支持。
6.1 硬件要求
不同尺寸模型、不同精度微调时所需显存不同,以下是相关参考:
模型尺寸 | Freeze (FP16) 显存需求 (GB) | LoRA (FP16) 显存需求 (GB) | QLORA (INT8) 显存需求 (GB) | QLORA (INT4) 显存需求 (GB) | 推荐硬件配置 |
7B | 20 | 16 | 10 | 6 | RTX4090、RTX4080、RTX3060 |
13B | 40 | 32 | 20 | 12-13 | RTX 4090/A100 (40GB)、L40(48GB) |
30B | 80 | 64 | 40 | 24 | A100 (80GB)、RTX4090 |
70B | 200 | 160 | 80 | 48 | H100 (80GB)、L40(48GB) |
110B | 360 | 240 | 140 | 72 | H100(80GB)5、H100(80GB)2、A10 (24GB)*3 |
其中 RTX4090 可等价替换为 RTX3090;A100 可替换为 A800(国内特供);L40 可替换为 L20(国内特供)56575859。
6.2 Qwen3 系列模型微调显存占用
模型名称 | 参数量 | FP16 微调显存占用 | 4-bit 动态量化微调显存占用 | 备注 |
Qwen3-0.6B | 0.6B | ~1.2 GB | ~0.5 GB | 可在低端 GPU 或 CPU 上运行 |
Qwen3-1.7B | 1.7B | ~3.4 GB | ~1.5 GB | 适合入门级部署 |
Qwen3-4B | 4B | ~8.0 GB | ~3.5 GB | 适合中等规模任务 |
Qwen3-8B | 8B | ~16.0 GB | ~7.0 GB | 需要高端消费级 GPU |
Qwen3-14B | 14B | ~28.0 GB | ~12.0 GB | 可在单张 RTX 4090 上微调 |
Qwen3-30B- A3B (MoE) | 激活参数约 3B | ~85.0 GB | 暂不支持 | 激活部分专家参数,资源需求较高 |
Qwen3-32B | 32B | ~65.0 GB | ~32.0 GB | 需要 A100/H100 或多卡并行 |
Qwen3-235B- A22B (MoE) | 激活参数约 22B | ~600 GB | 暂不支持 | 超大模型,适合企业级部署,需高端服务器支持 |
注 1:CPU 不能进行微调;
注 2:目前 MoE 模型只支持 4bit 普通量化微调,暂不支持动态量化微调。
七、准备微调数据集
在大模型微调流程中,数据集的质量直接决定微调效果。尤其是当模型需要具备复杂功能(如 Function calling、混合推理)或特定领域知识时,手动创建或优化数据集至关重要。以下是基于 Qwen3 模型微调的数据集准备方法:
7.1 理解数据集构造的底层原理
模型通过特殊字符标记识别输入类型、系统提示和输出边界,因此数据集需遵循模型的格式规范。以 Qwen3 为例,其核心特殊标记如下:
-
<|im_start|>
:标记文本开始,后跟角色(如user
/assistant
/system
) -
<|im_end|>
:标记文本结束
例如,简单对话的实际输入输出格式为:
<|im_start|>user
你好!<|im_end|>
<|im_start|>assistant
你好呀,很高兴见到你!<|im_end|>
这些标记可在模型的tokenizer_config.json
文件中查看完整定义。
7.2 常见微调数据集格式详解
7.2.1 基础问答格式(Alpaca 风格)
适用于简单指令微调,包含instruction
(指令)、input
(输入)和output
(输出)三个核心字段。例如:
{
"instruction": "识别并解释给定的科学理论",
"input": "细胞理论",
"output": "细胞理论是生物科学的基础理论,认为所有生命体由细胞构成,细胞是生物的基本结构和功能单位。"
}
微调时,脚本会自动将其转换为 Qwen3 兼容的标记格式:
<|im_start|>user
识别并解释给定的科学理论:细胞理论<|im_end|>
<|im_start|>assistant
细胞理论是生物科学的基础理论...<|im_end|>
7.2.2 带系统提示和 Function calling 的格式
若需提升模型的工具调用能力,数据集需包含系统提示、工具定义和调用示例。例如:系统提示:明确工具调用规则工具定义:通过<tools>
标签描述函数参数对话示例:
<|im_start|>system
你是天气助手,查询天气时需调用get_weather函数。
<tools>[{"name":"get_weather","parameters":{"location":"城市名称"}}]</tools>
<|im_end|>
<|im_start|>user
北京天气如何?<|im_end|>
<|im_start|>assistant
<tool_call>{"name":"get_weather","arguments":{"location":"北京"}}</tool_call><|im_end|>
需注意:高效微调仅能优化现有 Function calling 能力,无法让模型从无到有学会该功能。
7.2.3 带思考过程的格式
为提升模型推理能力(如数学解题、逻辑分析),数据集需包含中间思考步骤,用特殊标记(如<|think|>
)分隔思考过程与最终输出。例如:
<|im_start|>system
你是数学助手,需展示解题步骤。<|im_end|>
<|im_start|>user
计算3+5×2的结果。<|im_end|>
<|im_start|>assistant
<think>用户问的是3加5乘2,先算乘法再算加法,5乘2等于10,再加3就是13。</think>3+5×2=3+10=13<|im_end|>
模型会通过学习思考过程与最终答案的关联,提升推理逻辑性。
7.3 Qwen3 混合推理模型的数据集构造方法
为确保 Qwen3 在微调后保留混合推理能力,需采用 “多数据集拼接” 策略,核心步骤如下:
7.3.1. 选择基础数据集
- 普通对话数据:如
FineTome-100k
(含 10 万条多轮对话,ShareGPT 风格),用于保留模型的自然交互能力。 - 推理类数据:如
OpenMathReasoning
(含 54 万道数学题及详细解题步骤),用于强化逻辑推理能力。
7.3.2 数据集配比调整
需根据微调目标平衡不同类型数据的比例:
- 若侧重数学推理:可按 7:3 比例混合
OpenMathReasoning
与FineTome-100k
- 若需均衡能力:建议按 5:5 比例混合,避免模型过度偏向单一任务。
7.3.3 格式统一与清洗
- 确保所有数据转换为 Qwen3 兼容的标记格式(含
<|im_start|>
<|im_end|>
等)。 - 过滤重复样本、错误标注和低质量内容,避免模型学习噪声数据。
7.4 数据集获取与组装渠道
开源数据集
- 直接从 Hugging Face、ModelScope 下载,如:
mlabonne/FineTome-100k
(通用对话)
nvidia/OpenMathReasoning
(数学推理)
手动创建
- 针对特定领域(如法律、医疗),可结合专业文档编写问答对,确保知识准确性。
格式转换
- 使用工具将原始数据转换为目标格式,例如用 Python 脚本批量添加 Qwen3 的特殊标记。
通过以上方法构建的数据集,能让 Qwen3 在微调后既保留原有能力,又针对性提升目标任务性能。
本文转载自鸿煊的学习笔记,作者:乘风破浪jxj
