LLaMA-Factory 是目前开源社区中最流行、最易用的的大语言模型(LLM)微调框架之一。它支持包括 LLaMA、Qwen(通义千问)、ChatGLM、Baichuan、Mistral 等在内的上百种模型,并提供从预训练、指令微调(SFT)、RLHF(PPO/DPO)到模型评估与导出的全链路支持。
在开始之前,请确保您的系统拥有 NVIDIA GPU(建议显存 8GB 以上用于微调小模型,或更高显存用于大模型),并且已安装 CUDA 和 Python 3.8+。
1. 克隆项目代码
Bash
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
2. 安装依赖 建议使用 conda 或 venv 创建虚拟环境,然后执行以下命令安装:
Bash
pip install -e .[torch,metrics]
提示:如果遇到网络问题,可以加上 -i https://pypi.tuna.tsinghua.edu.cn/simple 使用清华源。
LLaMA-Factory 通过 data/dataset_info.json 文件来管理数据集。默认已内置了多种常用数据集(如 Alpaca、Identity 等)。如果您想使用自己的数据,需要按以下格式准备。
1. 数据格式(以 Alpaca 格式为例) 创建一个 my_dataset.json 文件,内容如下:
JSON
[
{
"instruction": "请描述黑洞是什么。",
"input": "",
"output": "黑洞是宇宙空间内存在的一种密度极大的天体,它的引力极强,连光都无法逃脱。"
},
{
"instruction": "翻译以下句子为英文。",
"input": "你好,世界!",
"output": "Hello, World!"
}
]
2. 注册数据集 打开 data/dataset_info.json,在里面添加您的数据集配置:
JSON
"my_custom_data": {
"file_name": "my_dataset.json"
}
LLaMA-Factory 提供了一个非常直观的 Gradio 可视化界面,让您可以不用写代码就能完成微调。
启动 WebUI:
Bash
llamafactory-cli webui
运行后,在浏览器中打开 http://localhost:7860,您可以在界面上进行以下操作:
Qwen/Qwen1.5-7B-Chat)和对应的模板(Template)。my_custom_data。lora 或 qlora(显存小的话推荐 QLoRA)。如果您需要在服务器后台挂机训练或编写脚本,命令行是更好的选择。
1. 单卡 LoRA 指令微调 (SFT) 示例 创建一个 train.sh 文件并运行:
Bash
llamafactory-cli train \
--stage sft \
--do_train \
--model_name_or_path Qwen/Qwen1.5-7B-Chat \
--dataset my_custom_data \
--dataset_dir ./data \
--template qwen \
--finetuning_type lora \
--lora_target q_proj,v_proj \
--output_dir ./saves/Qwen-7B/lora/sft \
--overwrite_cache \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 1000 \
--learning_rate 5e-5 \
--num_train_epochs 3.0 \
--fp16
核心参数说明:
--stage: 训练阶段(pt=预训练, sft=指令微调, rm=奖励模型, dpo=偏好对齐)。--template: 必须与您选择的基座模型对应(非常重要,否则会破坏模型的对话能力)。--finetuning_type: 选 lora 即可。全量微调选 full。--output_dir: 训练后 LoRA 权重的保存路径。训练完成后,您可以加载微调后的 LoRA 权重进行测试。
通过命令行进行对话:
Bash
llamafactory-cli chat \
--model_name_or_path Qwen/Qwen1.5-7B-Chat \
--adapter_name_or_path ./saves/Qwen-7B/lora/sft \
--template qwen \
--finetuning_type lora
LoRA 训练得到的是“补丁”权重,如果要在 vLLM、Ollama 等推理框架中使用,通常需要将 LoRA 权重与原模型合并为一个完整的模型。
Bash
llamafactory-cli export \
--model_name_or_path Qwen/Qwen1.5-7B-Chat \
--adapter_name_or_path ./saves/Qwen-7B/lora/sft \
--template qwen \
--finetuning_type lora \
--export_dir ./models/Qwen-7B-SFT-Merged \
--export_size 2 \
--export_device cpu