入门文档

分类: LM大模型&微调

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"
  }

三、 使用 WebUI 进行可视化微调(推荐新手)

LLaMA-Factory 提供了一个非常直观的 Gradio 可视化界面,让您可以不用写代码就能完成微调。

启动 WebUI:

Bash

llamafactory-cli webui

运行后,在浏览器中打开 http://localhost:7860,您可以在界面上进行以下操作:

  1. Model name/path:选择模型(如 Qwen/Qwen1.5-7B-Chat)和对应的模板(Template)。
  2. Dataset:选择您刚才注册的 my_custom_data
  3. Finetuning method:选择 loraqlora(显存小的话推荐 QLoRA)。
  4. Training parameters:设置批次大小(Batch size)、学习率(Learning rate)和训练轮数(Epochs)。
  5. 点击底部的 Start 即可开始训练。界面会实时显示 Loss 曲线。

四、 使用命令行 (CLI) 进行微调(推荐进阶/生产环境)

如果您需要在服务器后台挂机训练或编写脚本,命令行是更好的选择。

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