LLaMA-Factory实战:手把手教你微调专属大模型

在AI应用落地的今天,通用大模型虽然能“说人话”,但真要让它胜任具体工作——比如写商品文案、解答医疗问题或处理法律咨询——往往还是差了点火候。你会发现它回答得模棱两可,缺乏专业性,甚至自相矛盾。这就像请了一位知识渊博的通才来当客服,他什么都懂一点,却说不出你想要的答案。

怎么办?微调(Fine-tuning)是破局的关键。通过在特定数据上训练,我们可以把一个“通才”变成某个领域的“专才”。而在这个过程中,LLaMA-Factory 正逐渐成为开发者手中的利器。

它不是一个简单的工具包,而是一整套开箱即用的解决方案,支持包括 LLaMA、Qwen、ChatGLM、Mistral 等在内的上百种主流模型架构,覆盖全参数微调、LoRA、QLoRA 到强化学习对齐等多种技术路径。更重要的是,它提供了可视化界面和统一命令行接口,让原本复杂的微调流程变得像搭积木一样简单。

本文将以 Qwen-7B-Chat 模型 为例,在单张 RTX 3090(24GB)环境下,带你完整走一遍从环境搭建到模型部署的全流程。我们采用 QLoRA + SFT 的轻量化微调方式,最终实现一个会写电商文案、有明确身份认知的定制化 AI 助手,并将其部署为 API 或本地 Ollama 模型。


环境准备:别让第一步卡住你

再强大的框架也离不开扎实的基础环境。很多初学者失败的原因不是代码写错,而是环境没配好。

GPU 与 CUDA:先确认你的“发动机”正常运转

运行以下命令检查显卡状态:

nvidia-smi

你应该能看到类似输出:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03   Driver Version: 535.129.03   CUDA Version: 12.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On  | 00000000:01:00.0 Off |                  N/A |
| 30%   45C    P8    18W / 350W |   1024MiB / 24576MiB |      5%      Default |
+-------------------------------+----------------------+----------------------+

关键信息:CUDA 版本能被识别,显存充足(至少16GB推荐用于7B级QLoRA任务)。

如果你用的是 Conda,建议创建独立虚拟环境:

conda create -n llama_factory python=3.10
conda activate llama_factory

然后安装 LLama-Factory 主体及其依赖:

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e '.[torch,metrics]'

这个 .[torch,metrics] 安装方式很关键——它会自动拉取 PyTorch、Transformers、Peft、Accelerate 以及 BLEU/Rouge 等评估库,省去手动排查版本冲突的麻烦。

安装完成后务必做两个验证:

第一,PyTorch 是否识别 GPU?

import torch
print(torch.cuda.is_available())           # 应输出 True
print(torch.cuda.get_device_name(0))       # 输出 GPU 名称

如果返回 False,请检查 PyTorch 与 CUDA 驱动是否匹配。国内用户推荐使用清华源或阿里源加速下载。

第二,CLI 命令是否注册成功?

llamafactory-cli train -h

如果能打印出一大串参数说明,说明安装成功。这是后续所有操作的基础。


模型下载与本地验证:别跳过这一步

虽然框架支持直接传入 HuggingFace 模型名自动拉取,但我强烈建议手动下载并本地引用。原因有三:

  1. 网络不稳定可能导致中断;
  2. 多次实验需要重复加载时效率更高;
  3. 更容易复现结果。

以 Qwen-7B-Chat 为例,可通过 ModelScope 下载(适合国内用户):

from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen-7B-Chat')

或者使用 git 克隆:

git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git

下载完成后,不要急着训练,先跑个推理测试看看模型能不能正常工作:

from transformers import AutoModelForCausalLM, AutoTokenizer

model_path = "/path/to/Qwen-7B-Chat"

tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_path,
    device_map="auto",
    trust_remote_code=True
)

response, history = model.chat(
    tokenizer,
    "你好,请介绍一下你自己。",
    history=None
)
print(response)

如果顺利输出一段自我介绍,那恭喜你,模型文件完整且环境兼容。这一步看似多余,实则避免了后期因模型损坏导致训练失败的尴尬。


WebUI 快速体验原始模型能力

在动手改模型之前,先看看它的“出厂设置”表现如何。LLaMA-Factory 提供了一个基于 Gradio 的 Web 聊天界面,启动非常简单:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \
    --model_name_or_path /path/to/Qwen-7B-Chat \
    --template qwen

访问 http://localhost:7860 即可进入交互页面。

这里有个小技巧:可以把常用参数写成 YAML 文件复用。例如创建 examples/inference/qwen.yaml

model_name_or_path: /path/to/Qwen-7B-Chat
template: qwen

之后只需一行命令即可启动:

llamafactory-cli webchat examples/inference/qwen.yaml

你可以试着问它:“你是谁?”、“帮我写一段春季女装推广语”等问题,观察其回答风格和专业度。你会发现,尽管语言流畅,但缺乏个性和业务贴合度——而这正是我们需要微调的原因。


构建你的专属数据集:让模型学会“你是谁”

微调的本质是“喂给模型你想让它学会的东西”。LLaMA-Factory 支持两种主流格式:Alpaca 和 ShareGPT。本例采用 Alpaca 格式,结构清晰:

{
  "instruction": "用户指令",
  "input": "上下文输入(可选)",
  "output": "期望回复"
}

示例一:身份认知训练

我们希望模型记住自己叫 SmartBot,是由 E-commerce AI Lab 开发的电商助手。

原始模板 data/identity.json 如下:

{
  "instruction": "Who are you?",
  "output": "I am {{name}}, developed by {{author}}."
}

使用 sed 替换变量:

sed -i 's/{{name}}/SmartBot/g' data/identity.json
sed -i 's/{{author}}/E-commerce AI Lab/g' data/identity.json

替换后变为:

{
  "instruction": "Who are you?",
  "output": "I am SmartBot, developed by E-commerce AI Lab."
}

该数据已在 data/dataset_info.json 中注册为 identity,无需额外操作。

示例二:商品文案生成(adgen_local)

假设你有一批 JSONL 格式的数据,每条包含商品属性和对应的描述文案:

{"content": "风格#复古*材质#棉麻*适用季节#春秋", "summary": "这件复古风棉麻衬衫非常适合春秋穿着……"}

目标是让模型根据 content 自动生成 summary。

步骤如下:

  1. 将数据复制到项目目录:
cp your_adgen_data.jsonl data/adgen_local.json
  1. 编辑 data/dataset_info.json,添加字段映射配置:
"adgen_local": {
    "file_name": "data/adgen_local.json",
    "columns": {
        "instruction": "content",
        "output": "summary"
    },
    "tag": "sft"
}

这样系统就知道如何将原始字段转换为训练所需的 instruction-output 对。


开始微调:用 QLoRA 实现高效训练

现在进入核心环节。我们将使用 QLoRA 技术进行指令微调(SFT)。相比全参微调动辄 80GB 显存的需求,QLoRA 只需约 14~16GB 显存即可完成 7B 模型的训练,极大降低了硬件门槛。

完整训练命令如下:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
    --stage sft \
    --do_train \
    --model_name_or_path /path/to/Qwen-7B-Chat \
    --dataset identity,adgen_local \
    --dataset_dir ./data \
    --template qwen \
    --finetuning_type lora \
    --lora_target q_proj,v_proj \
    --output_dir ./saves/Qwen-7B/lora/sft \
    --overwrite_cache \
    --overwrite_output_dir \
    --cutoff_len 1024 \
    --preprocessing_num_workers 16 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 8 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 50 \
    --eval_steps 25 \
    --evaluation_strategy steps \
    --load_best_model_at_end \
    --learning_rate 3e-4 \
    --num_train_epochs 3.0 \
    --max_samples 1000 \
    --val_size 0.1 \
    --plot_loss \
    --fp16 \
    --quantization_bit 4

几个关键点值得强调:

  • --quantization_bit 4 是启用 QLoRA 的核心,表示主干权重进行 4-bit 量化;
  • --lora_target q_proj,v_proj 表示只在注意力机制中的 query 和 value 投影层插入 LoRA 适配器,这是目前最常用的配置;
  • --plot_loss 会在训练结束后自动生成损失曲线图 loss.png,方便直观判断收敛情况;
  • --val_size 0.1 自动划分 10% 数据作为验证集,无需手动拆分。

训练过程中你会看到 loss 逐步下降,理想情况下最终稳定在 1.5 以下。整个过程在 RTX 3090 上大约需要 1~2 小时,取决于数据量大小。


推理验证:看看模型学到了什么

训练完成后,最激动人心的时刻来了——看看你的模型有没有“长大”。

启动 WebUI 并加载 LoRA 权重:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \
    --model_name_or_path /path/to/Qwen-7B-Chat \
    --adapter_name_or_path ./saves/Qwen-7B/lora/sft \
    --template qwen \
    --finetuning_type lora

注意新增的两个参数:
- --adapter_name_or_path: 指定 LoRA 权重路径;
- --finetuning_type lora: 声明使用 LoRA 模式。

此时提问“你是谁?”,模型应回答:“I am SmartBot, developed by E-commerce AI Lab.”
再输入一条商品属性试试:“风格#休闲颜色#藏青适用人群#男士”,看它能否生成一段自然流畅的营销文案。

你也可以用 CLI 模式快速测试:

llamafactory-cli chat examples/inference/qwen_lora.yaml

批量预测与自动评估:用数据说话

人工测试主观性强,我们需要更客观的指标来衡量模型提升。

执行预测任务:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
    --stage sft \
    --do_predict \
    --model_name_or_path /path/to/Qwen-7B-Chat \
    --adapter_name_or_path ./saves/Qwen-7B/lora/sft \
    --dataset adgen_local \
    --dataset_dir ./data \
    --template qwen \
    --finetuning_type lora \
    --output_dir ./saves/Qwen-7B/lora/predict \
    --per_device_eval_batch_size 1 \
    --max_samples 100 \
    --predict_with_generate

运行完毕后会在输出目录生成两个文件:

  • generated_predictions.jsonl: 包含 input、label、prediction 文本;
  • predict_results.json: 包含各项自动计算的指标。

常见文本生成评估指标包括:

指标 含义
BLEU-4 n-gram 精度匹配度,越高越好(最大 100)
ROUGE-1/2/L 基于召回率的摘要质量评分,衡量词汇重叠程度
runtime 总预测耗时(秒)
samples_per_second 平均每秒生成样本数

通常,微调后的模型在目标任务上的 BLEU 和 ROUGE 应显著高于原始模型。如果没提升,可能需要检查数据质量或调整训练参数。


模型合并与导出:打造独立可部署模型

如果你想将 LoRA 权重与原模型融合为一个完整的 .bin 文件,便于后续部署或继续训练,可以使用 export 命令:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \
    --model_name_or_path /path/to/Qwen-7B-Chat \
    --adapter_name_or_path ./saves/Qwen-7B/lora/sft \
    --template qwen \
    --finetuning_type lora \
    --export_dir ./merged_models/qwen-7b-smartbot \
    --export_size 2 \
    --export_device cpu \
    --export_legacy_format false

合并后的模型可以直接用 Transformers 加载:

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("./merged_models/qwen-7b-smartbot")

这对于集成到生产系统特别有用,因为你不再需要维护原始模型 + LoRA 两套路径。


WebUI 图形化操作:告别命令行焦虑

不是所有人都喜欢敲命令。LLaMA-Factory 提供了名为 LlamaBoard 的图形化工作台,整合了训练、推理、评估、导出、API 等全部功能。

启动方式:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui

访问 http://localhost:7860 进入界面,你会看到多个标签页:

  • Train: 可视化配置训练参数,支持预览 CLI 命令;
  • Evaluate: 一键运行 MMLU/CMMLU/C-Eval 等基准测试;
  • Inference: 实时对话测试,支持多轮历史;
  • Export: 图形化完成模型合并;
  • API: 查看 API 调用文档与端点信息。

点击 “Start” 按钮即可开始训练,日志实时滚动显示,极大提升了调试效率。尤其适合团队协作或教学演示场景。


启动 API Server:接入 LangChain/AutoGPT

训练好的模型可以通过内置 API 快速接入外部系统。LLaMA-Factory 支持 OpenAI 兼容接口,这意味着你可以用标准 SDK 调用它:

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli api \
    --model_name_or_path /path/to/Qwen-7B-Chat \
    --adapter_name_or_path ./saves/Qwen-7B/lora/sft \
    --template qwen \
    --finetuning_type lora

服务启动后,使用 OpenAI 客户端调用:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="none"
)

response = client.chat.completions.create(
    model="qwen",
    messages=[{"role": "user", "content": "写一段春季女装推广文案"}]
)
print(response.choices[0].message.content)

提示:若追求更高推理性能,可在合并模型后结合 vLLM 后端使用:

bash --infer_backend vllm --vllm_enforce_eager


基准评测:检验模型的“通识教育”水平

微调不能只专注垂直任务而牺牲通用能力。我们可以通过主流学术评测来检验模型的知识保留程度。

例如运行 MMLU 英文知识测试:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval \
    --model_name_or_path /path/to/Qwen-7B-Chat \
    --adapter_name_or_path ./saves/Qwen-7B/lora/sft \
    --template qwen \
    --task mmlu_test \
    --lang en \
    --n_shot 5 \
    --batch_size 1

输出示例:

Average: 61.2
      STEM: 54.1
Social Sciences: 68.3
   Humanities: 59.7
        Other: 62.8

类似地,可运行 cmmlu_test(中文多学科)、ceval_validation(中国考试题)等任务,全面评估模型泛化能力。理想的微调结果是:在特定任务上大幅提升的同时,通用能力不明显退化。


导出 GGUF 并部署至 Ollama:让模型跑在笔记本上

如果你希望在低资源设备(如 Mac 笔记本)上运行模型,可以将其转换为 GGUF 格式,并通过 Ollama 部署。

步骤一:确保已合并模型

假设路径为 /home/user/merged_models/qwen-7b-smartbot

步骤二:安装 llama.cpp 与 gguf-py

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp/gguf-py
pip install --editable .

步骤三:转换为 GGUF

cd ..
python convert-hf-to-gguf.py /home/user/merged_models/qwen-7b-smartbot

生成文件如 qwen-7b-smartbot.f16.gguf

步骤四:安装 Ollama(Linux)

curl -fsSL https://ollama.com/install.sh | sh

步骤五:创建 Modelfile

FROM ./qwen-7b-smartbot.f16.gguf
TEMPLATE "{{ .System }}{{ .Prompt }}"
PARAMETER temperature 0.7

注册模型:

ollama create qwen-smartbot -f Modelfile

步骤六:运行!

ollama run qwen-smartbot

从此你就可以在没有 GPU 的机器上与自己的定制模型对话了。


这种高度集成的设计思路,正引领着智能应用开发向更可靠、更高效的方向演进。无论你是工程师、创业者还是研究者,都可以借助 LLaMA-Factory 快速打造属于自己的垂直领域 AI 助手。

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐