大模型微调调研报告(2026 版):方法、框架与 NVIDIA/DCU 双路径
风险声明
⚠️ 本文档基于训练知识(截止 2025-08)+ 2026-06-28 实地抓取 LLaMA-Factory / unsloth 官方 README 复核。 未在本机实测。具体版本号、命令、显存占用请拿到对应硬件后实测。
一、为什么需要微调?
典型选择:
- 改”说话方式” → SFT(监督微调)足够
- 改”判断对错” → DPO / ORPO(偏好对齐)更直接
- 注入”领域知识” → 继续预训练(Continue Pretrain)→ SFT → 可选 DPO
- 强化”推理” → GRPO / RLHF
二、微调方法全景
2.1 按改动参数量分类
推荐起步组合:QLoRA(r=16)+ bf16 + FlashAttn-2——单卡 4090/24GB 即可训练 7B,接近 Full FT 90% 效果。
2.2 按训练目标分类
2.3 SFT 的两个核心坑
- 只算 response 的 loss,不算 prompt 的 loss——这是 Alpaca 格式的标准做法,但很多新手框架默认全算,导致模型学会”复读 prompt”。
- 数据质量 >> 数量——1k 条干净数据 > 100k 条带噪数据(LIMA 论文、Microsoft Phi 系列反复验证)。
三、主流微调框架横评
3.1 选型决策
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 数据集推荐(按场景)
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 超参推荐起步
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 评估方法
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。因此:
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 训练坑(经验)
7.5 DCU 上微调 7B 模型显存参考(经验值)
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 决策清单(给主人场景)
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
|