预训练与微调

返回大模型

预训练(Pre-training):在海量(多为无标注)文本上学习 下一 token 预测,得到 Base 模型——具备语法、常识与部分世界知识,但未必会「听人话」。

微调(Fine-tuning):用较小、任务相关的数据调整权重,使模型 跟从指令、掌握 领域术语与格式,并可经 偏好对齐 变得更像安全、有用的助手。

架构背景见 Transformer 与注意力LLM 基础;训练完成后见 推理与部署量化与压缩


全链路一览

                    ┌─────────────────────────────────────┐
                    │  预训练 PT(Causal LM,海量语料)     │
                    └─────────────────┬───────────────────┘

                              Base 模型(续写型)
                    ┌─────────────────┴───────────────────┐
                    │  可选:继续预训练 CPT(领域语料)      │
                    └─────────────────┬───────────────────┘

                    ┌─────────────────────────────────────┐
                    │  指令微调 SFT(instruction–response  │
                    └─────────────────┬───────────────────┘

                         Instruct / Chat 雏形
                    ┌─────────────────┴───────────────────┐
                    │  偏好对齐:RLHF / DPO / ORPO / KTO…  │
                    └─────────────────┬───────────────────┘

                         Chat / 助手型(生产常用)
                    ┌─────────────────┴───────────────────┐
                    │  可选:DPO 后再 SFT、工具调用专项 S   │
                    └─────────────────────────────────────┘
阶段典型数据学到什么常见产物名
PT网页、书籍、代码、多语混料语言建模、知识、代码能力*-Base
CPT法律/医疗/企业内部文档领域词汇与行文习惯领域 Base
SFT高质量指令–回答、多轮对话指令遵循、格式、工具调用模板*-Instruct / *-Chat
对齐人类排序、chosen/rejected 对有用性、安全性、风格*-Chat(对齐版)

预训练(Pre-training)

训练目标

主流 因果语言模型(Causal LM):给定前文,预测下一个 token,损失为交叉熵。

输入:  "今天天气"
目标:  逐位置预测 ["天", "气", "很", "好", ...]

部分模型在预训练阶段加入 填空(MLM)多任务混合多模态对齐,但开源 LLM 仍以 自回归 PT 为主。

数据与清洗

环节要点
来源Common Crawl、书籍、GitHub、论文、对话片段(需合规)
去重MinHash / 精确去重,降低记忆与抄袭风险
过滤低质、有毒、PII、乱码页;语言识别与配比
配比代码 / 多语 / 数学 等按目标能力调配

预训练 不教「以助手身份回答」——直接拿 Base 做问答往往 续写提示 而非 直接给答案

规模与成本(直觉)

规模参数量训练资源(量级)
小实验1B–3B单卡–数卡,数日
开源主力7B–14B多卡集群,数周
旗舰70B+大规模集群 + 专家并行

Scaling Law:算力、数据量、参数量共同决定 loss;实际项目多在 已有 Base 上做 SFT/LoRA,而非从零 PT。

继续预训练(CPT / Domain-adaptive PT)

在通用 Base 上 再用领域语料做 PT(仍用 LM 损失):

  • 适用:法律、金融、医疗等 术语密集 且公开 SFT 数据少的领域。
  • 风险:配比不当会 削弱通用能力(灾难性遗忘);领域语料需去重、控毒。
  • 与 SFT 关系:CPT 补「知识密度」,SFT 补「交互格式」;很多团队 CPT + SFT 串联。

监督微调(SFT)

SFT 把 (指令, 理想回答) 监督给模型,损失仍多为 只在回答段计算 token 的交叉熵(提示段 mask 掉),避免模型学习「重复用户问题」。

数据格式

Alpaca 单轮(字段名因工具而异):

{
  "instruction": "用一句话解释梯度下降",
  "input": "",
  "output": "梯度下降通过沿损失函数负梯度方向迭代更新参数……"
}

ShareGPT 多轮

{
  "conversations": [
    { "from": "human", "value": "你好" },
    { "from": "gpt", "value": "你好,有什么可以帮你?" }
  ]
}
格式优点注意
Alpaca简单、适合单任务多轮需自行拼接模板
ShareGPT贴近真实对话角色名、from 字段要与 template 一致
工具调用 JSON适合 Agent与推理时 同一套 schema

Chat 模板(template)

同一基座在不同框架下须使用 一致的 chat template(特殊 token、角色标记):

<|im_start|>user
问题
<|im_start|>assistant
回答

训练与推理模板不一致 是线上「变笨」的常见原因。换模型时查官方 tokenizer.chat_template

数据质量原则

  1. 质量 > 数量:几百条高精往往胜过几万条模板废话。
  2. 多样性:覆盖拒答、追问、空输入、多轮指代。
  3. 避免泄露:评测集勿进训练集;近重复样本会 抬高评测虚高
  4. 标注一致:同一任务一种口径(如日期格式、是否给代码)。
  5. 负样本:可加入「应拒绝」样本,减少胡编与违规服从。

数据混合

通用指令数据  ──┐
领域业务数据  ──┼──► 混合比例(如 7:3)──► 打乱 ──► SFT
工具调用样本  ──┘
现象可能原因调整
领域词不会说了通用比例过低提高通用数据占比
格式乱、不爱跟指令领域脏数据过多清洗 + 减 epoch
只会背训练集过拟合小集减 epoch、增通用、加 dropout

SFT 超参(起点参考)

参数LoRA / QLoRA全参 SFT(7B 级)
学习率1e-4 ~ 2e-45e-6 ~ 2e-5
epoch1–31–2
batch受显存限制,用梯度累积凑有效 batch有效 batch 32–128(token 计)
warmup3%–10% steps同左
max length按任务设,过长浪费显存同左
weight decay0–0.10.01 常见

有效 batch = per_device_batch × 梯度累积步数 × GPU 数

epoch 过大 + 小数据集 → 过拟合(验证 loss 回升、开放题复读训练答案)。


参数高效微调(PEFT)

全参微调成本高;生产与实验大量采用 PEFT,详见 量化与压缩 · LoRA

方法思路显存典型用途
LoRA冻结基座,训练低秩增量 领域 SFT、多任务适配器
QLoRA4bit 量化基座 + LoRA 训练更低单卡 24GB 训 7B/13B
Adapter插入小模块多任务切换
全参 SFT更新全部权重很高数据多、追求上限

LoRA 常用超参

参数含义常见取值
r秩,越大表达能力越强8、16、32、64
lora_alpha缩放,常设 alpha = 2rr 配对
target_modules注入层q_proj,v_proj 或全部线性层
lora_dropout防过拟合0 ~ 0.05

训练后 合并权重(merge adapter)可得到单一 checkpoint,便于部分推理引擎加载;也可 推理时挂载 LoRA 做多适配器切换。


偏好对齐(简述)

SFT 只示范「怎么说」;对齐 用偏好数据收窄「更好 / 更差」的回答。安全与红队见 对齐与安全

方法核心思想工程复杂度备注
RLHF训练奖励模型 RM,再用 PPO 等强化学习优化策略工业界沿用久,调参难
DPO直接用偏好对优化,等价于特定奖励下的策略梯度无需在线采样 RM
ORPO将 SFT 与偏好合并一类目标中–低少阶段、适合资源紧
KTO只需 good/bad 标签,不必成对数据标注更灵活

偏好数据形态(概念):

{
  "prompt": "用户问题",
  "chosen": "更优回答",
  "rejected": "较差回答"
}

对齐通常在 SFT 之后;跳过 SFT 直接 DPO 往往 跟指令能力不稳


训练工程要点

显存估算(直觉)

7B 级 BF16 全参 权重约 14GB+,再加优化器状态、梯度、激活 → 常需 多卡 + ZeRO / FSDP

QLoRA 可在单卡 24GB 训练 7B,是团队默认起点。

分布式与加速

技术作用
DeepSpeed ZeRO切分优化器/梯度/参数,降显存
FSDPPyTorch 原生分片
Flash Attention 2降注意力显存、提速
Gradient checkpointing用算力换激活显存

多卡严肃训练与 YAML 配置见 开源微调框架 · Axolotl

监控指标

指标说明
train / eval loss持续下降后 eval 回升 → 过拟合
grad norm突刺或 NaN → 学习率过大
token/sec吞吐与配置是否匹配
样本抽检比 loss 更可信

实验记录用 实验管理(MLflow / WandB 等)。


评测与验收

微调不能只看 training loss。

层级做法
自动留出验证集 perplexity;选择题 / 抽取式 QA
生成质量BLEU/ROUGE 仅作参考;LLM-as-judge 需固定 rubric
业务黄金集 + 人工抽检;回归 [[AI/工程实践/Harness
安全越狱、偏见、拒答率;见 [[对齐与安全

发布前对比:基座 / SFT 前 / SFT 后 / 对齐后 同一套 prompt。


何时微调、何时不微调

需求更合适的手段
私域文档问答、时效信息[[RAG
固定输出格式、语气、流程SFT
减少幻觉、引用来源RAG + Prompt;微调难单独解决
新工具 API、函数名SFT 工具样本 + Agent 框架
降本提速[[量化与压缩
知识在文档里、变得快     → RAG
行为/格式/领域说法要固定   → SFT / LoRA
「哪个答案更好」          → DPO / RLHF

常见问题

灾难性遗忘

微调后 通用能力掉点:领域数据占比过高、学习率过大、epoch 过多。

缓解:混合通用数据、降低 LR、早停、LoRA 只训增量、CPT 控制配比。

训练–推理不一致

  • template / 特殊 token 不同
  • 训练用 input+output,推理漏拼 system prompt
  • 量化方式与训练末不一致(见 量化与压缩

幻觉与复读

SFT 无法根除幻觉;复读常因 重复样本过小数据集过拟合。加多样性、拒答样本、适当 frequency_penalty(推理侧)。

数据污染

评测 prompt 或业务真题进入训练 → 指标虚高。严格 train/val/test去重(MinHash 对 prompt)。


开源微调工具链

单机或小团队落地时,工具选型详见 LLaMA-Factory、Axolotl、Unsloth

工具一句话
LLaMA-Factory功能全、Web UI、SFT/DPO/PPO 等一条龙
AxolotlYAML 配置、多卡 DeepSpeed/FSDP,偏严肃训练
Unsloth单卡 LoRA 更快更省显存,易导出 GGUF
# LLaMA-Factory 示例(路径以官方 repo 为准)
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml

与 RAG / 工具调用

微调 教行为与格式不代替 时效与私域全文——生产常见组合:

用户提问 → RAG 检索片段 → 拼进 context → Instruct 模型生成

         工具调用(搜索、DB)── 可选,需 SFT 或强模型原生能力

Agent 与 MCP 见 AI Agent 系列。


相关文档