小模型训练微调探索

概述

小模型(Small Language Models, SLMs)指参数规模在 0.5B~14B 之间的语言模型,适合在消费级 GPU 或有限数据中心 GPU(如 2× V100 16GB)上进行微调。本笔记记录微调技术路线、工具链、模型选型和算力方案。

核心认知:小模型的获取有 四大范式——① PEFT 微调(在预训练模型上低成本适配)、② 知识蒸馏(从大模型学出小模型)、③ 从零训练(完全自己训一个小 LLM)、④ Master Prompt 微调(公开微调方法颠覆企业垂直训练)。


一、模型选型(2025-2026 SLM 生态)

模型参数架构特点V100 16GB 单卡V100 16GB 双卡+NVLink
Qwen3-4B 4B 标准 Dense,32K ctx,GQA ✅ QLoRA 轻松 ✅ LoRA 也可
Qwen3-8B 8B 标准 Dense,32K ctx,GQA ⚠️ QLoRA 刚够 ✅ LoRA / QLoRA
Qwen3.6-14B-A2B 14B(Active 2B) MoE,单 token 仅激活 2B 参数 ⚠️ QLoRA 可跑 ✅ 性价比最高
LLaMA 3.2-3B 3B 标准 Dense,8K ctx,GQA ✅ QLoRA 轻松 ✅ LoRA 轻松
LLaMA 3.2-11B 11B(Vision) 多模态 Dense ❌ 16GB 不够 ⚠️ QLoRA 勉强
Phi-4-14B 14B 标准 Dense,高质量数据训练 ❌ 放不下 ⚠️ QLoRA 刚够
Gemma 2-2B 2B 标准 Dense,8K ctx ✅ 随便跑 ✅ 随便跑
Gemma 2-9B 9B 标准 Dense,8K ctx ⚠️ QLoRA ✅ LoRA 可能
SmolLM2-1.7B 1.7B 极小型,适合嵌入/分类 ✅ 全量微调可能 ✅ 全量微调

二、四大训练范式总览

范式原理需要基座模型需要 GPU典型耗时适用场景
PEFT 微调
(LoRA/QLoRA)
在已有预训练模型上插入少量可训练参数 ✅ 必须 低(1×V100 够) 小时级 任务适配、领域微调、指令对齐
知识蒸馏
(Distillation)
小模型学习大模型的输出分布/logits ✅ 教师模型 中(1~2×V100) 小时~天级 模型压缩、部署轻量化、隐私场景
从零训练
(MiniMind 路线)
完全从随机权重开始预训练 ❌ 不需要 低(1×消费级) 2~24h 教育学习、特殊词表、极致领域定制
Master Prompt 微调
(CJ Zafir 路线)
公开的 prompt 架构 + 针对性 LoRA 微调,垂直碾压通用大模型 可选 低(Mac/消费级) 小时级 企业垂直领域替代昂贵通用 API、降本 70%

三、参数高效微调(PEFT)技术全景

3.1 LoRA(Low-Rank Adaptation)

  • 论文:Hu et al. 2021, arxiv 2106.09685
  • 原理:在冻结的预训练权重旁插入低秩分解矩阵(A×B),仅训练这些适配器
  • r(秩):典型值 8~64,控制参数量与表现力的 trade-off
  • α(缩放因子):通常为 r 的 1~2 倍,如 r=16, α=32
  • 内存影响:仅需存储优化器状态(Adam 的 2× 参数)——冻结权重无 optimizer state
  • 优势:推理零开销(可合并回原权重),无推理延迟增加

3.2 QLoRA(Quantized LoRA)

  • 论文:Dettmers et al. 2023, arxiv 2305.14314
  • 核心:将基座模型量化为 4-bit NF4(NormalFloat4)+ 双重量化减少存储,基座精度≈4bit(内存降低~4x),LoRA 适配器保持 16/32bit 精度
  • 关键技术:NF4 数据类型(信息论最优的 4-bit 归一化浮点),Paged Optimizers(GPU OOM 时将 optimizer state 分页到 CPU),双重量化(量化常数也量化)
  • 内存对比(7B 模型):全量 16bit → ~16GB,LoRA 16bit → ~16GB(仍需加载全模型),QLoRA 4bit → ~5GB
  • 性能:QLoRA 微调 65B 模型仅需 1× 48GB GPU,效果接近 16bit 全量微调

3.3 DoRA(Weight-Decomposed Low-Rank Adaptation)

  • 论文:Liu et al. 2024, arxiv 2402.09353
  • 创新:将预训练权重分解为 幅度(magnitude)方向(direction),分别微调
  • 效果:在 LLaMA/LM 微调上持续优于 LoRA,更接近全量微调的学习能力
  • 额外开销:训练时额外存储幅度向量,推理时仍可合并,无额外推理开销
  • 兼容性:可与 QLoRA 结合(QDoRA)

3.4 LoftQ(LoRA-Fine-Tuning-Aware Quantization)

  • 论文:Li et al. 2023, arxiv 2310.08659
  • 改进:交替量化+低秩分解,初始化 LoRA 适配器时补偿量化误差
  • vs QLoRA:QLoRA 使用 NF4 量化的 base + 随机初始化的 LoRA;LoftQ 在初始化阶段做量化感知的 LoRA 权重初始化
  • 效果:在低比特(2~4bit)场景下优于 QLoRA 的初始质量

3.5 Chain of LoRA(COLA)

  • 论文:Xia et al. 2024, arxiv 2401.04151
  • 思路:将 LoRA 适配器串联为链式结构,每个 LoRA 模块逐步精炼残差
  • 效果:在低数据场景下效果更好,类似 Boosting 思想

3.6 LISA(Layerwise Importance Sampling)

  • 论文:Pan et al. 2024, arxiv 2403.17919
  • 创新:不训练 LoRA 而是随机选择少量层进行全参数更新,其余层冻结
  • 内存:接近 LoRA 的内存消耗(冻结层无 optimizer state),但能学到全参数微调的表示
  • 适用场景:想获得全参数微调质量但 GPU 受限

3.7 技术对比

方法训练参数占比7B 训练内存推理开销性能(vs 全量)
Full Fine-tuning100%~60GB基准
LoRA (r=16)~0.2%~16GB无(可合并)~95%
QLoRA (4-bit + LoRA)~0.2%~6GB无(可合并)~99%
DoRA~0.2%~17GB无(可合并)~97%
LoftQ~0.2%~6GB无(可合并)~98%(低比特更优)
LISA~10%~20GB~99%

四、微调工具链

4.1 Hugging Face TRL(Transformer Reinforcement Learning)

  • SFTTrainer:最主流的监督微调入口,原生支持 LoRA/QLoRA
  • DPOTrainer / CPOTrainer / GRPOTrainer:偏好对齐训练
  • DataCollator 支持:自动 padding + packing,DataCollatorForCompletionOnlyLM 支持仅计算回答部分 loss
from trl import SFTTrainer
from peft import LoraConfig

lora_config = LoraConfig(
    r=16, lora_alpha=32,
    target_modules="all-linear",
    lora_dropout=0.05, bias="none",
    task_type="CAUSAL_LM",
)
trainer = SFTTrainer(
    model=model, train_dataset=dataset,
    args=transformers.TrainingArguments(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        learning_rate=2e-4,
        fp16=True, logging_steps=10,
        num_train_epochs=3,
    ),
    peft_config=lora_config,
    dataset_text_field="text",
    max_seq_length=2048,
)
trainer.train()

4.2 Axolotl

  • 定位:YAML 驱动的训练框架,封装 TRL + PEFT + Accelerate + DeepSpeed
  • 优势:零代码微调,只需 YAML 配置文件
  • 支持:LoRA/QLoRA/DoRA/FPFT、DPO/KTO/ORPO/GRPO、多模态、FSDP/DeepSpeed

4.3 Unsloth

  • 定位:2x 更快、显存减半的 LoRA/QLoRA 方案
  • 关键优化:手动编写 Triton 内核替代 Hugging Face 的部分前向/反向计算
  • 适用:资源受限时的首选,特别适合 V100 这种显存较小的 GPU

4.4 工具选型建议

场景推荐工具理由
快速实验 / 原型验证Unsloth配置最少,启动最快,显存最优
批量多轮实验AxolotlYAML 可复现,实验管理方便
偏好对齐(DPO/GRPO)TRL + Unsloth 或 AxolotlTRL 原生支持,Unsloth 加速
生产级多 GPU 训练Axolotl + DeepSpeed分布式支持完善
全量微调Axolotl + FSDPFSDP 分片策略成熟

五、算力方案:本地硬件与商业算力

小模型训练的算力来源分两个方向:本地硬件部署(自购 GPU 服务器)和 商业算力(云 GPU 租赁/API)。以下以 V100 16GB×2 为本地硬件基准,同时给出商业算力选项供已有预算方案时参考。

5.1 本地硬件:V100 16GB × 2 规格

  • GPU:2× Tesla V100 16GB(NVLink 互联)
  • 显存:合计 32GB(NVLink 共享,但每卡独立 16GB 物理显存)
  • CUDA 计算能力:7.0 — 不支持 Flash Attention 2(需 ≥7.5 sm_75),不支持 TF32(需 ≥7.5 sm_75)
  • 支持:FP16 混合精度(半精度 Tensor Core),int8/FP32 计算

5.2 V100 关键限制

  • 不支持 Flash Attention 2(需要 Ampere 及以上架构,sm≥80)
  • bitsandbytes 4-bit 的某些硬件优化路径受限(但 4-bit 加载仍可工作)
  • 必须使用 fp16=True(不能 bf16,V100 原生不支持 bfloat16)

5.3 商业算力选项

平台可选 GPU价格参考特点
AutoDLRTX 3090 / 4090 / A100 / H1003090 ≈ 1.3¥/h国内最流行、按小时租、社区镜像多
恒源云 / 趋动云RTX 3090 / A100 80G 等≈ 1~5¥/h社区镜像丰富
Lambda Labs / Vast.aiA100 / H100 / RTX 4090$0.5~2/h海外按秒计费
RunPod / ModalA100 80G / H100 / L40S$0.5~2/hserverless 模式,快速上手

商业算力建议:

  • 租赁 RTX 3090 24GB(≈ 1.3¥/h)可运行 8B QLoRA,比 V100 多 8GB 显存,性价比最高
  • 租赁 A100 80G(≈ 8~10¥/h)可运行 14B LoRA 甚至全量微调
  • AutoDL 等平台自带 PyTorch 镜像,无需自己配环境

5.4 显存预算表(单卡 16GB)

模型大小方法base 加载梯度/优化器激活(bs=1, len=2048)总计双卡可用(32GB)
4BQLoRA 4-bit~2.5GB~1GB~2GB~5.5GB✅ 富裕
4BLoRA 16-bit~8GB~1GB~3GB~12GB✅ 可
8BQLoRA 4-bit~5GB~1.2GB~3GB~9.2GB✅ 可
8BLoRA 16-bit~16GB~1.2GB~5GB~22GB⚠️ 超单卡
14BQLoRA 4-bit~8GB~1.5GB~4GB~13.5GB⚠️ 单卡紧张
14B (MoE)QLoRA 4-bit~8GB~1.5GB~2GB~11.5GB✅ 可

5.5 单卡 vs 双卡策略

策略优点缺点
单卡 QLoRA配置简单,无需分布式batch size 受限(通常 1~2)
双卡 DDPbatch size 翻倍,训练更快V100 不支持 NCCL P2P,需 NCCL_P2P_DISABLE=1
双卡 DeepSpeed Zero-2优化器状态分片,可放大模型V100 不支持 Zero-3,Zero-2 可用

六、数据准备

6.1 数据集格式

对话格式(推荐):

{"messages": [
  {"role": "system", "content": "你是一个有用的助手。"},
  {"role": "user", "content": "什么是梯度下降?"},
  {"role": "assistant", "content": "梯度下降是一种优化算法..."}
]}

ShareGPT 格式(Axolotl 原生):

{"conversations": [
  {"from": "human", "value": "什么是梯度下降?"},
  {"from": "gpt", "value": "梯度下降是一种优化算法..."}
]}

6.2 重要数据集

  • OpenAssistant / ShareGPT:通用指令微调
  • Magpie-Pro-300K:Qwen 自生成高质量指令数据
  • FineWeb / DCLM:预训练续训数据
  • MiniMind 系列数据:pretrain_t2t + sft_t2t 专为从零训练设计

七、训练流程最佳实践

7.1 通用超参数

参数LoRAQLoRA从零训练
learning_rate2e-42e-43e-4~5e-4
lora_rank (r)16~3216~64N/A
lr_schedulercosinecosinecosine+warmup
optimizeradamw_torchadamw_bnb_8bitAdamW
max_seq_length20482048768~2048

八、范式一:PEFT 微调

见第三~四章(LoRA/QLoRA/DoRA + 工具链)。微调已有预训练模型是获取小模型最快的方式。


九、范式二:从零训练(MiniMind 路线)

9.1 项目概况

  • 项目:jingyaogong/minimind ⭐ 51K
  • 作者:巩景瑶(Jingyao Gong)
  • 核心理念:2小时从0训练64M参数LLM,覆盖 Pretrain → SFT → RLHF/DPO 全流程
  • 设计目标:极低成本复现大模型训练全过程,让个人开发者也能理解 LLM 的完整训练链路

9.2 架构

  • 模型配置:model_minimind.py 中定义,支持从 26M 到 64M 参数
  • 训练管线:
数据集 → train_pretrain.py(预训练)→ model.pth
       → train_sft.py(指令微调)→ full_sft.pth
       → train_rl.py(DPO/RLHF 对齐)→ full_rl.pth
       → train_distillation.py(蒸馏)→ student.pth

9.3 训练阶段

阶段脚本时间(64M)说明
预训练train_pretrain.py~1h从随机权重开始,在 pretrain_t2t 数据上训练
SFT 微调train_sft.py~0.5h在指令数据上微调,具备对话能力
偏好对齐train_rl.py~0.5hDPO/GRPO/RLHF 对齐人类偏好
蒸馏train_distillation.py~0.5h从教师模型(更大尺寸)学习分布

9.4 关键设计

  • MoE 支持:使用稀疏 MoE 架构替代 Dense,可在相同 flops 下扩大参数量
  • Tokenier 复用:不建议重新训练 tokenizer,保持与社区兼容
  • 训练监控:内置 loss 可视化、PPL 评估、beam search 生成
  • 评估:eval_llm.py 提供 ceval/cmmlu 等中文 benchmark 评测
  • 数据推荐:快速复现用 pretrain_t2t_mini + sft_t2t_mini;追求效果用完整数据集

9.5 衍生生态

  • learn-minimind(351★):22 课系统化 LLM 学习路线
  • minimind-notes(123★):极简大模型训练原理与实践指南
  • Minimind-LLaVA-V:扩展到多模态视觉语言模型

9.6 适合什么场景

  • 教育学习:理解 LLM 从 pretrain → SFT → RLHF 的完整链路
  • 特殊词表:需要自定义 tokenizer 和词表时无法用预训练模型
  • 极致领域定制:模型架构需要修改(如 MoE 路由策略)
  • 非目标:替代 PEFT / 蒸馏——从零训的 64M 模型能力远不及 LLaMA/Qwen 微调

十、范式三:知识蒸馏(Distillation)

10.1 原理

知识蒸馏(Knowledge Distillation)是用一个大的 教师模型 来教一个小的 学生模型。学生模型不仅学习"正确答案",还学习教师在不同候选 token 之间的相对倾向(即 logits 分布中的软信息)。

10.2 蒸馏方式

方式原理信息量复杂度典型实现
黑盒蒸馏学生仅学习教师的最终输出文本(teacher's output text)用教师生成 SFT 数据→训练学生
白盒蒸馏学生学习教师的 logits 分布(teacher's token distribution),使用 KL 散度损失loss = CE(y, y_true) + β·KL(p_teacher, p_student)
特征蒸馏学生还学习教师的中间层 hidden states需要对齐中间层维度
在线蒸馏教师和学生同时训练,互相学习Deep mutual learning

10.3 MiniMind 中的蒸馏实现

train_distillation.py 提供了完整的白盒蒸馏参考实现:

  • 教师/学生双模型加载:教师用更大参数版本,学生用更小版本
  • 损失函数:CE + β·KL 混合损失
  • 温度缩放:Temperature 控制 soft label 的平滑程度
  • MoE + Dense 组合蒸馏:支持从 MoE 教师蒸馏到 Dense 学生

10.4 适用场景

  • 模型压缩:从 7B 蒸馏到 1.5B,保持大部分能力
  • 部署轻量化:学生模型更小,推理更快,适合边缘设备
  • 隐私场景:可以用教师 API 的输出来训练本地学生,不暴露教师权重
  • 组合使用:蒸馏后的学生模型可以进一步用 PEFT 微调

10.5 经典蒸馏论文

  1. Hinton et al. "Distilling the Knowledge in a Neural Network" (2015). 奠基之作
  2. Sanh et al. "DistilBERT" (2019). 用蒸馏将 BERT 压缩 40%
  3. Gu et al. "The Wisdom of a Crowd of Brothers" — 在线蒸馏

十一、范式四:Master Prompt 微调(CJ Zafir)

11.1 来源

CJ Zafir 提出的 Master Prompt 公开微调方法,经抖音创作者 Carson 的视频介绍而被中文社区所知。该方法主张以公开透明的 prompt 架构 + 针对性 LoRA 微调,在垂直领域碾压昂贵通用大模型(GPT-4/Claude 等),实现 ~70% 成本降低 + 效果反超

核心主张:

  • 通用大模型(GPT-4/Claude/Gemini)在垂直领域并非最优解——微调小模型 + 精心设计的 master prompt 可以做得更好、更便宜
  • 微调方法应该公开、可复现,企业可直接 copy 方案,而非依赖封闭黑盒
  • Apple Silicon Mac(Mac Studio / MacBook)即可完成训练,无需昂贵 GPU 集群

11.2 代表项目:Mac-1

  • 基座:Qwen3.5 架构(Qwen3_5ForConditionalGeneration
  • 量化:4-bit MLX affine(group_size=64),bfloat16 精度
  • 平台:HuggingFace hf.co/CJzafir
  • 定位:在 Apple Silicon 上落地小模型微调的实践示例

(注:Master Prompt 的具体模板内容未公开索引到,建议在抖音搜索 Carson 的相关视频获取完整信息。)

11.3 MLX 微调示例

pip install mlx-lm

mlx_lm.lora \
    --model CJzafir/Mac-1 \
    --train \
    --data ./垂直领域数据 \
    --iters 200 \
    --lora-rank 16 \
    --learning-rate 2e-4

十二、推荐路线(按需求)

需求方案算力方案技术栈
快速适配领域任务PEFT 微调本地 V100 单卡 / 租 3090QLoRA + Unsloth
高性能微调PEFT 微调本地 V100 双卡 / 租 A100QLoRA + Qwen3-8B + DeepSpeed
垂直领域降本反超通用大模型Master Prompt 微调Apple Silicon Mac / 消费级 GPUCJ Zafir 方法论 + MLX
从零学习 LLM 原理MiniMind 从零训练任意 GPU / 租 3090(1.3¥/h)Python + MiniMind
模型压缩/部署知识蒸馏本地 V100 单卡 / 租 3090Teacher→Student + MiniMind 蒸馏
极致定制(自建词表)从零训练 + 蒸馏租 A100(8~10¥/h)MiniMind + Distillation

十三、文献索引

  1. Hu et al. "LoRA: Low-Rank Adaptation of Large Language Models" (2021). arXiv:2106.09685
  2. Dettmers et al. "QLoRA: Efficient Finetuning of Quantized LLMs" (2023). arXiv:2305.14314
  3. Liu et al. "DoRA: Weight-Decomposed Low-Rank Adaptation" (2024). arXiv:2402.09353
  4. Li et al. "LoftQ: LoRA-Fine-Tuning-Aware Quantization for Large Language Models" (2023). arXiv:2310.08659
  5. Xia et al. "Chain of LoRA: Efficient Fine-tuning via Residual Learning" (2024). arXiv:2401.04151
  6. Pan et al. "LISA: Layerwise Importance Sampling for Memory-Efficient LLM Fine-Tuning" (2024). arXiv:2403.17919
  7. Hinton et al. "Distilling the Knowledge in a Neural Network" (2015). 蒸馏奠基之作
  8. MiniMind — jingyaogong/minimind ⭐51K, GitHub
  9. CJ Zafir / Mac-1hf.co/CJzafir, Qwen3.5 4-bit MLX
  10. Carson(抖音) — 介绍 CJ Zafir Master Prompt 的中文创作者

最后更新:2026-06 · 覆盖四大范式(PEFT / 从零训练 / 蒸馏 / Master Prompt)+ 算力覆盖本地硬件和商业算力两大方向