
1. 引言
大模型(LLM)如 GPT、ChatGLM、LLaMA 等能力强大,但直接拿来做特定领域任务时常常"水土不服"------说话太泛、不懂专业术语、回答偏离预期。这时就需要 Fine-tuning(微调) 来让模型"进修"一下,变成你需要的领域专家。
通俗理解:
- 预训练模型就像上完初高中的学生,啥都懂点,但不精。
- 微调就是让他去读大学某个专业,变成领域专才。
本文将从最基础的概念讲起,结构清晰,重点内容带颜色高亮,并配有流程图和代码示例,非常适合复盘和学习。
2. 核心概念扫盲
2.1 什么是 Fine-tuning?
用一句话概括:
Fine-tuning 是在已有的预训练大模型基础上,用特定领域的数据继续训练,让模型适配下游任务的过程。
- 预训练:在海量通用数据(网页、书籍、代码)上训练,学到语言的通用规律。
- 微调:在相对少量高质量的任务数据上训练,调整模型参数,使其对特定输入给出预期输出。
2.2 为什么不直接从头训练?
- 成本巨大:训练一个千亿参数大模型需要数百万美元和上千张 GPU。
- 效果更好:预训练模型已经学会了语言结构,微调只需要"唤醒"相关能力即可。
- 数据量少也能玩:微调通常只需几百到几千条样本就能看到明显效果。
2.3 微调的典型场景
- 客服对话:让模型拥有你的产品知识,回答用户问题。
- 医疗问答:微调后可以理解病历、给出专业建议。
- 代码助手:针对你的公司私有代码库进行微调,生成合规代码。
- 角色扮演:让模型扮演某个历史人物或虚拟角色。
#mermaid-svg-ZIEpR9mtFAy04kar{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZIEpR9mtFAy04kar .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZIEpR9mtFAy04kar .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZIEpR9mtFAy04kar .error-icon{fill:#552222;}#mermaid-svg-ZIEpR9mtFAy04kar .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZIEpR9mtFAy04kar .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZIEpR9mtFAy04kar .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZIEpR9mtFAy04kar .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZIEpR9mtFAy04kar .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZIEpR9mtFAy04kar .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZIEpR9mtFAy04kar .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZIEpR9mtFAy04kar .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZIEpR9mtFAy04kar .marker.cross{stroke:#333333;}#mermaid-svg-ZIEpR9mtFAy04kar svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZIEpR9mtFAy04kar p{margin:0;}#mermaid-svg-ZIEpR9mtFAy04kar .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZIEpR9mtFAy04kar .cluster-label text{fill:#333;}#mermaid-svg-ZIEpR9mtFAy04kar .cluster-label span{color:#333;}#mermaid-svg-ZIEpR9mtFAy04kar .cluster-label span p{background-color:transparent;}#mermaid-svg-ZIEpR9mtFAy04kar .label text,#mermaid-svg-ZIEpR9mtFAy04kar span{fill:#333;color:#333;}#mermaid-svg-ZIEpR9mtFAy04kar .node rect,#mermaid-svg-ZIEpR9mtFAy04kar .node circle,#mermaid-svg-ZIEpR9mtFAy04kar .node ellipse,#mermaid-svg-ZIEpR9mtFAy04kar .node polygon,#mermaid-svg-ZIEpR9mtFAy04kar .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZIEpR9mtFAy04kar .rough-node .label text,#mermaid-svg-ZIEpR9mtFAy04kar .node .label text,#mermaid-svg-ZIEpR9mtFAy04kar .image-shape .label,#mermaid-svg-ZIEpR9mtFAy04kar .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZIEpR9mtFAy04kar .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZIEpR9mtFAy04kar .rough-node .label,#mermaid-svg-ZIEpR9mtFAy04kar .node .label,#mermaid-svg-ZIEpR9mtFAy04kar .image-shape .label,#mermaid-svg-ZIEpR9mtFAy04kar .icon-shape .label{text-align:center;}#mermaid-svg-ZIEpR9mtFAy04kar .node.clickable{cursor:pointer;}#mermaid-svg-ZIEpR9mtFAy04kar .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZIEpR9mtFAy04kar .arrowheadPath{fill:#333333;}#mermaid-svg-ZIEpR9mtFAy04kar .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZIEpR9mtFAy04kar .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZIEpR9mtFAy04kar .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZIEpR9mtFAy04kar .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZIEpR9mtFAy04kar .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZIEpR9mtFAy04kar .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZIEpR9mtFAy04kar .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZIEpR9mtFAy04kar .cluster text{fill:#333;}#mermaid-svg-ZIEpR9mtFAy04kar .cluster span{color:#333;}#mermaid-svg-ZIEpR9mtFAy04kar div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZIEpR9mtFAy04kar .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZIEpR9mtFAy04kar rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZIEpR9mtFAy04kar .icon-shape,#mermaid-svg-ZIEpR9mtFAy04kar .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZIEpR9mtFAy04kar .icon-shape p,#mermaid-svg-ZIEpR9mtFAy04kar .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZIEpR9mtFAy04kar .icon-shape .label rect,#mermaid-svg-ZIEpR9mtFAy04kar .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZIEpR9mtFAy04kar .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZIEpR9mtFAy04kar .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZIEpR9mtFAy04kar :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 预训练大模型
准备领域数据
选择微调方法
训练与验证
推理部署
3. 主流微调方法对比
根据资源限制和任务需求,可以选择不同的微调技术:
| 方法 | 思路 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 全量微调(Full Fine-tuning) | 更新所有参数 | 效果上限高 | 显存消耗极大 | 数据多、资源足 |
| LoRA(Low-Rank Adaptation) | 在部分层旁路加低秩矩阵 | 显存省、训练快、可插拔 | 理论上上限略低于全量 | 消费级显卡、快速迭代 |
| Adapter | 在 Transformer 层间插入小网络 | 参数增量极少 | 推理时增加延迟 | 多任务快速切换 |
| Prefix Tuning / P-Tuning | 在输入前加可训练的"软提示" | 不改变原始模型,极轻量 | 效果对任务敏感 | 理解类任务、快速适配 |
| QLoRA | LoRA + 量化,更进一步省显存 | 更低显存占用 | 训练速度略慢 | 家用显卡微调 70B+ 模型 |
重点建议 :初学者或 GPU 有限的同学,优先考虑 QLoRA,可在普通消费级显卡上微调 7B~13B 模型。
4. 实战:微调一个问答模型
下面以 ChatGPT/Ernie 等闭源模型之外的 开源模型(如 Baichuan2-7B)为例,演示 LoRA 微调流程。
4.1 环境准备
bash
# 安装依赖
pip install transformers datasets peft accelerate bitsandbytes
4.2 数据集格式
微调数据通常为 指令-回答 对,样例:
json
[
{
"instruction": "你是谁?",
"output": "我是由你的公司训练的专属助手,专门回答产品相关问题。"
},
{
"instruction": "怎么退货?",
"output": "您可以在订单页面申请退货,7天内无理由退款。"
}
]
4.3 构建训练数据的四个步骤
高质量的训练数据是微调成功的关键。构建数据通常遵循以下四个步骤:
-
收集实际业务 Query
- 目标:从真实业务场景中收集大量用户查询(Query),这些查询反映了用户的实际需求和表达方式。
- 方法:分析客服日志、用户反馈、搜索记录、产品使用数据等,提取高频、有代表性的问题。
- 要点:确保 Query 覆盖业务的主要场景,包含多样化的表达方式和问题类型。
-
构建 Agent Prompt(输入部分)
- 目标:将收集到的 Query 与合适的 Prompt 模板结合,形成完整的训练输入。
- 方法 :采用标准化的 Agent Prompt 五大核心要素 构造训练输入,确保智能体行为可控、可复现。
| 要素 | 含义 | 生信智能体示例 |
|---|---|---|
| Profile | 我是谁,扮演什么角色 | "你是一个生信数据分析智能体,精通基因组学、转录组学和蛋白质组学分析。" |
| Goal | 最终要达成什么目标 | "根据用户提供的基因数据,输出完整的基因分析结论,包括变异解读、功能注释和临床建议。" |
| Instruction | 做事流程与决策逻辑 | "按以下流程执行:1) 检查输入数据完整性;2) 缺少信息时主动调用工具获取;3) 循环推理直到数据充足;4) 给出最终结论。" |
| Tools | 可用工具及参数规范 | "- search_variant(cancer_type, gene_list) → 查询已知变异 - annotate_vcf(vcf_path) → 注释VCF文件 - fetch_clinical(id) → 获取临床记录" |
| Format | 输出格式约束 | "所有回复必须按以下JSON格式输出:{"thought":"...","tool_call":{"name":"...","params":{}}} 或 {"final_answer":"..."}" |
- **完整示例(生信 Agent Prompt 模板)**:
```
## Profile
你是一个生信数据分析智能体,精通基因组学、转录组学分析。
## Goal
根据用户提供的基因测序数据,输出完整的基因分析结论(含变异解读、功能注释、临床相关性)。
## Instruction
1. 接收用户输入的基因数据,检查完整性
2. 缺少关键信息时,调用 Tools 中对应的工具获取
3. 循环执行【分析 → 调工具 → 分析】,直到信息充足
4. 按 Format 格式输出最终结论
## Tools
- search_variant(cancer_type, gene_list):查询已知癌症相关基因变异
- annotate_vcf(vcf_path):对VCF文件进行功能注释
- fetch_clinical(patient_id):获取患者临床记录
## Format
调用工具时输出:{"thought": "推理过程", "tool_call": {"name": "工具名", "params": {...}}}
最终回答时输出:{"final_answer": "完整的分析结论"}
## 当前 Query
患者肺癌样本中检测到 EGFR 基因突变,请分析临床意义。
```
核心优势:标准化的五大要素让 Agent 行为可控、可复现,不同业务场景只需替换 Profile / Goal / Tools 即可快速适配。
-
生成标准答案(输出部分)
- 目标:为每个构建好的 Agent Prompt 生成准确、专业、符合业务要求的答案。
- 方法 :
- 人工撰写:由领域专家直接编写标准答案,质量最高但成本较高。
- AI 辅助生成:利用大模型(如 GPT-4、Claude 等)根据 Prompt 生成初步答案,可大幅提升效率。
- 混合方式:先用 AI 生成批量答案,再由人工进行审核和修正。
-
人工筛选与修正
- 目标:确保最终训练数据的质量,特别是当使用 AI 生成答案时。
- 流程 :
- 筛选:剔除不符合要求、有错误、有偏见或不安全的答案。
- 修正:对答案进行润色、优化表达、补充细节、确保专业性和准确性。
- 验证:抽样检查数据质量,确保指令-回答对的一致性、相关性和实用性。
- 核心原则:数据质量越高,最终微调得到的模型效果越好。 宁可少而精,不要多而杂。
关键提醒:这四个步骤构成了从原始业务数据到高质量训练数据的完整 pipeline。每一步都直接影响最终模型的效果,尤其是最后的人工筛选与修正环节,是保证数据质量的最后一道防线。
4.4 微调核心步骤
微调大模型的基本流程如下:
#mermaid-svg-OA1PrmRIudVqicvb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OA1PrmRIudVqicvb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OA1PrmRIudVqicvb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OA1PrmRIudVqicvb .error-icon{fill:#552222;}#mermaid-svg-OA1PrmRIudVqicvb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OA1PrmRIudVqicvb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OA1PrmRIudVqicvb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OA1PrmRIudVqicvb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OA1PrmRIudVqicvb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OA1PrmRIudVqicvb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OA1PrmRIudVqicvb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OA1PrmRIudVqicvb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OA1PrmRIudVqicvb .marker.cross{stroke:#333333;}#mermaid-svg-OA1PrmRIudVqicvb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OA1PrmRIudVqicvb p{margin:0;}#mermaid-svg-OA1PrmRIudVqicvb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OA1PrmRIudVqicvb .cluster-label text{fill:#333;}#mermaid-svg-OA1PrmRIudVqicvb .cluster-label span{color:#333;}#mermaid-svg-OA1PrmRIudVqicvb .cluster-label span p{background-color:transparent;}#mermaid-svg-OA1PrmRIudVqicvb .label text,#mermaid-svg-OA1PrmRIudVqicvb span{fill:#333;color:#333;}#mermaid-svg-OA1PrmRIudVqicvb .node rect,#mermaid-svg-OA1PrmRIudVqicvb .node circle,#mermaid-svg-OA1PrmRIudVqicvb .node ellipse,#mermaid-svg-OA1PrmRIudVqicvb .node polygon,#mermaid-svg-OA1PrmRIudVqicvb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OA1PrmRIudVqicvb .rough-node .label text,#mermaid-svg-OA1PrmRIudVqicvb .node .label text,#mermaid-svg-OA1PrmRIudVqicvb .image-shape .label,#mermaid-svg-OA1PrmRIudVqicvb .icon-shape .label{text-anchor:middle;}#mermaid-svg-OA1PrmRIudVqicvb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OA1PrmRIudVqicvb .rough-node .label,#mermaid-svg-OA1PrmRIudVqicvb .node .label,#mermaid-svg-OA1PrmRIudVqicvb .image-shape .label,#mermaid-svg-OA1PrmRIudVqicvb .icon-shape .label{text-align:center;}#mermaid-svg-OA1PrmRIudVqicvb .node.clickable{cursor:pointer;}#mermaid-svg-OA1PrmRIudVqicvb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OA1PrmRIudVqicvb .arrowheadPath{fill:#333333;}#mermaid-svg-OA1PrmRIudVqicvb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OA1PrmRIudVqicvb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OA1PrmRIudVqicvb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OA1PrmRIudVqicvb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OA1PrmRIudVqicvb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OA1PrmRIudVqicvb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OA1PrmRIudVqicvb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OA1PrmRIudVqicvb .cluster text{fill:#333;}#mermaid-svg-OA1PrmRIudVqicvb .cluster span{color:#333;}#mermaid-svg-OA1PrmRIudVqicvb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OA1PrmRIudVqicvb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OA1PrmRIudVqicvb rect.text{fill:none;stroke-width:0;}#mermaid-svg-OA1PrmRIudVqicvb .icon-shape,#mermaid-svg-OA1PrmRIudVqicvb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OA1PrmRIudVqicvb .icon-shape p,#mermaid-svg-OA1PrmRIudVqicvb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OA1PrmRIudVqicvb .icon-shape .label rect,#mermaid-svg-OA1PrmRIudVqicvb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OA1PrmRIudVqicvb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OA1PrmRIudVqicvb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OA1PrmRIudVqicvb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
- 环境与模型准备
- 构建训练数据
- 配置微调方法
- 启动训练
- 效果评估
满意? - 保存与部署
| 步骤 | 核心内容 | 关键点 |
|---|---|---|
| 1. 环境准备 | 安装 transformers、peft、datasets、bitsandbytes |
GPU/显存确认、4bit加载可省显存 |
| 2. 数据构建 | 按上节四步法(收集→组Prompt→生成答案→筛选)构建高质量指令-回答对 | 数据质量决定模型上限 |
| 3. 配置方法 | 选择 LoRA/QLoRA,设置 rank、alpha、dropout | 新手首选 QLoRA,r=8 起步 |
| 4. 启动训练 | 设置 epoch(3~5)、学习率(2e-4)、batch | 小 batch + 梯度累积,监控 loss |
| 5. 效果评估 | 自动评估 + 人工盲评,见下节 | 不要让模型背答案 |
| 6. 保存部署 | save_pretrained() 存 adapter,仅几十MB |
部署时合并或热插拔 |



4.5 训练代码片段(LoRA)
python
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
from peft import LoraConfig, get_peft_model
from datasets import load_dataset
model_name = "baichuan-inc/Baichuan2-7B-Chat"
model = AutoModelForCausalLM.from_pretrained(model_name, load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained(model_name)
lora_config = LoraConfig(
r=8,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
dataset = load_dataset("json", data_files="my_data.json", split="train")
# 训练参数
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
save_steps=500,
logging_steps=100,
learning_rate=2e-4,
max_grad_norm=0.3,
warmup_ratio=0.03,
lr_scheduler_type="cosine",
fp16=True
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset,
)
trainer.train()
训练完成后,可以直接用 model.save_pretrained("lora-adapter") 保存,仅需几十 MB,非常方便分享和部署。
5. 避坑指南与常见问题
微调不是数据丢进去就完事,以下坑点必须注意:
-
数据质量决定上限
"垃圾进,垃圾出"同样适用。务必清洗数据,保证指令和回答一致、无错误信息。
-
灾难性遗忘(Catastrophic Forgetting)
微调后模型可能把原本会的东西忘掉,尤其是单任务微调时。
解法 :混合通用数据、调整学习率、使用更轻量的微调方法(如 LoRA)。
注意:还需要避免灾难性遗忘,因微调导致大幅度降低模型的泛化能力。
-
过拟合
数据量太少或训练轮数太多,导致模型只会背答案,不会泛化。
解法:早停(Early Stopping)、增加数据多样性、增大 LoRA dropout。
-
显存不足
全量微调 7B 模型需要 60GB+ 显存,普通显卡扛不住。
解法:使用 QLoRA、梯度累积、DeepSpeed 等。
-
评估不科学
不要只看 loss,可设计多维度指标(如 BLEU、ROUGE、人工评估),或者直接让原模型和微调模型对答进行盲评。
6. 总结与学习路线
✅ 核心要点速记
- Fine-tuning 本质是 预训练 + 领域数据继续训练。
- 方法从重到轻:全量微调 > LoRA > Adapter > Prefix-tuning。
- 初学者首选 QLoRA,省钱、省时、效果好。
- 微调过程的八个字:数据保质,参数收敛。
- 一定记得评估,不能仅靠 loss。
🧭 推荐学习路径
- 入门:阅读本文,理解概念和主流方法。
- 实操:克隆一个开源微调项目(如 LLaMA-Factory、Firefly),跑通你的第一个 QLoRA 模型。
- 进阶:研究如何优化数据构造、编写高质量的指令微调数据。
- 工程化:学习模型部署、量化推理、LoRA 权重合并等。
微调不是终点,而是你定制 AI 的起点。掌握它,你就能打造属于自己的专属大模型!