0. 为什么选择 LLaMA-Factory?

维度 原生脚本 LLaMA-Factory
代码量 500+ 行 5 行
学习成本 零代码
硬件门槛 32 GB 显存 18 GB 跑 7B QLoRA
功能覆盖 单一场景 SFT/RLHF/DPO/PPO 全支持
生产特性 自己写 断点续传 + DeepSpeed + 评估可视化

一句话:“傻瓜化”不等于“玩具”,LLaMA-Factory 是 2024 年最成熟的低代码大模型微调框架


1. 安装 & 环境一键脚本(Ubuntu 20.04+)

# 1. 创建独立环境
conda create -n llama_factory python=3.10 -y
conda activate llama_factory

# 2. 拉取最新源码
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory

# 3. 一键安装依赖(国内镜像加速)
pip install -e ".[torch,metrics,deepspeed]" -i https://pypi.tuna.tsinghua.edu.cn/simple

# 4. 验证
llamafactory-cli version
# 输出:Welcome to LLaMA-Factory, version x.x.x

Windows 用户可直接用官方提供的一键安装包,双击 start_webui.bat 即可。


2. 数据准备:把“聊天”变“教材”

2.1 支持格式(三选一)

格式 文件 说明
Alpaca alpaca.json 指令-输入-输出三元组
ShareGPT sharegpt.json 多轮对话 messages
OpenAI chat.json 原生 {"messages": [...]}

推荐使用 ShareGPT 格式,可保留多轮上下文。

2.2 微信聊天记录 → 训练集(1 分钟)

  1. MemoTrace 导出 JSON(已脱敏)
  2. 一键转换脚本(官方内置):
python scripts/convert_wechat.py \
  --json_path wechat.json \
  --save_path data/wechat_chat.json \
  --min_turns 3
  1. 注册数据集
    打开 data/dataset_info.json 新增:
"wechat_chat": {
  "file_name": "wechat_chat.json",
  "formatting": "sharegpt",
  "columns": {
    "messages": "messages"
  }
}

WebUI 可实时预览样本,拒绝盲盒训练。


3. 启动 WebUI:点两下就能训

llamafactory-cli webui
# 浏览器自动打开 http://localhost:7860

界面总览:
模型选择 → ② 数据集选择 → ③ 微调方法 → ④ 超参 → ⑤ 点“开始”

区域 关键选项 推荐值
Model Model name Qwen2.5-7B-Instruct
Model Quantization 4-bit(QLoRA)
Method Finetuning method LoRA
Method LoRA rank 64
Hyper Learning rate 2e-4
Hyper Epochs 3
Data Dataset wechat_chat
Data Max samples 10000(调试先用 1k)

高级开关

  • 梯度检查点:显存再省 30%
  • DeepSpeed:多卡自动并行
  • 打包(packing):序列利用率 +20%

4. 训练:18 GB 显存跑 7B 模型

4.1 单机单卡(RTX 4090 24 GB)

点击 Preview Command 可见完整启动命令:

llamafactory-cli train \
  --model_name_or_path Qwen/Qwen2.5-7B-Instruct \
  --quantization_bit 4 \
  --template qwen \
  --dataset wechat_chat \
  --finetuning_method lora \
  --lora_rank 64 \
  --lora_alpha 128 \
  --output_dir saves/qwen2.5-7b-wechat \
  --per_device_train_batch_size 1 \
  --gradient_accumulation_steps 32 \
  --lr_scheduler_type cosine \
  --logging_steps 10 \
  --warmup_ratio 0.1 \
  --save_steps 500 \
  --learning_rate 2e-4 \
  --num_train_epochs 3 \
  --plot_loss True \
  --fp16 True

耗时:1 万条样本 ≈ 1.5 小时(4090)。

4.2 多机多卡(可选)

打开 Advanced → DeepSpeed → Zero-3,自动加载 ds_config_zero3.json两张 24 GB 卡可跑 13B

4.3 断点续传

训练中断后,重新选择同一个 output_dir,WebUI 会自动检测到 checkpoint-xxx → 点击 Resume 即可续训。


5. 评估 & 对话:肉眼可见的效果

5.1 实时损失曲线

WebUI 内置 TensorBoard 面板,loss / learning_rate / grad_norm 三曲线同步刷新。

5.2 一键对话验证

切到 Chat → Checkpoint path 选择最新保存点 → Load Model
输入:“我失恋了” 对比前后回复:

基座(原版) 微调后(WeChat 版)
失恋是一种常见情绪…(官腔) 抱抱你!上次我分手吃了三桶冰淇淋…(口语化)

肉眼可见“人味”提升

5.3 自动化指标

勾选 Evaluate → BLEU + ROUGE-L,训练结束后自动计算并生成 CSV。


6. 导出 & 上线:三步完成部署

6.1 合并 LoRA 权重

llamafactory-cli export \
  --model_name_or_path Qwen/Qwen2.5-7B-Instruct \
  --adapter_dir saves/qwen2.5-7b-wechat \
  --template qwen \
  --export_dir models/qwen2.5-7b-wechat-merged \
  --export_size 2 \
  --export_legacy_format False

产出 单文件 .safetensors,可直接用 vLLM / TensorRT-LLM

6.2 vLLM 起服务

pip install vllm
python -m vllm.entrypoints.openai.api_server \
  --model models/qwen2.5-7b-wechat-merged \
  --served-model-name qwen-wechat-7b \
  --tensor-parallel-size 1

OpenAI 完全兼容,前端只改 base_url

6.3 Docker 一键封装(可选)

官方镜像:

FROM hiyouga/llama-factory:latest
COPY models/qwen2.5-7b-wechat-merged /app/model
CMD ["llamafactory-cli", "api", "--model_path", "/app/model"]

7. 高级玩法:DPO / RLHF 继续优化

WebUI 切 RLHF → DPO

  • Preference Dataset:准备“好 vs 差”成对数据
  • Beta 参数:0.1(越大越对齐,越保守)
  • -steps:500 步即可见效

实测:DPO 后模型在“安全违规”指标下降 37%


8. 常见坑 & 一键诊断

现象 一键修复
loss 爆炸 >10 学习率开关 → 调小 5×
显存不足 OOM 勾选 Gradient Checkpoint + 4-bit
生成乱码 模板错 Chat → Template 选回 qwen
续传失败 找不到 ckpt 输出目录留空 → 自动检测

9. 总结:LLaMA-Factory微调全流程

数据 JSON → WebUI 点选 → QLoRA 训练 → 损失可视化 → 合并导出 → vLLM 部署

全程零代码18 GB 显存可跑 7B断点续传 + 多卡 + DeepSpeed 全内置。

现在就去 GitHub 拉取 LLaMA-Factory
学习代码仓库 AI大模型学习代码仓库

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐