LLaMA-Factory 全栈微调 — 用 WebUI 或命令行搞定 100+ 模型的一站式微调平台
一句话说明
LLaMA-Factory(v0.9.4,2025年12月)是国人开发的 ACL 2024 论文项目,提供图形化 WebUI 和命令行两种方式,支持 LoRA/QLoRA/全量微调、SFT/DPO/PPO/KTO 等方法,适合快速实验和生产级训练。
安装与配置
# 方式1:pip 安装(v0.9.4 需要 Python 3.11+)
pip install llamafactory
# 方式2:源码安装(推荐,获取最新功能)
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]" --no-build-isolation # 安装基础依赖
# 可选加速组件
pip install -e ".[torch,metrics,deepspeed,bitsandbytes,vllm]" # 全家桶安装
# 启动 WebUI
llamafactory-cli webui # 在浏览器打开 http://127.0.0.1:7860
# 验证安装
llamafactory-cli version
核心用法
# 方式1:WebUI 可视化操作(最友好)
llamafactory-cli webui
# 浏览器打开,选模型 → 选数据集 → 配置参数 → 点击训练
# 方式2:命令行训练(YAML 配置文件)
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
# 方式3:命令行直接传参
llamafactory-cli train \
--model_name_or_path meta-llama/Llama-3.2-8B-Instruct \
--do_train True \ # 执行训练
--finetuning_type lora \ # 微调方法:lora/freeze/full
--template llama3 \ # 提示模板类型
--dataset alpaca_zh \ # 使用内置数据集
--output_dir outputs/llama3-lora \
--num_train_epochs 3.0 \
--per_device_train_batch_size 2 \
--learning_rate 5e-5
参数详解
# examples/train_lora/llama3_lora_sft.yaml 示例
### 模型
model_name_or_path: meta-llama/Llama-3.2-8B-Instruct # 基座模型
trust_remote_code: true # 允许运行远程代码
### 训练方法
stage: sft # 阶段:pt/sft/rm/ppo/dpo/kto
do_train: true # 执行训练
finetuning_type: lora # 微调类型:lora/freeze/full
lora_target: all # 对所有线性层加 LoRA
lora_rank: 8 # LoRA 秩
lora_alpha: 16 # LoRA 缩放
### 数据集
dataset: alpaca_zh # 内置数据集名或自定义路径
template: llama3 # 提示模板(必须与模型匹配)
cutoff_len: 2048 # 最大序列长度
max_samples: 1000 # 最多使用多少条数据
overwrite_cache: true # 是否重新处理数据缓存
preprocessing_num_workers: 4 # 数据预处理线程数
### 输出
output_dir: saves/llama3-8b/lora/sft # 模型保存目录
logging_steps: 10 # 日志打印间隔
save_steps: 500 # 模型保存间隔
### 训练超参
per_device_train_batch_size: 2 # 每卡 batch 大小
gradient_accumulation_steps: 4 # 梯度累积
learning_rate: 1.0e-4 # 学习率
num_train_epochs: 3.0 # 训练轮数
warmup_ratio: 0.1 # 预热比例
bf16: true # 使用 bf16 精度
### 量化(可选)
quantization_bit: 4 # 4bit 量化(QLoRA)
实战案例
# 使用自定义数据集微调
# 1. 准备数据(alpaca 格式,存为 data/my_data.json)
import json
data = [
{
"instruction": "用简单的话解释 DNA 甲基化",
"input": "",
"output": "DNA 甲基化就像在 DNA 上贴标签..."
}
]
with open("data/my_data.json", "w") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# 2. 在 data/dataset_info.json 中注册数据集
dataset_info = {
"my_data": { # 数据集名称
"file_name": "my_data.json", # 文件路径(相对于 data/ 目录)
"formatting": "alpaca" # 数据格式
}
}
# 3. 训练命令
# llamafactory-cli train \
# --dataset my_data \
# --template llama3 \
# ...其他参数
# 推理与导出
# 加载 LoRA 模型进行对话
llamafactory-cli chat --model_name_or_path meta-llama/Llama-3.2-8B-Instruct \
--adapter_name_or_path saves/llama3-8b/lora/sft \
--template llama3 \
--finetuning_type lora
# 合并 LoRA 权重并导出
llamafactory-cli export \
--model_name_or_path meta-llama/Llama-3.2-8B-Instruct \
--adapter_name_or_path saves/llama3-8b/lora/sft \
--template llama3 \
--finetuning_type lora \
--export_dir merged_model \
--export_size 4 \ # 每个分片最大 4GB
--export_legacy_format false
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
Template not found | 模板名写错 | 查看 src/llamafactory/data/template.py 中的支持列表 |
Dataset not found | 数据集未注册 | 在 data/dataset_info.json 中添加数据集信息 |
CUDA OOM | 显存不足 | 开启量化 quantization_bit: 4 |
Python < 3.11 | 版本要求 | v0.9.4 需要 Python 3.11+ |
| WebUI 无法打开 | 端口占用 | --port 7861 换端口 |
速查表
| 功能 | 命令 |
|---|
| 启动 WebUI | llamafactory-cli webui |
| SFT 训练 | llamafactory-cli train config.yaml |
| 对话测试 | llamafactory-cli chat ... |
| 模型导出 | llamafactory-cli export ... |
| 支持的模板 | llama3 / qwen / gemma / mistral / chatglm 等 |
| 内置数据集 | alpaca_zh / belle_multiturn / glaive_toolcall 等 |
| GitHub | https://github.com/hiyouga/LLaMA-Factory |