第 01 课 · 教它说话

后训练概述与 SFT

博学但不听话。 用「问题 → 标准回答」教它按格式开口。

Archify · workflow

第一次训练:Qwen3-1.7B QLoRA

从确认 GPU 到保存 adapter,中间不要换模型。

  1. GPU 绿灯
  2. 4-bit 加载
  3. 挂 LoRA
  4. 洗成 messages
  5. SFTTrainer
  6. 保存 adapter

加载

拟合

留档

上机准备

GPU 绿灯

记下显存 GB

4-bit 加载

NF4 + 双重量化

Qwen3-1.7B-Base

挂 LoRA

r=32 α=64

约 2% 参数

TRL 训练

洗成 messages

alpaca_gpt4_zh

SFTTrainer

lr 2e-4 · 1 epoch

有效 batch 16

产出

训前三问

先记下胡话

保存 adapter

./qwen3-1.7b-sft/final

  • 挂 LoRA → 先生成
  • 洗成 messages → 只留 messages

这次实验的固定配方

  • 模型 Qwen3-1.7B-Base,数据 llamafactory/alpaca_gpt4_zh
  • QLoRA r=32 α=64,学习率 2e-4,1 个 epoch,A100-40G 约 45 分钟

100 步检查点

  • 损失明显下降:继续训完
  • 损失不动:先查 ChatML / messages 列,不要先改算法

为什么需要后训练

先记住一张比例

大约 5% 的算力,决定 100% 的可用性

在万亿 上预测下一个字,产出一个「什么都读过、却不会按你的吩咐说话」的。只占大约 5% 算力(DeepSeek-R1 量级),却把模型变成助手:会遵循指令、会选更好的回复、会一步步想。

三阶段,像人的成长

预训练

博学

读遍互联网。Qwen3 大约 36 万亿 、119 种语言。它知道量子计算是什么,但你问一句,它可能接着把网页抄下去。

后训练

懂事

教说话, 教选择, 教思考。产出 模型。只有这一步之后,才有 /think 与 /no_think。

推理部署

能用

、、思维链、best-of-N。把已经对齐的模型送到用户面前,并在需要时多花一点测试时计算。

Qwen3 的四步工业流程

它不是课件,是真模型的做法

  1. 1

    长思维链冷启动 SFT

    用带 <think> 的逐步推理数据先「灌格式」。模型先知道思考长什么样。

  2. 2

    推理 RL(GRPO)

    在数学、代码等能判对错的任务上强化。更深的推理链、自检和回溯在这里。

  3. 3

    思考模式融合

    把「会深想」的专家回同一个模型,使 /think 与 /no_think 共存。

  4. 4

    通用 RL

    用偏好和规则奖励做最后一遍:指令、安全、多语言一起拉齐。

亲手切换思考模式

同一道方程,/think 会先在心里演草,/no_think 直接给答案。没有这个开关——这就是的脚印。

内部草稿 <think>

3x + 7 = 22 → 两边减 7 得 3x = 15 → 两边除以 3 得 x = 5。验证:3×5+7=22。

x = 5

适合数学、代码、逻辑。慢一点,错得少一点。

SFT:只学「如何回答」

最常见的坑

格式错了,训练不会报错,模型却会变怪

Qwen3 用 :<|im_start|>role … <|im_end|>。永远调用 tokenizer.(),不要手拼字符串。不同模型的特殊 不同。

掩码交叉熵

FORMULA

L_SFT = − Σ_{t ∈ A} log P_θ(x_t | x_<t)

只在助手回复的位置 A 上算损失。system 和 user 的字设 =0,因为推理时它们是给定的。

哪些字真正被学习?

点一下,看哪些 会回传梯度。直觉:不要让模型把「用户问了什么」也当成自己要生成的内容。

绿色回传梯度,灰色被掩码。开关一下,体会「只学回答」。

<|im_start|>systemYou are helpful.<|im_end|><|im_start|>user什么是量子计算?<|im_end|><|im_start|>assistant量子计算用量子比特做信息处理。<|im_end|>

system / user 的字 mask=0。模型不必学会「如何提出这个问题」。

LoRA:不搬动整座冰山

参数高效微调

原权重冻结,只学两个小矩阵

大矩阵 W 保持不动,额外学 ΔW ≈ (α/r)·B A。r 是秩,越小越省、表达力越弱。 = 把原模型压成 ,再加 ,于是 7B 级也能在 16GB 卡上微调。

拧一拧秩 r

课程建议 r 从 16~64 试,起步 32;α = 2r;目标模块尽量覆盖全部线性层。数据少时 dropout 0.05~0.1。

LoRA 秩 r

32

约可训练参数

25.7M

相对 1.7B 约 1.51%

α 建议 = 2×r = 64,更新幅度约 ×2。

目标:q/k/v/o 与 gate/up/down,覆盖全部线性层更好。

r 太小欠拟合,太大接近全参,也更容易过拟合。

课程推荐的机器档位

档位GPU模型方法
最低1× T4 16GBQwen3-0.6B / 1.7B 4-bit
标准1× -40GQwen3-1.7B / 4B 16-bit
进阶1× -80GQwen3-8B 16-bit
高级2× -80G8B / 30B-A3B/ +

学期租卡大约百元量级。先把 1.7B 的闭环跑通,再考虑放大。

还没评估,就不算训完

四把尺子,各管一截

裁判

LLM-as-Judge

用更强模型给开放回复打分(如 )。快,但不完美,要抽查。

对错

能力基准

、、:能自动判分的题,用来盯死核心能力。

口味

人类偏好

并排 A/B,人点更好的那个。贵,但是最终对齐的北极星。

底线

安全评估

有害请求拒绝率。变聪明的同时不能变危险。

第 1 课可以带走的五句话

  1. 01给知识,给用法。
  2. 02 只学助手怎么说,不学用户问了什么。
  3. 03永远用官方聊天模板,不要手拼。
  4. 04 动小矩阵;显存紧就上 。
  5. 05loss 下降不等于变好,先看 10 条对照生成。

本课两道小题

第 1 课

后训练大约只占预训练算力的 5%,为什么还说它决定了模型能不能用?

想想基座模型会什么、不会什么。

第 1 课

SFT 为什么只在 assistant 的 token 上算损失?

推理时用户的问题是给定的。