SFT 指令微调到底怎么做?
SFT 指令微调到底怎么做? - 一句话定位
SFT(Supervised Fine-Tuning,监督微调)是拿"输入→标准输出"的标注示范对,把一个已经预训练好的大模型继续训练,让它的几十亿个权重参数朝你的业务方向偏移;它解决的是"模型知道什么"无法靠 prompt/Few-shot/RAG 解决、必须改"模型本身是什么样"的问题,也是微调方法谱系里最常被产品团队点名的那一项。
核心概念(术语表)
- SFT(Supervised Fine-Tuning,监督微调):用"指令-答案"标注对继续训练预训练模型,针对具体任务优化参数;数据量小、训练成本远低于预训练,是模型厂商做"听懂指令"阶段以及业务团队做定制的主力方法。
- 预训练(Pre-training, PT):在海量未标注文本上用"下一个 token 预测"目标训练模型,学通用语言表示;成本极高(千卡级 GPU 跑数月),由模型厂商完成。
- LoRA(Low-Rank Adaptation,低秩适配):冻结原模型全部权重,只在旁边训练一个低秩矩阵增量补丁,可训练参数量通常只有原模型的百分之几到千分之几,消费级显卡就能跑。
- 全参数微调(Full Fine-Tuning):让模型所有权重参与更新,效果上限最高,但需要装得下原模型+训练状态的算力集群,通常只有大厂研究团队在玩。
- P-tuning v2:基于提示词的微调方法,只调部分参数,训练成本最低但适用场景较窄,多用于分类、抽取类轻任务。
- 冻结微调(Frozen SFT):冻结预训练模型主体权重,仅训练新增的少量任务特定组件,最大限度保留预训练知识,但需要精心设计任务头。
- RAG(Retrieval-Augmented Generation):检索增强生成,把外部知识库的内容当上下文喂给模型;改的是输入而非权重,与微调是互补关系而非替代。
- 灾难性遗忘(Catastrophic Forgetting):微调时新任务数据过强会把模型原本的通用能力冲掉,必须用小学习率 + 混合原始数据来缓解。
SFT 不是新概念,它本质上是迁移学习在 NLP 领域的落地,2018 年 GPT-1 论文(Radford et al., OpenAI)就把"预训练 + 有监督微调"两阶段范式跑通;2022 年 LLaMA、ChatGPT 引爆大模型时代后,SFT 成了把基座模型变成"会听话的助手"的必经阶段,典型代表是 ChatGPT 公开的 SFT → RM → RLHF 三步走,业内今天说的"微调"十有八九指的就是 SFT + LoRA 这套组合拳。
工作原理 / 核心机制
整体思路:SFT 的数学目标和预训练几乎一致——依然是"下一个 token 预测",只是训练数据从互联网原始语料替换成人工标注的"指令-答案"对,通过交叉熵损失函数(cross-entropy loss)逐 token 比对模型输出和标准答案的差异,反向传播更新参数;与预训练相比,数据规模小了 4-6 个数量级,但每一个样本都是"含金量极高"的示范。
输入 / 输出:输入是形如 {"instruction":"翻译成英文","input":"你好","output":"Hello"} 的 Alpaca 格式或 {"conversations":[{"role":"user","content":"…"},{"role":"assistant","content":"…"}]} 的 ShareGPT 多轮格式;输出是更新过部分(或全部)权重的模型 checkpoint,体积通常从几十 MB(LoRA 补丁)到几十 GB(全参微调 7B 模型)不等。
核心步骤详解:
- 第一步:数据准备。把业务场景的真实样本按统一 schema 整理成 JSONL(每行一个 JSON),常用 schema 包括 Alpaca(instruction/input/output 三字段,必选 instruction 和 output)和 ShareGPT(conversations 数组、严格 user/assistant 角色交替);多轮对话、角色扮演、思维链都要按对应 schema 落库。
- 第二步:模型初始化。下载基座模型权重(LLaMA-3、Qwen-2.5、ChatGLM 等),加载分词器(tokenizer),设定
padding_side="left"、最大序列长度等;这一步决定了你"站在谁的肩膀上"。 - 第三步:微调训练。选用小学习率(一般 1e-5 到 5e-5,比预训练低 1-2 个数量级),用 AdamW 优化器,batch size 根据显存 4-32 不等,训练 3-10 个 epoch;如果走 LoRA,配置
r=8/16/32、alpha=16/32、dropout=0.05,目标模块一般选q_proj和v_proj;耗时典型值:7B 模型 LoRA 微调 1 万条数据在单卡 A100 上大约 4-8 小时。 - 第四步:评估与迭代。自动指标用 BLEU、ROUGE 做生成质量、用困惑度(perplexity)做语言流畅度;业务指标靠人工抽检 + A/B;不达标就回到第一步补充数据或调整超参。
关键知识点(10-15 条 bullet,每条都要具体)
- SFT 的训练目标函数 = 预训练的"下一 token 预测" + 交叉熵损失;区别只在数据来源
- 预训练用万亿 token 未标注网页;SFT 通常 1 千 - 100 万条标注样本
- SFT 学习率典型值 1e-5 ~ 5e-5,是预训练(1e-4 ~ 1e-3)的 1/10,防止灾难性遗忘
- LoRA 默认冻结原模型权重,只训 r×d + d×r 两块低秩矩阵,参数量约为原模型的 0.1%-5%
- Alpaca 格式三字段:instruction(任务描述,必填)、input(任务输入,可选)、output(标准答案,必填)
- ShareGPT 格式核心:conversations 数组 + 严格 user/assistant 角色交替 + 可选 system 设定
- 微调典型成本结构:数据准备 60%、清洗标注 25%、训练 10%、评估 5%;大头从来不在训练
- LoRA 适配器文件一般 10-200 MB,推理时可热插拔,同一底座配多套 LoRA 像游戏机换卡带
- 灾难性遗忘典型场景:垂直领域微调 5 个 epoch 后,通用问答能力掉 15-30%
- 三类该微调的场景:输出格式高度固化、领域黑话/口径、小模型降本
- 三类不该微调的场景:想灌新知识(用 RAG)、想调行为(先改 prompt)、需求还在变(等稳定)
- 决策顺序:prompt → Few-shot → RAG → 工具调用 → 微调,跳级直达几乎必翻车
- 评估指标三件套:BLEU(机器翻译)、ROUGE(摘要)、人工抽检(业务效果)
- SFT 数据量经验值:格式类任务 200-500 条、口径类 1000-5000 条、复杂推理 1 万条以上
应用场景(3-5 个真实例子)
- 场景 1:JSON 严格输出。某电商客服系统用大模型生成售后工单,原本靠 prompt 写满 JSON schema,模型还是 30% 概率多包一层数组或字段名飘移;用 500 条严格 JSON 工单样本做 LoRA SFT 后,格式准确率从 70% 提到 99%,下游系统解析失败率几乎归零。
- 场景 2:领域口径内化。某三甲医院要把 AI 导诊话术对齐院内《规范化用语手册》,手册 200 多条规则塞进 prompt 后超出上下文窗口;改用 3000 条医生-患者对话 SFT 微调 Qwen-1.5B,话术合规率从 62% 升到 94%,单次推理成本降到原来的 1/15。
- 场景 3:小模型降本。80aj 站点记录的案例:用 Qwen 0.6B 在 8000 条意图分类样本上微调,替代原本调用 GPT-4o 的意图识别服务,单次调用成本从 0.03 元降到 0.0002 元,调用量 10 万/天的场景月省 8 万元。
- 场景 4:工具调用蒸馏。Needle 项目把 Gemini 的工具调用能力蒸馏进一个 26M 参数的小模型,在受限硬件上达到原大模型 90% 的工具调用成功率,本质就是用大模型输出当 SFT 教材训小模型。
- 场景 5:代码生成模型。CodeLlama 基于 LLaMA-2 用 500 亿 token 代码语料继续 SFT,得到 7B/13B/34B 三档代码专用模型,在 HumanEval 上从基座 30% pass@1 提升到 40%+。
常见误区 / 踩坑(4-6 条)
- ❌ 误区 1:"效果不好就上微调"。✅ 正解:prompt、Few-shot、RAG、工具调用四站全没走完就上微调,等于跳级高考——团队花几周攒数据训完发现不如把 prompt 改三遍。
- ❌ 误区 2:"微调是为了灌新知识"。✅ 正解:新知识用 RAG,微调解决的是"模型本身是什么样";把私域文档塞进 SFT 数据集,模型既记不住也容易幻觉。
- ❌ 误区 3:"LoRA 效果一定比全参差"。✅ 正解:在绝大多数中等复杂度任务上 LoRA 效果逼近全参微调(差距 <2%),但显存和存储省一个数量级;只有当任务需要大幅改动模型底层表征时全参才明显占优。
- ❌ 误区 4:"SFT 数据越多越好"。✅ 正解:1000 条高质量样本往往胜过 10 万条噪声样本;脏数据教坏模型比不教更危险,清洗标注才是真正的成本大头。
- ❌ 误区 5:"训练完就能上线"。✅ 正解:必须保留验证集做 early stopping、必须有"能力回退测试"(golden set)防止灾难性遗忘,否则垂直能力涨了 5%,通用能力掉了 30% 你都不知道。
性能 / 复杂度(数据驱动)
- 训练时间:7B 模型 + LoRA + 1 万条数据 + 单卡 A100 ≈ 4-8 小时;同配置全参微调需要 8 卡 A100 跑 1-2 天
- 显存占用:7B 模型全参微调约 60-80 GB(含优化器状态),LoRA 降至 16-24 GB,QLoRA 4-bit 量化后可压到 6-10 GB
- 可训练参数对比(以 7B 模型为例):
- 全参微调:约 70 亿参数参与更新
- LoRA (r=16):约 800 万 - 2000 万参数参与更新(占比 0.1%-0.3%)
- P-tuning v2:约 100 万 - 500 万参数
- 推理速度:LoRA 在推理时需要把增量矩阵与原权重合并(merge),合并后与原模型推理速度一致,无额外延迟
- 存储成本:7B 模型全参微调每个任务存一份 checkpoint ≈ 14 GB;LoRA 补丁 ≈ 20-50 MB,同一底座可配 100+ 任务
与相关概念的区别(至少 3 对)
- vs RAG(检索增强生成)
- 改的是什么:RAG 改输入上下文,SFT 改模型权重
- 可逆性:RAG 改知识库即可逆,SFT 要回滚模型
- 成本:RAG 加向量库+检索调用,SFT 一次性训练+持续运维
- 怎么选:知识频繁变 → RAG;行为/格式要固化 → SFT
- vs Prompt Engineering
- 适用边界:Prompt 适合零散、低频、规则少的任务;SFT 适合高频、规则多、必须"肌肉记忆"的任务
- 上限:Prompt 写得再长也装不下 200 条口径规则,SFT 可以
- 怎么选:先写 3 版 prompt,效果不行再考虑 SFT
- vs Few-shot Learning
- 上下文消耗:Few-shot 每条推理都带示例,token 成本高且不稳;SFT 把示例学进权重,推理零额外成本
- 稳定性:Few-shot 输出会随 prompt 编排漂移,SFT 一旦训好格式固定
- 怎么选:示例 ≤3 条用 Few-shot;需要 ≥5 条且格式固定用 SFT
- vs RLHF(基于人类反馈的强化学习)
- 训练目标:SFT 拟合标注示范,RLHF 拟合人类偏好排序
- 数据形式:SFT 要"标准答案",RLHF 要"答案 A 比答案 B 好"的成对比较
- 怎么选:先 SFT 打底,再用 RLHF 调风格/安全性
进阶 / 面试加分项
- 最新进展:QLoRA(4-bit 量化 + LoRA)让 65B 模型在单张 48GB 显卡上微调成为可能;DPO(Direct Preference Optimization)2023 年起逐步替代 RLHF,少一步奖励模型训练,效果持平甚至更好;Llama-Factory、Unsloth、Axolotl 等开源框架把 SFT 门槛降到"会写配置文件"即可。
- 业界争议:微调 vs RAG 的边界之争从未停歇,2024 年起越来越多团队走"SFT + RAG + 工具调用"三件套混合路线,把"行为"交给 SFT、把"知识"交给 RAG、把"动作"交给工具。
- 金句送给候选人:"微调是产品能力的最后一公里,不是第一公里;先走完 prompt、Few-shot、RAG 三站,再考虑动模型脑子。"
knowledge_points
- SFT 用"指令-答案"标注对继续训练预训练模型,本质是迁移学习
- SFT 与预训练共享"下一 token 预测"目标,仅数据来源不同
- SFT 学习率 1e-5 ~ 5e-5,比预训练低 1-2 个数量级
- LoRA 通过低秩矩阵分解实现参数高效微调,可训练参数仅原模型 0.1%-5%
- Alpaca 格式三字段:instruction(必选)、input(可选)、output(必选)
- ShareGPT 格式核心是 conversations 数组 + 严格 user/assistant 交替
- 微调成本结构:数据 60% + 清洗 25% + 训练 10% + 评估 5%
- 灾难性遗忘典型表现:垂直能力涨 5%,通用能力掉 15-30%
- LoRA 适配器体积 10-200 MB,可热插拔复用同一底座
- 三类该微调:格式固化、领域口径、小模型降本
- 三类不该微调:灌新知识(用 RAG)、调行为(先改 prompt)、需求还在变
- 决策顺序:prompt → Few-shot → RAG → 工具 → 微调,跳级必翻车
- SFT 评估三件套:BLEU、ROUGE、人工抽检
- SFT 数据量经验:格式类 200-500 条、口径类 1000-5000 条、复杂推理 1 万+
- 7B 模型 LoRA 微调 1 万条数据 ≈ 单卡 A100 跑 4-8 小时
- RLHF 训练目标是拟合偏好排序,SFT 训练目标是拟合标准答案
interview_qa
[
{
"question": "什么是 SFT?和预训练的核心区别是什么?",
"answer": "SFT(Supervised Fine-Tuning,监督微调)是在预训练好的大模型上,用人工标注的"指令-答案"对继续训练,让模型权重朝特定任务方向偏移。\n\n核心区别有三点:\n1. 数据形态——预训练吃万亿级未标注网页,SFT 吃 1 千到 100 万条标注样本;\n2. 训练目标——两者数学上都是"下一 token 预测"+ 交叉熵损失,但 SFT 每条样本都是"含金量极高"的示范;\n3. 成本量级——预训练需要千卡级 GPU 跑数月,SFT 单卡 A100 几天就能完成 7B 模型的 LoRA 微调。\n\n典型场景:用 500 条 JSON 格式工单样本做 SFT,模型格式准确率能从 70% 提到 99%。金句:SFT 是把基座模型"听懂指令"的那一步,也是产品团队最常用的定制手段。\n\n加分:SFT 通常是模型厂商两阶段范式(预训练 + SFT)中的第二步,再往后还有 RLHF/DPO 做偏好对齐。",
"difficulty": "easy",
"category": "概念"
},
{
"question": "LoRA 的核心思想是什么?为什么能用这么少参数逼近全参微调?",
"answer": "LoRA(Low-Rank Adaptation)的核心思想是:冻结预训练模型全部权重,在旁边并行训练一个低秩矩阵增量 ΔW = A×B,其中 A 是 r×d 维、B 是 d×r 维,r(秩)一般取 8/16/32,远小于 d(隐藏维度)。\n\n为什么有效有三个原因:\n1. 内在低秩假设——模型在适配新任务时,权重更新矩阵的"有效秩"很低,用低秩近似就够了;\n2. 训练成本骤降——7B 模型可训练参数从 70 亿降到 800 万 - 2000 万,显存从 60-80 GB 降到 16-24 GB;\n3. 推理零成本——部署前把 ΔW 合并回原权重,推理速度与原模型完全一致。\n\n对比 QLoRA 还能把基座量化到 4-bit,让 65B 模型在单卡 48GB 上微调。在中等复杂度任务上 LoRA 与全参差距 <2%,但存储只需 20-50 MB 一个任务,同一底座可配上百个 LoRA 补丁。\n\n加分:LoRA 权重初始化有讲究——A 用高斯初始化、B 用全零初始化,保证训练起点 ΔW=0,不影响原模型表现。",
"difficulty": "easy",
"category": "原理"
},
{
"question": "微调到底需要多少数据?怎么估算?",
"answer": "数据量没有银弹,但有经验规律可循:\n1. 格式类任务(如固定 JSON 输出)—— 200-500 条高质量样本就够;\n2. 口径/术语类(如医疗话术合规)—— 1000-5000 条;\n3. 复杂推理/工具调用类—— 1 万 - 10 万条起步。\n\n估算方法分三步:\n- 先用大模型跑通任务,过程中天然积累 500-2000 条种子数据;\n- 按 8:1:1 切成训练/验证/测试集,先训一版看 loss 曲线;\n- 如果验证集指标还没收敛,每轮迭代补 20%-30% 数据,直到过拟合或指标达标。\n\n关键:数据质量远比数量重要。1000 条专家精标的样本通常胜过 10 万条噪声样本,80aj 那篇经典教程里把"清洗标注"列为仅次于"数据准备"的第二大成本项,占总投入 25%。\n\n加分:低于 200 条样本建议直接走 Few-shot 或 prompt,别硬上微调——数据量过少时 LoRA 容易欠拟合,全参微调容易过拟合。",
"difficulty": "medium",
"category": "应用"
},
{
"question": "SFT 数据格式有哪些?Alpaca 和 ShareGPT 怎么选?",
"answer": "SFT 数据格式按任务复杂度分四类:\n\n1. 单轮指令类——Alpaca 格式 {"instruction":"翻译成英文","input":"你好","output":"Hello"},三字段(instruction 必选、input 可选、output 必选),适合翻译、摘要、QA;代表数据集 MetaMathQA。\n\n2. 单轮 QA 类——{"question":"…","answer":"…"},可加 context 字段加背景,纯问答场景。\n\n3. 多轮对话类——ShareGPT 格式核心是 conversations 数组,严格 user/assistant 角色交替;扩展形态包括层次化对话(带 speaker/timestamp/actions)、角色扮演(带 system 角色设定)。\n\n4. 增强训练类——CoT 思维链格式,把 reasoning_steps 显式建模,提升数学/代码能力。\n\n选择策略:单任务、单轮 → Alpaca;多轮对话、客服、助手 → ShareGPT;需要可解释推理 → CoT;法律/医疗等专业场景 → 自定义结构化 schema(如 {"case_id","legal_issue","facts","judgment"})。\n\n加分:专业场景务必保留特殊符号(代码缩进、制表符),json 用 jq 处理,HuggingFace load_dataset 一行代码就能转 Arrow 格式喂给训练框架。",
"difficulty": "medium",
"category": "应用"
},
{
"question": "微调会让模型忘掉原来的能力吗?怎么避免灾难性遗忘?",
"answer": "会,而且非常常见。典型表现:垂直领域 SFT 5 个 epoch 后,特定任务准确率涨 5%,但通用问答、数学推理等基础能力掉 15%-30%,业内称为"灾难性遗忘"(Catastrophic Forgetting)。\n\n避免方法有四招:\n1. 小学习率——SFT 学习率压到 1e-5 ~ 5e-5,比预训练(1e-4 ~ 1e-3)低 1-2 个数量级;\n2. 数据回灌——训练数据里混入 10%-30% 通用指令数据(Alpaca 数据集、OpenOrca 等),让模型在垂直和通用能力之间平衡;\n3. Early Stopping——按验证集 loss 提前停止,不要死磕训练 loss;\n4. Golden Set 回归测试——每次训完跑一遍通用能力基准(mmlu、ceval、gsm8k),任何一项掉超过 5% 必须回滚。\n\n进阶手段:LoRA 本身就比全参微调抗遗忘,因为原权重被冻结,理论上不可能"改坏"原模型,只会学到补丁;EWC(Elastic Weight Consolidation)算法给重要参数加约束,但工程上很少用。\n\n加分:DPO 和 RLHF 阶段也会引入遗忘,所以工业界通常按"SFT → DPO/RLHF"两阶段串行做,每阶段都跑 Golden Set。",
"difficulty": "medium",
"category": "踩坑"
},
{
"question": "什么场景该微调、什么场景不该微调?怎么给老板提建议?",
"answer": "判断要不要微调的核心句式:"你想改的是模型知道什么,还是模型本身是什么样?"——前者用 prompt/RAG,后者才考虑微调。\n\n该微调的三类场景:\n1. 输出格式高度固化(如严格 JSON、固定版式报告),几百条样本训下去格式稳定性远超 prompt 反复叮嘱;\n2. 领域黑话与口径(如医疗术语、法务话术、客服禁用词),规则多到塞不进 prompt;\n3. 小模型降本(用 Qwen 0.6B 微调替代 GPT-4o 跑分类任务,单次成本能从 0.03 元降到 0.0002 元)。\n\n不该微调的三类场景:\n1. 想灌新知识——私域文档进 RAG,别进 SFT 数据集;\n2. 想调行为——先把 prompt 改三版、Few-shot 试五例;\n3. 需求还在变——微调周期长、迭代慢,等需求稳定 2 个月再启动。\n\n给老板的建议模板:"我建议先走 prompt 工程 1 周 + RAG 2 周,效果达标就不动模型;不达标再启动 SFT,整体周期 4-6 周,预估成本 X 万元,其中数据准备占 60%。"\n\n加分:决策顺序铁律——prompt → Few-shot → RAG → 工具调用 → 微调,跳级直达几乎必翻车,因为前几站都没走通的需求,微调也救不了。",
"difficulty": "medium",
"category": "应用"
},
{
"question": "全参微调、LoRA、P-tuning v2、冻结微调怎么选?",
"answer": "四种方法按"可训练参数占比"和"任务复杂度"形成清晰分层:\n\n1. 全参微调——调所有权重(约 70 亿参数 for 7B 模型),效果上限最高,但需要 8 卡 A100 + 1-2 天,存储每任务一份 14 GB checkpoint;只适合大厂研究团队和数据量 >10 万条的复杂任务。\n\n2. LoRA——冻结原权重,只训 r×d + d×r 增量(约 800 万 - 2000 万参数),效果逼近全参(差距 <2%),单卡 A100 几小时搞定,存储每任务 20-50 MB;适合绝大多数业务场景,是业界默认选项。\n\n3. QLoRA——基座量化到 4-bit + LoRA,65B 模型都能在单卡 48GB 上微调;适合消费级硬件和极限显存场景。\n\n4. P-tuning v2——基于提示词的微调,只调部分 prefix 参数(约 100 万 - 500 万),训练成本最低但适用场景窄,多用于分类、NER、抽取等结构化轻任务。\n\n5. 冻结微调——冻结主体权重,仅训练任务头(分类器、生成头等),最大限度保留预训练知识,但要精心设计任务特定组件。\n\n选择策略:预算紧 + 任务中等 → LoRA;硬件受限(<24GB 显存)→ QLoRA;任务极简单(分类/抽取)→ P-tuning v2;数据极少(<500 条)→ 冻结微调;效果天花板压不住 → 全参。\n\n加分:LoRA 配合 rank=64 + alpha=128 + 目标模块扩到 q/k/v/o + MLP,可以逼近全参 95% 效果,这是开源社区跑出来的实战经验值。",
"difficulty": "hard",
"category": "对比"
},
{
"question": "线上模型效果下降,怎么判断是不是微调引入的问题?怎么排查?",
"answer": "线上效果下降的排查要按"数据 → 模型 → 推理"三段定位,微调相关问题集中在前两段。\n\n排查步骤:\n1. 复现问题——用线上 prompt 在微调前的基座模型上跑同一批 case,如果基座正常、微调后异常,说明问题在微调环节;\n2. 检查 Golden Set——跑 mmlu、ceval、gsm8k 等通用基准,任何一项比微调前掉 >5% 基本可以判定灾难性遗忘;\n3. 检查训练数据——抽 100 条样本人工核验,常见问题包括标注错误(占 60%)、格式不统一(占 25%)、敏感内容泄漏(占 10%);\n4. 检查超参——learning rate 是否过大、epoch 是否过多(>10 几乎必过拟合)、是否漏配 warmup/early stopping;\n5. 检查 LoRA 配置——r 太小欠拟合、alpha/r 比例失衡(一般 2:1)、dropout 是否过高(>0.1 易欠拟合)。\n\n应急方案:\n- 立即回滚到上一个稳定版本 LoRA 补丁(这就是为什么必须保留全版本 checkpoint);\n- 紧急切流量到大模型兜底(这就是为什么微调前要有 fallback 链路);\n- 24 小时内定位是数据问题还是超参问题,给出修复时间表。\n\n加分:线上问题 80% 来自训练数据漂移(用户 prompt 分布变了,但训练数据是 3 个月前的),所以微调后必须持续监控线上 prompt 分布与训练集的 KL 散度,超过 0.3 就要重启一轮。",
"difficulty": "hard",
"category": "踩坑"
}
]
面试如何回答
🟢 什么是 SFT?和预训练的核心区别是什么?
回答要点:
SFT(Supervised Fine-Tuning,监督微调)是在预训练好的大模型上,用人工标注的"指令-答案"对继续训练,让模型权重朝特定任务方向偏移。
核心区别有三点:
- 数据形态——预训练吃万亿级未标注网页,SFT 吃 1 千到 100 万条标注样本;
- 训练目标——两者数学上都是"下一 token 预测"+ 交叉熵损失,但 SFT 每条样本都是"含金量极高"的示范;
- 成本量级——预训练需要千卡级 GPU 跑数月,SFT 单卡 A100 几天就能完成 7B 模型的 LoRA 微调。
典型场景:用 500 条 JSON 格式工单样本做 SFT,模型格式准确率能从 70% 提到 99%。金句:SFT 是把基座模型"听懂指令"的那一步,也是产品团队最常用的定制手段。
加分:SFT 通常是模型厂商两阶段范式(预训练 + SFT)中的第二步,再往后还有 RLHF/DPO 做偏好对齐。
🟢 LoRA 的核心思想是什么?为什么能用这么少参数逼近全参微调?
回答要点:
LoRA(Low-Rank Adaptation)的核心思想是:冻结预训练模型全部权重,在旁边并行训练一个低秩矩阵增量 ΔW = A×B,其中 A 是 r×d 维、B 是 d×r 维,r(秩)一般取 8/16/32,远小于 d(隐藏维度)。
为什么有效有三个原因:
- 内在低秩假设——模型在适配新任务时,权重更新矩阵的"有效秩"很低,用低秩近似就够了;
- 训练成本骤降——7B 模型可训练参数从 70 亿降到 800 万 - 2000 万,显存从 60-80 GB 降到 16-24 GB;
- 推理零成本——部署前把 ΔW 合并回原权重,推理速度与原模型完全一致。
对比 QLoRA 还能把基座量化到 4-bit,让 65B 模型在单卡 48GB 上微调。在中等复杂度任务上 LoRA 与全参差距 <2%,但存储只需 20-50 MB 一个任务,同一底座可配上百个 LoRA 补丁。
加分:LoRA 权重初始化有讲究——A 用高斯初始化、B 用全零初始化,保证训练起点 ΔW=0,不影响原模型表现。
🟡 微调到底需要多少数据?怎么估算?
回答要点:
数据量没有银弹,但有经验规律可循:
- 格式类任务(如固定 JSON 输出)—— 200-500 条高质量样本就够;
- 口径/术语类(如医疗话术合规)—— 1000-5000 条;
- 复杂推理/工具调用类—— 1 万 - 10 万条起步。
估算方法分三步:
- 先用大模型跑通任务,过程中天然积累 500-2000 条种子数据;
- 按 8:1:1 切成训练/验证/测试集,先训一版看 loss 曲线;
- 如果验证集指标还没收敛,每轮迭代补 20%-30% 数据,直到过拟合或指标达标。
关键:数据质量远比数量重要。1000 条专家精标的样本通常胜过 10 万条噪声样本,80aj 那篇经典教程里把"清洗标注"列为仅次于"数据准备"的第二大成本项,占总投入 25%。
加分:低于 200 条样本建议直接走 Few-shot 或 prompt,别硬上微调——数据量过少时 LoRA 容易欠拟合,全参微调容易过拟合。
🟡 SFT 数据格式有哪些?Alpaca 和 ShareGPT 怎么选?
回答要点:
SFT 数据格式按任务复杂度分四类:
单轮指令类——Alpaca 格式
{"instruction":"翻译成英文","input":"你好","output":"Hello"},三字段(instruction 必选、input 可选、output 必选),适合翻译、摘要、QA;代表数据集 MetaMathQA。单轮 QA 类——
{"question":"…","answer":"…"},可加 context 字段加背景,纯问答场景。多轮对话类——ShareGPT 格式核心是
conversations数组,严格 user/assistant 角色交替;扩展形态包括层次化对话(带 speaker/timestamp/actions)、角色扮演(带 system 角色设定)。增强训练类——CoT 思维链格式,把 reasoning_steps 显式建模,提升数学/代码能力。
选择策略:单任务、单轮 → Alpaca;多轮对话、客服、助手 → ShareGPT;需要可解释推理 → CoT;法律/医疗等专业场景 → 自定义结构化 schema(如 {"case_id","legal_issue","facts","judgment"})。
加分:专业场景务必保留特殊符号(代码缩进、制表符),json 用 jq 处理,HuggingFace load_dataset 一行代码就能转 Arrow 格式喂给训练框架。
🟡 微调会让模型忘掉原来的能力吗?怎么避免灾难性遗忘?
回答要点:
会,而且非常常见。典型表现:垂直领域 SFT 5 个 epoch 后,特定任务准确率涨 5%,但通用问答、数学推理等基础能力掉 15%-30%,业内称为"灾难性遗忘"(Catastrophic Forgetting)。
避免方法有四招:
- 小学习率——SFT 学习率压到 1e-5 ~ 5e-5,比预训练(1e-4 ~ 1e-3)低 1-2 个数量级;
- 数据回灌——训练数据里混入 10%-30% 通用指令数据(Alpaca 数据集、OpenOrca 等),让模型在垂直和通用能力之间平衡;
- Early Stopping——按验证集 loss 提前停止,不要死磕训练 loss;
- Golden Set 回归测试——每次训完跑一遍通用能力基准(mmlu、ceval、gsm8k),任何一项掉超过 5% 必须回滚。
进阶手段:LoRA 本身就比全参微调抗遗忘,因为原权重被冻结,理论上不可能"改坏"原模型,只会学到补丁;EWC(Elastic Weight Consolidation)算法给重要参数加约束,但工程上很少用。
加分:DPO 和 RLHF 阶段也会引入遗忘,所以工业界通常按"SFT → DPO/RLHF"两阶段串行做,每阶段都跑 Golden Set。
🟡 什么场景该微调、什么场景不该微调?怎么给老板提建议?
回答要点:
判断要不要微调的核心句式:"你想改的是模型知道什么,还是模型本身是什么样?"——前者用 prompt/RAG,后者才考虑微调。
该微调的三类场景:
- 输出格式高度固化(如严格 JSON、固定版式报告),几百条样本训下去格式稳定性远超 prompt 反复叮嘱;
- 领域黑话与口径(如医疗术语、法务话术、客服禁用词),规则多到塞不进 prompt;
- 小模型降本(用 Qwen 0.6B 微调替代 GPT-4o 跑分类任务,单次成本能从 0.03 元降到 0.0002 元)。
不该微调的三类场景:
- 想灌新知识——私域文档进 RAG,别进 SFT 数据集;
- 想调行为——先把 prompt 改三版、Few-shot 试五例;
- 需求还在变——微调周期长、迭代慢,等需求稳定 2 个月再启动。
给老板的建议模板:"我建议先走 prompt 工程 1 周 + RAG 2 周,效果达标就不动模型;不达标再启动 SFT,整体周期 4-6 周,预估成本 X 万元,其中数据准备占 60%。"
加分:决策顺序铁律——prompt → Few-shot → RAG → 工具调用 → 微调,跳级直达几乎必翻车,因为前几站都没走通的需求,微调也救不了。
🔴 全参微调、LoRA、P-tuning v2、冻结微调怎么选?
回答要点:
四种方法按"可训练参数占比"和"任务复杂度"形成清晰分层:
全参微调——调所有权重(约 70 亿参数 for 7B 模型),效果上限最高,但需要 8 卡 A100 + 1-2 天,存储每任务一份 14 GB checkpoint;只适合大厂研究团队和数据量 >10 万条的复杂任务。
LoRA——冻结原权重,只训 r×d + d×r 增量(约 800 万 - 2000 万参数),效果逼近全参(差距 <2%),单卡 A100 几小时搞定,存储每任务 20-50 MB;适合绝大多数业务场景,是业界默认选项。
QLoRA——基座量化到 4-bit + LoRA,65B 模型都能在单卡 48GB 上微调;适合消费级硬件和极限显存场景。
P-tuning v2——基于提示词的微调,只调部分 prefix 参数(约 100 万 - 500 万),训练成本最低但适用场景窄,多用于分类、NER、抽取等结构化轻任务。
冻结微调——冻结主体权重,仅训练任务头(分类器、生成头等),最大限度保留预训练知识,但要精心设计任务特定组件。
选择策略:预算紧 + 任务中等 → LoRA;硬件受限(<24GB 显存)→ QLoRA;任务极简单(分类/抽取)→ P-tuning v2;数据极少(<500 条)→ 冻结微调;效果天花板压不住 → 全参。
加分:LoRA 配合 rank=64 + alpha=128 + 目标模块扩到 q/k/v/o + MLP,可以逼近全参 95% 效果,这是开源社区跑出来的实战经验值。
🔴 线上模型效果下降,怎么判断是不是微调引入的问题?怎么排查?
回答要点:
线上效果下降的排查要按"数据 → 模型 → 推理"三段定位,微调相关问题集中在前两段。
排查步骤:
- 复现问题——用线上 prompt 在微调前的基座模型上跑同一批 case,如果基座正常、微调后异常,说明问题在微调环节;
- 检查 Golden Set——跑 mmlu、ceval、gsm8k 等通用基准,任何一项比微调前掉 >5% 基本可以判定灾难性遗忘;
- 检查训练数据——抽 100 条样本人工核验,常见问题包括标注错误(占 60%)、格式不统一(占 25%)、敏感内容泄漏(占 10%);
- 检查超参——learning rate 是否过大、epoch 是否过多(>10 几乎必过拟合)、是否漏配 warmup/early stopping;
- 检查 LoRA 配置——r 太小欠拟合、alpha/r 比例失衡(一般 2:1)、dropout 是否过高(>0.1 易欠拟合)。
应急方案:
- 立即回滚到上一个稳定版本 LoRA 补丁(这就是为什么必须保留全版本 checkpoint);
- 紧急切流量到大模型兜底(这就是为什么微调前要有 fallback 链路);
- 24 小时内定位是数据问题还是超参问题,给出修复时间表。
加分:线上问题 80% 来自训练数据漂移(用户 prompt 分布变了,但训练数据是 3 个月前的),所以微调后必须持续监控线上 prompt 分布与训练集的 KL 散度,超过 0.3 就要重启一轮。
