零代码玩转大模型微调:LLaMA-Factory 全栈实战指南
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.xWindows 用户可直接用官方提供的一键安装包,双击 start_webui.bat 即可。2. 数据准备:把“聊天”变“教材”
2.1 支持格式(三选一)
| 格式 | 文件 | 说明 |
|---|---|---|
| Alpaca | alpaca.json | 指令-输入-输出三元组 |
| ShareGPT | sharegpt.json | 多轮对话 messages |
| OpenAI | chat.json | 原生 {"messages": [...]} |
推荐使用 ShareGPT 格式,可保留多轮上下文。
2.2 微信聊天记录 → 训练集(1 分钟)
- 用 MemoTrace 导出 JSON(已脱敏)
- 一键转换脚本(官方内置):
python scripts/convert_wechat.py \ --json_path wechat.json \ --save_path data/wechat_chat.json \ --min_turns 3- 注册数据集
打开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 1OpenAI 完全兼容,前端只改 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大模型学习代码仓库