LLaMA Factory 简介
LLaMA Factory 是一个简单易用且高效的大型语言模型训练与微调平台。通过它,无需编写复杂代码即可在本地完成上百种预训练模型的微调。其核心特性包括支持多种模型架构(如 LLaMA、Qwen、Yi 等)、丰富的训练算法(SFT、DPO、PPO 等)以及灵活的精度控制(全参数、LoRA、QLoRA 等)。
环境安装与部署
CUDA 配置
使用 GPU 加速前,需确保系统已安装兼容的 CUDA 驱动。建议先查看 NVIDIA 官网确认显卡支持情况。在 Linux 环境下,可通过以下命令检查系统架构与版本:
uname -m && cat /etc/*release
同时需确认 gcc 已安装:
gcc --version
下载并安装 CUDA 12.2 或更高版本时,若之前有旧版本残留,建议先卸载。例如卸载 12.1 版本可执行:
sudo /usr/local/cuda-12.1/bin/cuda-uninstaller
若上述命令不可用,可直接清理目录并重新运行安装脚本。安装完成后,输入 nvcc -V 验证版本号。
LLaMA-Factory 安装
基础环境推荐 Ubuntu 22.04 + Python 3.10 + PyTorch 2.x。创建虚拟环境并安装依赖:
conda create -n llama_factory python=3.10 -y
conda activate llama_factory
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=11.8 -c pytorch -c nvidia
pip install llmtuner
克隆项目并安装框架依赖:
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
若遇到依赖冲突,可尝试 pip install --no-deps -e .。安装成功后,运行 llamafactory-cli version 校验版本,启动 WebUI 界面:
CUDA_VISIBLE_DEVICES=0 GRADIO_SHARE=1 GRADIO_SERVER_PORT=7860 llamafactory-cli webui
如需离线模型,可从 ModelScope 等平台下载,例如:
git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git
Windows 用户需注意 QLoRA 和 FlashAttention-2 的特定依赖包版本,请根据 CUDA 版本选择对应的 wheel 文件安装。
数据准备与格式
所有数据集需放置在 data 目录下,并在 dataset_info.json 中注册。目前支持 Alpaca 和 ShareGPT 格式。
指令监督微调 (SFT)
这是最常见的微调场景。数据集中应包含 instruction(人类指令)、input(人类输入)和 output(模型回答)。system 列用于设定系统提示词,history 列用于多轮对话历史。
示例 JSON 结构:
[
{
"instruction": "计算这些物品的总费用。",
"input": "汽车 - $3000,衣服 - $100,书 - $20。",
"output": "汽车、衣服和书的总费用为 $3120。",
"system": "你是一个助手。",
"history": []
}
]
对于单轮对话,省略 history 即可。在 dataset_info.json 中映射字段:
"数据集名称": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"system": "system",
"history": "history"
}
}
其他数据集类型
- 预训练:仅需
text列,内容为纯文本段落。 - 偏好数据集:用于 DPO/ORPO 训练,需包含
chosen(优质回答)和rejected(劣质回答)。 - KTO 数据集:包含
kto_tag(true/false)表示人类反馈。 - 多模态:图像需
images列,视频需videos列,音频需audios列,数量需与文本中的标记一致。
模型训练与微调
WebUI 操作
进入 WebUI 后,主要配置项包括模型路径、训练阶段(SFT/DPO 等)、微调方法(LoRA/Full)、数据集、学习率及输出目录。点击开始即可自动执行训练任务。
命令行训练
对于更精细的控制,可使用 YAML 配置文件。参考 examples/train_lora/llama3_lora_sft.yaml:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
stage: sft
do_train: true
finetuning_type: lora
lora_target: all
dataset: identity,alpaca_en_demo
template: llama3
cutoff_len: 1024
max_samples: 1000
output_dir: saves/llama3-8b/lora/sft
learning_rate: 1.0e-4
num_train_epochs: 3.0
bf16: true
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
直接运行命令:
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
也可动态追加参数覆盖配置,如调整学习率:
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml learning_rate=1e-5
LoRA 合并与量化
训练完成后,适配器通常以增量形式存在。为了部署方便,建议将 LoRA 权重合并到基座模型中。
合并模型
使用 export 命令,指定原始模型路径和适配器路径:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora
export_dir: models/llama3_lora_sft
export_device: cpu
注意:合并时使用未量化的预训练模型效果更佳。
量化部署
为降低显存占用,可进行 GPTQ/AWQ 等量化处理。配置示例:
export_quantization_bit: 4
export_quantization_dataset: data/c4_demo.json
export_size: 2
量化能显著减少推理延迟,但需预留校准数据集以保证精度。
推理与评估
在线对话
支持 Huggingface 和 vLLM 后端。配置文件只需指定模型路径和模板:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
infer_backend: huggingface
微调模型需额外指定适配器:
adapter_name_or_path: saves/llama3-8b/lora/sft
finetuning_type: lora
启动命令:
llamafactory-cli chat inference_config.yaml
批量推理
针对大量测试集,可调用 API 服务或使用 vLLM 脚本:
python scripts/vllm_infer.py --model_name_or_path path_to_merged_model --dataset alpaca_en_demo
能力评估
通用能力评估(如 MMLU、C-Eval):
llamafactory-cli eval examples/train_lora/llama3_lora_eval.yaml
NLG 生成质量评估(BLEU/ROUGE):
llamafactory-cli train examples/extras/nlg_eval/llama3_lora_predict.yaml
评估参数中可设置 task(任务类型)、lang(语言)、batch_size 等。确保数据集路径正确,并根据显存调整批次大小。


