LLaMA-Factory 完整使用手册
LLaMA-Factory 完整使用手册
版本: 2026年5月 | 适用版本: LLaMA-Factory v0.9+
LLaMA-Factory 是一个统一、高效且易用的大模型微调框架,支持 100+ 种模型(LLaMA、Qwen、ChatGLM、Baichuan 等)和多种微调方法(LoRA、QLoRA、全参数、冻结等)。
目录
1. 环境安装与部署
1.1 硬件要求
| 模型规模 | 训练方式 | 推荐显存 | 推荐显卡 |
|---|---|---|---|
| 7B/8B | LoRA | 16-24 GB | RTX 3090/4090 |
| 7B/8B | QLoRA (4-bit) | 8-12 GB | RTX 3060/4060 |
| 13B | LoRA | 32-48 GB | A100 40GB / 双卡 3090 |
| 13B | QLoRA | 16-24 GB | RTX 4090 |
| 70B | LoRA | 80+ GB | A100 80GB × 2 |
| 70B | QLoRA | 48+ GB | A100 40GB × 2 |
| 任意 | 全参数微调 | 显存 × 3-4 | 多卡 A100/H100 |
1.2 环境安装
方式一:pip 安装(推荐)
# 创建 conda 环境
conda create -n llama_factory python=3.10 -y
conda activate llama_factory
# 克隆仓库
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 安装依赖(包含评估指标)
pip install -e ".[metrics]"
# 如需量化训练,安装 bitsandbytes
pip install bitsandbytes
# 如需 Flash Attention 加速(Linux/Ampere架构GPU)
pip install flash-attn --no-build-isolation方式二:Docker 部署
# 拉取官方镜像
docker pull nvcr.io/nvidia/pytorch:24.02-py3
# 运行容器
docker run --gpus all -it --rm -v $(pwd)/LLaMA-Factory:/workspace -v $(pwd)/data:/data -p 7860:7860 nvcr.io/nvidia/pytorch:24.02-py3
# 在容器内安装
cd /workspace
pip install -e ".[metrics]"1.3 环境验证
# 验证 LLaMA-Factory 安装
llamafactory-cli train -h
# 验证 PyTorch 和 CUDA
python -c "
import torch
print(f'PyTorch: {torch.__version__}')
print(f'CUDA可用: {torch.cuda.is_available()}')
print(f'GPU: {torch.cuda.get_device_name(0)}')
print(f'CUDA版本: {torch.version.cuda}')
"1.4 模型下载
# 方式1:使用 HuggingFace(需网络环境)
# 模型会在首次使用时自动下载
# 方式2:使用 ModelScope(国内推荐)
pip install modelscope
export USE_MODELSCOPE=True
# 方式3:手动下载到本地
# 从 https://huggingface.co 或 https://modelscope.cn 下载模型文件
# 放置于 ./models/ 目录下2. 快速开始:LoRA 微调
2.1 最简命令行训练
llamafactory-cli train --stage sft --do_train --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --dataset alpaca_gpt4_en --template llama3 --finetuning_type lora --lora_target all --output_dir saves/llama3-8b/lora/sft --per_device_train_batch_size 1 --gradient_accumulation_steps 8 --learning_rate 1.0e-4 --num_train_epochs 3.0 --lr_scheduler_type cosine --warmup_ratio 0.1 --bf16 --logging_steps 10 --save_steps 500 --plot_loss2.2 使用 YAML 配置文件
创建 train_lora.yaml:
### 模型配置
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
trust_remote_code: true
### 方法配置
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 8
lora_alpha: 16
lora_target: all
lora_dropout: 0.05
### 数据集配置
dataset: identity,alpaca_en_demo
template: llama3
cutoff_len: 2048
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16
### 输出配置
output_dir: saves/llama3-8b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
### 训练配置
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000
### 评估配置
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500执行训练:
llamafactory-cli train train_lora.yaml2.3 覆盖配置文件参数
llamafactory-cli train train_lora.yaml learning_rate=5e-5 num_train_epochs=5 logging_steps=13. 数据集准备与格式
3.1 数据集目录结构
data/
├── dataset_info.json # 数据集注册文件
├── identity.json # 自定义数据集
├── alpaca_en_demo.json # 示例数据集
└── ...3.2 注册数据集
编辑 data/dataset_info.json:
{
"identity": {
"file_name": "identity.json",
"formatting": "alpaca",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
},
"my_dataset": {
"file_name": "my_dataset.json",
"formatting": "sharegpt",
"columns": {
"messages": "messages",
"system": "system"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant"
}
}
}3.3 数据格式详解
格式一:Alpaca 格式(单轮指令)
[
{
"instruction": "解释什么是机器学习",
"input": "",
"output": "机器学习是人工智能的一个分支,它使计算机能够从数据中学习模式...",
"system": "你是一个有帮助的AI助手"
},
{
"instruction": "翻译以下句子",
"input": "今天天气真好",
"output": "The weather is nice today."
}
]格式二:ShareGPT 格式(多轮对话)
[
{
"messages": [
{"role": "system", "content": "你是一个专业的翻译助手。"},
{"role": "user", "content": "翻译:你好世界"},
{"role": "assistant", "content": "Hello World"},
{"role": "user", "content": "翻译成法语"},
{"role": "assistant", "content": "Bonjour le monde"}
]
}
]格式三:预训练格式(纯文本)
[
{"text": "这是第一个文档的内容。可以是任意长度的纯文本。"},
{"text": "这是第二个文档。预训练只需要纯文本,不需要指令或回复。"}
]3.4 对话模板(Template)
不同模型需要不同的对话模板:
| 模型 | Template | 说明 | ||||
|---|---|---|---|---|---|---|
| Llama 3 | llama3 | `< | begin_of_text | >...< | eot_id | >` |
| Qwen 2/2.5 | qwen | `< | im_start | >user/assistant< | im_end | >` |
| Qwen 3 | qwen3_nothink | Qwen3 无思考模式 | ||||
| ChatGLM | chatglm | `[gMASK]sop< | user | >...` | ||
| Baichuan | baichuan | Baichuan 原生格式 | ||||
| DeepSeek | deepseek3 | DeepSeek V3 格式 | ||||
| Mistral | mistral | Mistral 指令格式 | ||||
| Gemma | gemma | Gemma 对话格式 |
⚠️ 重要:
template必须与模型匹配,否则训练效果会严重下降!
4. 微调方法详解
4.1 方法对比
| 方法 | 显存占用 | 训练速度 | 效果 | 适用场景 |
|---|---|---|---|---|
| LoRA | 低 | 快 | 良好 | 通用首选,资源有限 |
| QLoRA | 极低 | 中等 | 良好 | 消费级显卡微调大模型 |
| 全参数 (Full) | 极高 | 慢 | 最佳 | 数据充足、追求极致效果 |
| 冻结 (Freeze) | 低 | 快 | 一般 | 快速实验、仅训练部分层 |
4.2 LoRA 微调
finetuning_type: lora
lora_rank: 8 # 秩,通常 4-64
lora_alpha: 16 # 缩放因子,通常为 rank 的 1-2 倍
lora_dropout: 0.05 # Dropout 比例,防止过拟合
lora_target: all # 目标模块:all / q_proj,v_proj / 自定义
lora_rank_pattern: {} # 为不同层设置不同 rank
lora_alpha_pattern: {} # 为不同层设置不同 alpha
use_rslora: false # 是否使用 RS-LoRA(秩稳定 LoRA)LoRA 目标模块选择:
# 仅注意力层(最轻量)
lora_target: q_proj,v_proj
# 注意力 + FFN(平衡)
lora_target: q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj
# 所有线性层(效果最好,参数量最大)
lora_target: all4.3 QLoRA 微调(量化 + LoRA)
finetuning_type: lora
quantization_bit: 4 # 4-bit 量化(可选 4 或 8)
quantization_method: bitsandbytes # 量化方法
double_quantization: true # 嵌套量化,进一步节省显存
quantization_type: nf4 # 4-bit 量化类型:nf4 / fp44.4 全参数微调
finetuning_type: full
# 需要配合 DeepSpeed 使用
# deepspeed: examples/deepspeed/ds_z3_config.jsonDeepSpeed Zero 配置示例 (ds_z3_config.json):
{
"train_batch_size": "auto",
"train_micro_batch_size_per_gpu": "auto",
"gradient_accumulation_steps": "auto",
"gradient_clipping": "auto",
"zero_optimization": {
"stage": 3,
"offload_optimizer": {
"device": "cpu"
},
"offload_param": {
"device": "cpu"
},
"overlap_comm": true,
"contiguous_gradients": true
},
"fp16": {
"enabled": "auto"
},
"bf16": {
"enabled": "auto"
}
}4.5 冻结微调
finetuning_type: freeze
freeze_trainable_layers: 8 # 训练最后 N 层
freeze_trainable_modules: "mlp" # 训练指定模块
freeze_extra_modules: "embed" # 额外训练的模块
use_llama_pro: false # 是否使用 LLaMA Pro 扩展5. 核心参数详解
5.1 模型与数据参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model_name_or_path | str | 必填 | 模型名称或本地路径 |
adapter_name_or_path | str | null | 加载已有 LoRA 适配器 |
trust_remote_code | bool | false | 信任远程代码(部分模型需要) |
stage | str | sft | 训练阶段:pt/sft/rm/ppo/dpo/kto/orpo |
do_train | bool | false | 是否执行训练 |
dataset | str | 必填 | 数据集名称,逗号分隔多个 |
dataset_dir | str | data | 数据集目录 |
template | str | 必填 | 对话模板 |
cutoff_len | int | 2048 | 最大序列长度 |
max_samples | int | null | 每个数据集最大样本数 |
overwrite_cache | bool | false | 覆盖缓存 |
preprocessing_num_workers | int | 16 | 预处理线程数 |
dataloader_num_workers | int | 0 | 数据加载线程数 |
5.2 微调方法参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
finetuning_type | str | lora | 微调类型:full/lora/freeze |
lora_rank | int | 8 | LoRA 秩 |
lora_alpha | int | 16 | LoRA 缩放因子 |
lora_dropout | float | 0.0 | LoRA Dropout |
lora_target | str | all | LoRA 目标模块 |
quantization_bit | int | null | 量化位数:4/8 |
quantization_method | str | bitsandbytes | 量化方法 |
double_quantization | bool | true | 嵌套量化 |
freeze_trainable_layers | int | 8 | 冻结训练可训练层数 |
freeze_trainable_modules | str | null | 冻结训练可训练模块 |
use_llama_pro | bool | false | 使用 LLaMA Pro |
5.3 训练参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
per_device_train_batch_size | int | 1 | 每设备训练批次大小 |
per_device_eval_batch_size | int | 1 | 每设备评估批次大小 |
gradient_accumulation_steps | int | 1 | 梯度累积步数 |
learning_rate | float | 5e-5 | 初始学习率 |
num_train_epochs | float | 3.0 | 训练轮数 |
max_steps | int | -1 | 最大训练步数(覆盖 epochs) |
warmup_ratio | float | 0.0 | 预热比例 |
warmup_steps | int | 0 | 预热步数 |
lr_scheduler_type | str | cosine | 学习率调度器 |
max_grad_norm | float | 1.0 | 梯度裁剪阈值 |
bf16 | bool | false | bfloat16 混合精度 |
fp16 | bool | false | float16 混合精度 |
pure_bf16 | bool | false | 纯 bfloat16 |
gradient_checkpointing | bool | false | 梯度检查点 |
max_length | int | null | 最大长度 |
packing | bool | false | 序列打包 |
neftune_noise_alpha | float | 0.0 | NEFTune 噪声参数 |
5.4 输出与保存参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
output_dir | str | 必填 | 输出目录 |
logging_steps | int | 10 | 日志记录间隔 |
save_steps | int | 500 | 保存检查点间隔 |
save_total_limit | int | null | 最多保存检查点数 |
save_strategy | str | steps | 保存策略:steps/epoch/no |
overwrite_output_dir | bool | false | 覆盖输出目录 |
save_only_model | bool | false | 仅保存模型权重 |
plot_loss | bool | false | 绘制损失曲线 |
report_to | str | null | 报告工具:wandb/tensorboard/none |
5.5 评估参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
val_size | float | 0.0 | 验证集比例 |
eval_dataset | str | null | 评估数据集 |
eval_strategy | str | no | 评估策略 |
eval_steps | int | 500 | 评估间隔 |
eval_on_start | bool | false | 训练开始时评估 |
load_best_model_at_end | bool | false | 结束时加载最佳模型 |
metric_for_best_model | str | loss | 最佳模型指标 |
greater_is_better | bool | false | 指标越大越好 |
5.6 优化器参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
optim | str | adamw_torch | 优化器 |
weight_decay | float | 0.0 | 权重衰减 |
adam_beta1 | float | 0.9 | Adam beta1 |
adam_beta2 | float | 0.999 | Adam beta2 |
adam_epsilon | float | 1e-8 | Adam epsilon |
max_grad_norm | float | 1.0 | 最大梯度范数 |
5.7 高级参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
flash_attn | str | auto | Flash Attention:auto/fa2/sdpa/none |
shift_attn | bool | false | 移位注意力 |
rope_scaling | str | null | RoPE 缩放:linear/dynamic |
resize_vocab | bool | false | 调整词表大小 |
use_unsloth | bool | false | 使用 Unsloth 加速 |
use_galore | bool | false | 使用 GaLore 优化器 |
use_apollo | bool | false | 使用 APOLLO 优化器 |
use_badam | bool | false | 使用 BAdam 优化器 |
use_pissa | bool | false | 使用 PiSSA 初始化 |
use_moslora | bool | false | 使用 MoSLoRA |
use_dora | bool | false | 使用 DoRA |
loraplus_lr_ratio | float | null | LoRA+ 学习率比例 |
create_new_adapter | bool | false | 创建新适配器 |
merge_adapter | bool | false | 合并适配器 |
6. 各阶段训练配置
6.1 监督微调 (SFT)
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 8
lora_alpha: 16
lora_target: all
dataset: alpaca_gpt4_zh
template: qwen
cutoff_len: 2048
per_device_train_batch_size: 2
gradient_accumulation_steps: 4
learning_rate: 5e-5
num_train_epochs: 3
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true6.2 预训练 (PT)
stage: pt
do_train: true
finetuning_type: lora
# 预训练使用纯文本数据
dataset: wiki_text
template: default
cutoff_len: 2048
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 2e-4
num_train_epochs: 16.3 奖励模型训练 (RM)
stage: rm
do_train: true
finetuning_type: lora
# RM 需要偏好数据
dataset: comparison_gpt4
template: llama3
# 使用 SFT 后的模型作为基础
model_name_or_path: saves/llama3-8b/lora/sft6.4 PPO 强化学习
stage: ppo
do_train: true
finetuning_type: lora
# PPO 需要奖励模型
reward_model: saves/llama3-8b/lora/rm
ppo_epochs: 4
ppo_buffer_size: 1
ppo_target: 6.06.5 DPO 直接偏好优化
stage: dpo
do_train: true
finetuning_type: lora
# DPO 需要偏好数据(chosen/rejected)
dataset: dpo_en_demo
template: llama3
# DPO 特有参数
dpo_beta: 0.1
dpo_loss: sigmoid # sigmoid/ipo/kto_pair/simpo
label_smoothing: 0.06.6 KTO 优化
stage: kto
do_train: true
finetuning_type: lora
# KTO 需要二元反馈数据
dataset: kto_en_demo
template: llama3
# KTO 特有参数
desirable_weight: 1.0
undesirable_weight: 1.07. 模型导出与部署
7.1 合并 LoRA 权重
llamafactory-cli export --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --adapter_name_or_path saves/llama3-8b/lora/sft --template llama3 --export_dir merged_model --export_size 2 --export_device cpu7.2 量化导出
llamafactory-cli export --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --adapter_name_or_path saves/llama3-8b/lora/sft --template llama3 --export_dir merged_gguf --export_quantization_bit 4 --export_quantization_dataset data/c4_demo.json7.3 启动 API 服务
# 使用 LoRA 适配器启动
llamafactory-cli api --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --adapter_name_or_path saves/llama3-8b/lora/sft --template llama3
# 访问 http://localhost:8000/docs 查看 API 文档7.4 启动 CLI 聊天
llamafactory-cli chat --model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct --adapter_name_or_path saves/llama3-8b/lora/sft --template llama38. WebUI 使用指南
8.1 启动 WebUI
# 本地启动
llamafactory-cli webui
# 指定端口和监听地址
GRADIO_SHARE=1 llamafactory-cli webui --server_name 0.0.0.0 --server_port 7860
# 使用 Docker
docker run --gpus all -p 7860:7860 hiyouga/llama-factory:latest8.2 WebUI 功能模块
| 模块 | 功能 |
|---|---|
| Train | 配置并启动训练 |
| Evaluate & Predict | 模型评估和批量预测 |
| Chat | 与模型对话测试 |
| Export | 模型导出和合并 |
8.3 WebUI 配置示例
- 选择模型: 在"模型名称"下拉框选择或输入模型路径
- 配置微调方法: 选择 LoRA/QLoRA/Full/Freeze
- 配置数据集: 选择已注册的数据集
- 设置训练参数: 学习率、轮数、批次大小等
- 点击预览数据集: 确认数据格式正确
- 开始训练: 点击"开始"按钮
9. 常见问题与排查
9.1 OOM(显存不足)
解决方案:
- 减小
per_device_train_batch_size(设为 1) - 增大
gradient_accumulation_steps - 减小
cutoff_len(如 1024 或 512) - 启用
gradient_checkpointing: true - 使用 QLoRA(
quantization_bit: 4) - 使用 DeepSpeed ZeRO-3 + CPU Offload
9.2 训练速度过慢
优化建议:
- 增大
per_device_train_batch_size(显存允许时) - 安装 Flash Attention(
pip install flash-attn) - 关闭
gradient_checkpointing(显存充足时) - 使用
bf16而非fp16(Ampere 架构) - 增加
dataloader_num_workers
9.3 loss 不下降或发散
排查步骤:
- 检查学习率是否过大(LoRA 建议 1e-4 ~ 5e-4)
- 检查数据集格式是否正确
- 检查
template是否与模型匹配 - 增加
warmup_ratio(如 0.1) - 减小
lora_rank或增大lora_alpha - 检查数据是否有大量重复或噪声
9.4 模型生成重复内容
解决方案:
# 在推理时设置生成参数
generation_config:
do_sample: true
temperature: 0.7
top_p: 0.9
repetition_penalty: 1.1
max_new_tokens: 5129.5 多卡训练配置
# 指定 GPU
CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train train.yaml
# 使用 DeepSpeed
llamafactory-cli train train.yaml --deepspeed ds_config.json
# 使用 FSDP
torchrun --nnodes 1 --nproc_per_node 4 src/train.py train.yaml9.6 训练中断恢复
# 在配置文件中设置
resume_from_checkpoint: saves/llama3-8b/lora/sft/checkpoint-500附录 A:推荐配置速查表
A.1 消费级显卡 (24GB)
# 7B/8B 模型 LoRA
model_name_or_path: Qwen/Qwen2.5-7B-Instruct
finetuning_type: lora
lora_rank: 16
lora_alpha: 32
quantization_bit: null # 或 4 用于更大模型
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1e-4
bf16: trueA.2 专业级显卡 (48GB)
# 13B 模型 LoRA
model_name_or_path: Qwen/Qwen2.5-14B-Instruct
finetuning_type: lora
lora_rank: 32
lora_alpha: 64
per_device_train_batch_size: 2
gradient_accumulation_steps: 4
learning_rate: 5e-5
bf16: trueA.3 多卡 A100 (80GB × 8)
# 70B 模型全参数微调
model_name_or_path: meta-llama/Meta-Llama-3-70B-Instruct
finetuning_type: full
deepspeed: ds_z3_config.json
per_device_train_batch_size: 4
gradient_accumulation_steps: 2
learning_rate: 2e-5
bf16: true附录 B:CLI 命令汇总
| 命令 | 说明 |
|---|---|
llamafactory-cli train | 训练模型 |
llamafactory-cli chat | 命令行对话 |
llamafactory-cli export | 导出/合并模型 |
llamafactory-cli api | 启动 API 服务 |
llamafactory-cli eval | 评估模型 |
llamafactory-cli webui | 启动 WebUI |
📌 提示: 更多高级功能(多模态训练、MoE 模型、长上下文扩展等)请参考 LLaMA-Factory 官方文档。