LLaMA-Factory 入门
1. LLaMA-Factory 是什么
LLaMA-Factory 是面向大语言模型和多模态模型的统一微调框架。它通过 CLI、YAML 配置和 WebUI 组织模型、数据集、对话模板及训练策略,使用户不必为每种模型重复编写完整训练脚本。
本项目重点介绍 LLaMA-Factory 在摩尔线程 MUSA 环境中的使用,包括 Qwen3 模型的全参数 SFT、LoRA、CP Ulysses、packing、QLoRA、FP8 和 DPO 等实践。
1.1 适用场景
- 使用自定义对话数据完成监督微调(SFT);
- 通过 LoRA/QLoRA 降低训练显存和 checkpoint 体积;
- 执行继续预训练、奖励模型、DPO/KTO 等训练任务;
- 使用 WebUI 快速配置、启动和观察训练;
- 通过 DeepSpeed、FSDP 或序列并行扩展到多卡任务;
- 训练后进行推理、LoRA 合并和模型导出。
1.2 设计特点
- 配置驱动:模型、数据、模板和超参数集中在 YAML 或命令行中;
- 统一数据注册:通过
dataset_info.json将数据文件注册为可引用的数据集名称; - 模板适配:针对不同模型使用对应 chat template;
- 多种微调方式:支持 full、freeze、LoRA 和量化 LoRA;
- 多种入口:CLI 适合复现和自动化,WebUI 适合交互配置;
- 上层编排:依赖 Transformers、PEFT、TRL、DeepSpeed 等组件完成底层训练。
2. 核心架构
2.1 主要组件
| 组件 | 作用 |
|---|---|
| Model Loader | 加载 Hugging Face/ModelScope 模型和 tokenizer/processor |
| Template | 把对话与多模态字段转换为目标模型输入 |
| Dataset Registry | 通过 dataset_info.json 关联数据集名称、文件和字段映射 |
| Data Processor | 截断、tokenize、packing 并生成 labels |
| Trainer | 执行 PT、SFT、RM、DPO/KTO/PPO 等阶段 |
| PEFT | 提供 LoRA、QLoRA 等参数高效微调 |
| DeepSpeed / FSDP | 提供多卡分布式和显存优化 |
| WebUI / CLI | 生成配置并启动训练、评估、推理或导出 |
| MUSA / MCCL | 提供摩尔线程 GPU 计算和多卡通信能力 |
2.2 一次 SFT 任务如何运行
读取 YAML / CLI 参数
↓
按 dataset 名称查询 dataset_info.json
↓
读取数据文件并执行字段映射
↓
应用模型对应的 chat template
↓
tokenize、截断或 packing
↓
Trainer 执行 full/LoRA 训练
↓
保存 checkpoint、trainer state 和日志
这里的 --dataset train 表示使用注册名称为 train 的数据集,而不是直接读取名为 train 的文件;真实文件和字段映射由 dataset_info.json 决定。
3. 如何选择微调方式
3.1 全参数微调
全参数微调会更新模型全部可训练参数,通常效果上限较高,但显存、通信和 checkpoint 成本最大。适合模型较小、GPU 资源充足或任务与基础模型差异较大的情况。
3.2 LoRA 与 QLoRA
| 方式 | 训练内容 | 特点 |
|---|---|---|
| LoRA | 低秩 adapter | 显存较低、产物小、兼容性通常较好 |
| QLoRA | 量化基础模型 + LoRA | 进一步降低显存,但对量化后端和硬件兼容要求更高 |
| Freeze | 只训练部分原模型层 | 适用于希望直接更新部分权重的场景 |
推荐先用少量数据和 LoRA 验证模型、模板与数据链路,再扩大数据或切换全参数训练。
3.3 单卡、多卡和长序列
单卡可容纳 → 直接 CLI + full/LoRA
常规多卡数据并行 → FORCE_TORCHRUN=1
显存仍不足 → DeepSpeed ZeRO / FSDP
长序列切分 → CP Ulysses 等序列并行
启用 CP Ulysses 时,sequence parallel size 必须与 attention heads 等模型结构维度兼容,并与训练脚本中的相关配置保持一致。