大模型微调调研报告(2026 版):方法、框架与 NVIDIA/DCU 双路径
风险声明
⚠️ 本文档基于训练知识(截止 2025-08)+ 2026-06-28 实地抓取 LLaMA-Factory / unsloth 官方 README 复核。 未在本机实测。具体版本号、命令、显存占用请拿到对应硬件后实测。
一、为什么需要微调?
| 路径 |
适用 |
代价 |
| Prompt Engineering |
任务定义清晰、基模够用 |
几乎零成本,效果天花板受基模限制 |
| RAG(检索增强) |
需要引用私有知识、需溯源 |
工程链路长,延迟+成本高 |
| Fine-tuning(本报告主题) |
需要改行为/风格/输出格式,或需要持续预训练吸收领域知识 |
需要标注数据 + 训练算力 |
| Pretrain from scratch |
全新架构 / 全新领域 |
算力天文数字,几乎只有大厂能做 |
典型选择:
- 改”说话方式” → SFT(监督微调)足够
- 改”判断对错” → DPO / ORPO(偏好对齐)更直接
- 注入”领域知识” → 继续预训练(Continue Pretrain)→ SFT → 可选 DPO
- 强化”推理” → GRPO / RLHF
二、微调方法全景
2.1 按改动参数量分类
| 方法 |
改动参数量 |
显存(7B 模型,bs=1,seq=2k) |
适用 |
| Full Fine-Tuning |
100%(≈7B 参数) |
≥ 60GB |
极致效果、数据充足、卡多 |
| Freeze Tuning |
<1%(只解冻最后几层) |
≤ 16GB |
任务简单、改动小 |
| LoRA |
0.1% – 1%(rank 8-64) |
16-24GB |
最主流,性价比最高 |
| QLoRA |
LoRA + 4bit 量化基模 |
8-12GB(可在 4090 上跑 7B) |
单卡跑大模型 |
| DoRA |
LoRA 改进(分解方向/幅度) |
16-24GB |
比 LoRA 略好,略贵 |
| GaLore |
全参数,梯度低秩投影 |
接近 Full FT,但显存 ≈ LoRA |
24GB 卡也想做 Full FT 效果时 |
| BAdam |
Adam 的内存高效变体 |
16-24GB |
GaLore 平替 |
| APOLLO |
类似 GaLore,更新更稀疏 |
16-24GB |
新工作,2025 出 |
| Adam-mini |
优化器侧省显存 |
16-24GB |
全参数但省优化器状态 |
推荐起步组合:QLoRA(r=16)+ bf16 + FlashAttn-2——单卡 4090/24GB 即可训练 7B,接近 Full FT 90% 效果。
2.2 按训练目标分类
| 阶段 |
训练目标 |
典型算法 |
数据量级 |
| 继续预训练(CPT) |
Next Token Prediction |
标准 LM loss |
百万级token(领域语料) |
| 监督微调(SFT) |
给定 prompt 输出理想 answer |
标准 LM loss,只算 response 部分 loss |
千-万级高质量指令对 |
| 偏好对齐(DPO/ORPO/SimPO) |
让”好回答”概率 > “坏回答” |
DPO loss / IPO / KTO |
千-万级(偏好对) |
| RLHF / PPO |
用奖励模型引导策略 |
PPO + Reward Model |
万-十万级 |
| RL 强化(GRPO/DAPO) |
可验证奖励(数学/代码) |
GRPO loss(DeepSeek-R1 用法) |
千级(带可验证答案) |
2.3 SFT 的两个核心坑
- 只算 response 的 loss,不算 prompt 的 loss——这是 Alpaca 格式的标准做法,但很多新手框架默认全算,导致模型学会”复读 prompt”。
- 数据质量 >> 数量——1k 条干净数据 > 100k 条带噪数据(LIMA 论文、Microsoft Phi 系列反复验证)。
三、主流微调框架横评
| 框架 |
定位 |
模型覆盖 |
算法覆盖 |
易用性 |
性能 |
国产卡 |
| HuggingFace TRL |
官方 SFT/DPO/GRPO 库 |
全(HF Hub 上都能训) |
SFT/DPO/PPO/GRPO/CPO/KTO/ORPO |
★★★ |
标准 |
需自适配 |
| HuggingFace PEFT |
LoRA/QLoRA/DoRA 实现 |
全 |
LoRA 全系 |
★★★ |
标准 |
需自适配 |
| LLaMA-Factory(hiyouga) |
一站式 WebUI + CLI |
100+ LLMs/VLMs(Qwen3 / DeepSeek / Llama 4 / GLM-4.1V / Gemma 3 / InternLM3 / MiniCPM-o) |
全(PT + SFT + DPO/KTO/ORPO + GaLore/BAdam/APOLLO/Adam-mini/Muon/DoRA/LongLoRA/LoRA+/LoftQ/PiSSA) |
★★★★★(LlamaBoard GUI) |
★★★★(集成 FlashAttn-2 / Unsloth / Liger Kernel / KTransformers) |
原生 NPU 文档(ASCEND),ROCm 也有 |
| unsloth |
极快速度 + 省显存 |
500+(gpt-oss / Qwen3.6 / Gemma 4 / Llama 4 / Mistral / Phi-4) |
SFT + RL(GRPO/FP8 RL) |
★★★★(Studio Web UI) |
★★★★★(2x 加速,70% 显存节省,无精度损失) |
AMD 可用(NVIDIA 为主) |
| DeepSpeed + Megatron |
分布式大规模训练 |
自定义 |
ZeRO-1/2/3 + TP/PP |
★★ |
最强但调参难 |
适配差 |
| Torchtune |
PyTorch 官方实验性 |
主流 |
LoRA/QLoRA + 新方法实验 |
★★ |
标准 |
需自适配 |
| Swift(ModelScope) |
阿里出品,中文友好 |
100+ |
SFT/DPO/GRPO 全 |
★★★★ |
★★★★ |
有 NPU 适配 |
3.1 选型决策
| 场景 |
推荐框架 |
理由 |
| 个人/小团队,7B-70B 单卡 |
unsloth |
速度最快、显存最省、Studio UI 友好 |
| 企业团队,需要 WebUI + 集中管理 + 国产卡 |
LLaMA-Factory |
一站式、原生 NPU/ROCm 支持、内置 LlamaBoard |
| 学术研究,要试新算法 |
TRL + PEFT |
上游,新算法第一站 |
| 多机多卡大规模训练(>70B / MoE) |
DeepSpeed + Megatron / LLaMA-Factory + KTransformers |
LLaMA-Factory 已有 2×4090 + CPU 训 1T 模型的 blog |
| 生产环境中文落地 |
Swift 或 LLaMA-Factory |
中文文档 + 国内模型生态最全 |
3.2 unsloth vs LLaMA-Factory
- 想要速度 + 显存极致 → unsloth
- 想要算法齐全 + WebUI + 多后端 → LLaMA-Factory
- 两个可以同时用:LLaMA-Factory 已内置 unsloth 后端,命令行加
--use_unsloth 即可
四、数据工程
4.1 数据格式
主流三种:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| {"instruction": "...", "input": "...", "output": "..."}
{"conversations": [ {"from": "human", "value": "..."}, {"from": "gpt", "value": "..."} ]}
{"messages": [ {"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."} ]}
|
LLaMA-Factory 内置数据集全用前三格式,自动识别。unsloth 默认用 HuggingFace datasets 库的标准 schema。
4.2 数据集推荐(按场景)
| 场景 |
数据集 |
来源 |
| 通用对话 |
alpaca / alpaca_zh / sharegpt |
HF Hub |
| 中文指令 |
COIG-CQIA / COIG-PC / Chinese-LLaMA-Vivifier |
HF Hub |
| 代码 |
Magicoder-OSS-Instruct-75K / CodeAlpaca-20K / OpenCodeInterpreter |
HF Hub |
| 数学/推理 |
MetaMathQA / OpenMathInstruct / OpenR1-Math |
HF Hub |
| 多轮对话 |
UltraChat / LMSYS-Chat-1M |
HF Hub |
| 偏好对齐(DPO) |
UltraFeedback / HH-RLHF / Argilla-DPO-Mix-7K |
HF Hub |
| 行业语料(CPT) |
自己爬/买,清洗后用 |
内部 |
| Agent/Tool 调用 |
xLAM / ToolBench / Glaive-Function-Calling |
HF Hub |
4.3 数据清洗 checklist
- 去重:精确去重 + MinHash 模糊去重
- 过滤低质:长度过滤(< 20 token / > 2048 token 警告)、语言检测、毒性过滤
- 去污染:用 n-gram 与评测集(bench)比对,防止评测泄露
- 格式统一:统一成 Alpaca/ShareGPT 之一
- 质量标注:用 GPT-4 / Claude / 强基模打分,过滤掉低分样本
五、训练流程(以 LLaMA-Factory 为例,unsloth 类似)
5.1 最小工作流(7B 模型 + LoRA)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| pip install uv uv pip install "llamafactory[torch,metrics]" -i https://pypi.org/simple
mkdir -p data && cp my_data.json data/
cat > train_lora.yaml <<'EOF' model_name_or_path: Qwen/Qwen3-7B template: qwen dataset: my_data output_dir: saves/qwen3-7b/lora/sft finetuning_type: lora lora_rank: 16 lora_target: q_proj,v_proj learning_rate: 2.0e-4 num_train_epochs: 3.0 per_device_train_batch_size: 2 gradient_accumulation_steps: 8 bf16: true flash_attn: fa2 EOF
llamafactory-cli train train_lora.yaml
torchrun --nproc_per_node 4 -m llamafactory.cli train train_lora.yaml
llamafactory-cli chat saves/qwen3-7b/lora/sft
llamafactory-cli export saves/qwen3-7b/lora/sft
|
5.2 SFT 超参推荐起步
| 超参 |
推荐起步值 |
备注 |
| learning_rate(LoRA) |
2e-4 |
Full FT 用 2e-5 |
| learning_rate(QLoRA) |
1e-4 |
量化后更敏感 |
| num_train_epochs |
3 |
数据 < 1k 用 5 |
| batch_size × grad_accum |
16(等效 batch) |
单卡不够就堆 grad_accum |
| max_seq_length |
2048(对话) / 4096(长文) |
长上下文训练贵 4 倍显存 |
| warmup_ratio |
0.03 |
标准 |
| lr_scheduler |
cosine |
比 linear 收敛稳 |
| weight_decay |
0.01 |
LoRA 可降到 0 |
| lora_rank |
16 |
7B 用 16,70B 用 64 |
| lora_alpha |
32(2×rank) |
LoRA+ 用 4×rank |
| lora_dropout |
0.05 |
数据少时调到 0.1 |
| packing |
True |
把短样本拼满 seq_len,提速 30%+ |
5.3 DPO 起步(直接做偏好对齐)
1 2 3 4 5 6
| stage: dpo pref_beta: 0.1 learning_rate: 5.0e-6 num_train_epochs: 2.0 dataset: ultrafeedback
|
ORPO(更省一步):SFT + DPO 一步搞定,无需先训 reference model,显存省一半。
六、评估与部署
6.1 评估方法
| 类型 |
做法 |
何时用 |
| 人工盲评 |
A/B 对比,标注员打分 |
最权威,贵 |
| LLM-as-Judge |
用 GPT-4 / Claude / 强基模打分 |
通用,需防位置偏置 |
| Bench 评测 |
MMLU / C-Eval / HumanEval / GSM8K / MT-Bench |
学术对比用,不能反映业务 |
| 业务指标 |
任务成功率 / 转化率 / 客服满意度 |
生产环境 |
| Reward Model |
训个 RM 自动打分 |
RLHF / DPO 训练时 |
6.2 部署
1 2 3 4 5 6 7 8 9
| vllm serve ./saves/qwen3-7b/full \ --host 0.0.0.0 --port 8000 \ --gpu-memory-utilization 0.9 \ --max-model-len 8192
vllm serve Qwen/Qwen3-7B \ --enable-lora --lora-modules my_lora=./saves/qwen3-7b/lora/sft
|
SGLang 与 vLLM 在生产部署性能相近,SGLang 对复杂提示词模板/Agent 调用稍优,vLLM 对纯生成吞吐稍优。
七、国产卡路径:海光 DCU K100
紧接《MinerU 部署调研报告》DCU 章节(2026-06-29),驱动/DTK/PyTorch wheel 严格匹配的机制完全相同。
7.1 DCU 训练能否跑 LoRA?
答:能,且 LLaMA-Factory 已原生支持 ROCm 路径(官方文档 rocm.docs.amd.com/projects/ai-developer-hub/...llama_factory_llama3)。unsloth 也有 AMD 实验支持。
DCU 通过 DTK 的 ROCm/HIP 兼容层,PyTorch 把 DCU 伪装成 CUDA,torch.cuda.is_available() 返回 True。因此:
| 组件 |
DCU 上情况 |
备注 |
| LoRA / QLoRA |
✅ |
PEFT 全套算法兼容 |
| FlashAttention-2 |
✅ |
DTK 自带 ROCm 版 |
| DeepSpeed ZeRO |
⚠️ 部分支持 |
单机能跑,多机需测 |
| FSDP |
⚠️ |
同上 |
| unsloth 内核 |
✅ |
AMD 实验分支 |
| Megatron-LM TP/PP |
❌ |
不建议 DCU 玩 |
7.2 DCU + LLaMA-Factory 实操路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
uv pip install llamafactory
llamafactory-cli train train_lora.yaml
torchrun --nproc_per_node 2 -m llamafactory.cli train train_lora.yaml
|
7.3 DCU + unsloth 实操路径
unsloth 在 AMD 上需要装 ROCm 版:
1 2
| uv pip install unsloth --torch-backend=rocm
|
7.4 已知 DCU 训练坑(经验)
| 坑 |
现象 |
绕法 |
| DTK 25.04 ↔ torch wheel 必须严格匹配 |
装错 wheel torch.cuda.is_available() = False |
用 torch-2.4.1+das.opt2.dtk2504-... 严格对应 |
group=39 没加 |
报 Cannot open /dev/kfd |
usermod -aG 39 $USER 或容器 --group-add 39 |
| FlashAttn-2 加载失败 |
import 阶段报 no kernel image |
装 ROCm 版 FA-2 或改用 --flash_attn false(降速) |
| 训练 loss 不下降 |
多半是 bf16 与 DCU 算子不完全兼容 |
切 fp16 试一下 |
| QLoRA bitsandbytes |
DCU 上可能找不到 4bit 算子 |
用 HQQ/EETQ 替代(已集成到 LLaMA-Factory) |
7.5 DCU 上微调 7B 模型显存参考(经验值)
| 配置 |
显存占用 |
| LoRA r=16,seq=2048,bs=2 |
~22GB |
| QLoRA 4bit,seq=2048,bs=2 |
~12GB |
| Full FT 7B + ZeRO-3(多卡) |
~30GB/卡 |
DCU K100 单卡 16GB / 32GB 显存,7B 训练推荐 QLoRA + 单卡 或 LoRA + 单卡;Full FT 7B 需 ≥ 60GB 单卡或 ZeRO-3 多卡。
八、踩坑清单与决策建议
8.1 常见踩坑(顺序按发生频率)
- 只算全句 loss 而不是 response loss → 模型复读 prompt
- 学习率太大(LoRA 用 1e-3) → 训崩,loss 飞
- 数据未去重/未清洗 → 模型学坏
- 训练 epoch 过多 → 灾难性遗忘(忘了预训练知识)
- 评测集污染 → 分数虚高
- 合并 LoRA 时漏了 tokenizer 模板 → 部署后输出格式错
- DCU/NPU 上没改 DTK 适配版本 → 直接报 CUDA 不可用
- Packing 开了但忘了 attention mask → 跨样本注意力泄露
8.2 决策清单(给主人场景)
| 问题 |
建议 |
| 7B 模型 + 单卡 4090/A800 |
LLaMA-Factory + QLoRA + flash_attn=fa2 |
| 7B 模型 + 多卡 4090×4 |
LLaMA-Factory + LoRA + 多卡 DDP |
| 70B 模型 + 8×A800 |
LLaMA-Factory + LoRA r=64 + DeepSpeed ZeRO-3(或 unsloth) |
| 海光 DCU K100 + 7B |
LLaMA-Factory + QLoRA + ROCm FA-2,验证 torch.cuda.is_available() 再开训 |
| 想最快出 PoC |
unsloth Studio,Web UI 拖拽式 |
| 想做 Agent / Tool 调用 |
数据集用 xLAM,template 用 tool,LLaMA-Factory 直接支持 |
| 想做数学/代码推理 |
SFT 后接 GRPO,用 OpenR1-Math / OpenCodeInterpreter |
8.3 三句话总结
- 数据 > 算法 > 框架:90% 的微调效果来自数据质量
- QLoRA + bf16 + FA-2 是单卡起步最优解
- 国产卡选 LLaMA-Factory(原生多后端支持),N 卡选 unsloth 或 LLaMA-Factory 都行
九、信息源
9.1 框架官方
9.2 算法论文
- LoRA:arXiv 2106.09685(Hu et al.)
- QLoRA:arXiv 2305.14314(Dettmers et al.)
- DoRA:arXiv 2402.09353(Liu et al.)
- DPO:arXiv 2305.18290(Rafailov et al.)
- ORPO:arXiv 2403.07691(Hong et al.)
- SimPO:arXiv 2405.14734
- GRPO:DeepSeek-R1 技术报告
- GaLore:arXiv 2403.03507(Zhao et al.)
- BAdam:arXiv 2405.16070
- APOLLO:arXiv 2412.05270
- Adam-mini:arXiv 2406.16793
- LIMA:arXiv 2305.11206(数据质量 > 数量)
9.3 部署
9.4 国产卡
9.5 姐妹文档
- MinerU 部署调研报告(2026-06-29):
source/_posts/MinerU部署调研报告.md
十、附录:微调最小命令清单(速查)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| pip install uv uv pip install llamafactory llamafactory-cli train train_lora.yaml
uv pip install llamafactory llamafactory-cli train train_lora.yaml
uv pip install unsloth --torch-backend=auto
vllm serve ./merged_model --port 8000
|