手把手教你用LLaMa-Factory微调LLaMA3
通过LLaMa-Factory,微调大模型变得简单高效。本文介绍环境搭建、模型准备、数据集处理到实际微调和对话测试的完整流程,适合新手快速上手,无需复杂配置即可完成LLaMA3的本地微调。
手把手教你用LLaMa-Factory微调LLaMA3
在大模型时代,真正决定一个AI助手“好不好用”的,往往不是它的基础能力有多强,而是它是否懂你——懂你的语言风格、业务场景甚至思维方式。而实现这种“懂”,最直接的方式就是微调。
但现实是,哪怕只是跑通一次LoRA微调,也可能被PyTorch版本冲突、CUDA驱动问题、HuggingFace缓存路径混乱等问题拦住去路。更别说还要写数据加载器、配置训练参数、处理分词模板……这些重复性工作,让很多人望而却步。
有没有一种方式,能让普通人也能轻松完成对LLaMA3这类大模型的定制化训练?答案是:有。LLaMa-Factory 正是为此而生。
什么是LLaMa-Factory?
与其说它是一个工具,不如说是一个“大模型微调工厂”——从环境搭建到模型部署,全流程自动化封装。你不需要成为PyTorch专家,也不必手写一行训练代码,就能完成对主流大模型的高效微调。
它的核心优势在于:
- 开箱即用:支持 LLaMA、LLaMA2、LLaMA3、Qwen、Baichuan、ChatGLM、Mistral、Gemma 等100+主流架构。
- 多种微调方式:全参数微调、LoRA、QLoRA、IA³、Adapter 全都支持。
- 可视化WebUI:图形化操作,点击即可启动训练。
- 低资源友好:通过QLoRA + 4-bit量化,24GB显存也能微调8B模型。
- 端到端流程完整:数据预处理 → 训练 → 监控 → 推理测试 → 模型导出,一气呵成。
项目地址:https://github.com/hiyouga/LLaMA-Factory
📌 小贴士:别被名字误导了,LLaMa-Factory 并不只支持 LLaMA 系列。它早已发展为通用型微调平台,对国产模型(如通义千问、百川)也有极佳支持。
环境准备与部署:三步启动WebUI
我们从零开始,确保你能顺利运行整个流程。
1. 克隆项目
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
2. 创建虚拟环境(推荐)
conda create -n llamafactory python=3.10
conda activate llamafactory
3. 安装依赖
LLaMa-Factory 使用可选依赖机制,按需安装组件:
pip install -e ".[torch,metrics]"
如果你使用的是 NVIDIA 显卡并希望启用 CUDA(比如 A10/A100),建议明确指定 PyTorch 版本:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install -e ".[torch,metrics]"
4. 启动Web服务
export CUDA_VISIBLE_DEVICES=0 # 单卡或设置多卡
python src/webui.py --server-name 0.0.0.0 --port 7860
访问 http://你的IP:7860,你会看到如下界面:

💡 提示:若在本地运行,可用
127.0.0.1:7860;远程服务器务必加上--server-name 0.0.0.0开放外网访问。
微调LLaMA3:四步走完全流程
接下来,我们将以 Meta-Llama-3-8B-Instruct 为例,演示如何完成一次完整的指令微调(SFT)。整个过程分为四个关键步骤。
第一步:获取LLaMA3模型
由于 Meta-Llama-3 是授权模型,需先申请下载权限。国内用户推荐通过 ModelScope 下载,速度快且无需翻墙。
git lfs install
git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
或者使用 Hugging Face 官方仓库(需登录并申请权限):
huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct --local-dir ./models/llama3-8b-instruct
⚠️ 注意:请确认已同意 Meta 的许可协议,并仅用于研究或合规用途。
无论哪种方式,最终你都会得到一个包含模型权重的目录,后续在 WebUI 中填入该路径即可。
第二步:准备自定义数据集
LLaMa-Factory 支持标准的 JSON 格式指令数据,每条样本应包含三个字段:
instruction:任务描述input:输入内容(可为空)output:期望输出
例如,创建文件 data/my_custom_data.json:
[
{
"instruction": "解释什么是机器学习",
"input": "",
"output": "机器学习是人工智能的一个分支,旨在让计算机系统通过数据自动学习规律并做出预测或决策。"
},
{
"instruction": "将下面句子翻译成英文",
"input": "今天天气真好",
"output": "The weather is really nice today."
}
]
然后,在 data/dataset_info.json 中注册这个数据集:
"my_custom_data": {
"file_name": "my_custom_data.json"
}
✅ 注意:必须放在顶层
{}内,不要嵌套在其他对象里。
刷新 WebUI 页面后,“Dataset” 下拉菜单中就会出现 my_custom_data。
📂 数据建议:
- 初期可用50~200条小数据快速验证流程
- 中文场景可结合 Alpaca-Zh 或 Ruozhiba 增强表达能力
第三步:配置参数并启动训练
进入 WebUI 的 Training 标签页,填写以下关键参数:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| Model Type | llama3 |
自动识别架构 |
| Model Name Or Path | /path/to/Meta-Llama-3-8B-Instruct |
本地路径 |
| Dataset | my_custom_data |
刚注册的数据集 |
| Template | llama3 |
匹配模型对话模板 |
| Fine Tuning Type | lora |
推荐初学者使用,节省显存 |
| Output Dir | outputs/llama3-lora-ft |
输出目录 |
| Num Train Epochs | 3 |
一般2~5轮足够 |
| Learning Rate | 2e-4 |
AdamW 默认学习率 |
| Batch Size | 4 |
单卡A10G建议≤4 |
| Max Source Length | 512 |
输入最大长度 |
| Max Target Length | 512 |
输出最大长度 |
| Lora Rank | 64 |
LoRA矩阵秩,越大越强但占显存 |
| Lora Dropout | 0.1 |
防止过拟合 |
点击 Start,后台会自动生成类似以下命令并执行:
python src/train_bash.py \
--stage sft \
--do_train \
--model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
--dataset my_custom_data \
--template llama3 \
--finetuning_type lora \
--lora_rank 64 \
--output_dir outputs/llama3-lora-ft \
--num_train_epochs 3 \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_steps 100 \
--logging_steps 10 \
--learning_rate 2e-4 \
--max_grad_norm 1.0 \
--lr_scheduler_type cosine \
--fp16
💡 实际运行时,框架会自动处理 tokenizer 加载、数据 tokenization、LoRA 层注入等细节,完全无需手动干预。
第四步:监控训练过程
训练启动后,WebUI 实时展示:
- 当前 epoch 和 step 进度
- Loss 曲线变化趋势
- 学习率衰减情况
- GPU 显存占用
这些信息对于判断训练是否正常至关重要。比如:
- 如果 loss 下降缓慢,可能是 learning rate 太低;
- 如果 loss 波动剧烈,可能 batch size 太小或学习率太高;
- 如果显存爆了,可以尝试降低 batch size 或启用梯度累积。
训练完成后,输出目录结构如下:
outputs/llama3-lora-ft/
├── adapter_config.json # LoRA 配置
├── adapter_model.bin # 可训练参数(仅 ~300MB)
├── training_args.bin
└── README.md
🎯 关键优势:LoRA 微调只保存增量参数,原始模型不动。这意味着你可以用同一基座模型,叠加多个不同领域的适配器,灵活切换用途。
推理测试:看看你的专属模型表现如何
训练结束,切换到 Inference 标签页进行对话测试。
- 填写基础模型路径:
/path/to/Meta-Llama-3-8B-Instruct - 勾选 Load Best Adapter,选择
outputs/llama3-lora-ft - 设置 generation 参数(temperature=0.7, top_p=0.9)
- 输入 prompt 测试效果
例如提问:
请用中文解释量子纠缠的基本概念
如果一切顺利,你会发现模型的回答不再是冷冰冰的标准答案,而是更贴近你在训练数据中设定的知识风格和表达方式。
✅ 成功标志:回答体现出你注入的领域知识或语气偏好,而不是泛泛而谈。
此外,还可以将 LoRA 权重合并回原模型,生成一个独立可用的“融合模型”,便于部署上线。
python src/export_model.py \
--model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
--adapter_name_or_path outputs/llama3-lora-ft \
--template llama3 \
--output_dir outputs/merged-llama3
之后就可以像加载普通模型一样使用它:
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("outputs/merged-llama3")
进阶玩法:不只是微调,更是生产力工具
LLaMa-Factory 的潜力远不止于基础微调。以下是几个值得尝试的高级功能。
🔹 多卡分布式训练(DeepSpeed/FSDP)
对于更大规模的数据或更高效率的需求,可以启用 DeepSpeed:
deepspeed src/train_bash.py \
--deepspeed ds_config.json \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 16
配合合理的 ds_config.json 配置,可在多卡环境下显著提升吞吐量。
🔹 QLoRA:消费级显卡也能玩转8B模型
如果你只有 RTX 3090/4090(24GB显存),依然可以通过 QLoRA 实现微调。
在 WebUI 中勾选:
- Quantization Bit:
4 - Double Quantization:
True - Compute Dtype:
bf16
这相当于在训练时对模型进行 4-bit 量化,仅保留 LoRA 参数为高精度,极大节省显存。
🔹 模型评估与对比测试
想比较两个微调版本哪个更好?可以用内置的 eval_bash.py 脚本自动打分:
python src/eval_bash.py \
--model_name_or_path outputs/merged-llama3-v1 \
--task truthfulqa_mc2
支持 TruthfulQA、MMLU、BBH 等主流基准测试,帮你科学评估模型能力。
🔹 导出 GGUF 格式用于 CPU 推理
想把模型放到没有GPU的设备上运行?可以导出为 GGUF 格式,供 llama.cpp 使用:
# 先合并模型
python src/export_model.py --model_name_or_path ... --adapter_name_or_path ... --output_dir merged_model
# 转换为 GGUF
python llama.cpp/convert-hf-to-gguf.py merged_model --outtype q4_K_M
之后就能在树莓派、MacBook甚至手机上运行你的定制模型了。
写在最后:为什么LLaMa-Factory值得你花时间掌握?
在过去,微调一个大模型意味着要投入大量工程精力。而现在,LLaMa-Factory 把这一切变得像“搭积木”一样简单。
更重要的是,它降低了实验成本。你可以:
- 快速试错不同的数据组合
- 对比 LoRA vs QLoRA 的性能差异
- 为不同客户定制专属AI助手
- 在有限资源下探索最大可能性
这种敏捷性,正是当前AI应用落地的关键竞争力。
所以,别再停留在“我想做个智能客服”这种想法上了——现在就开始动手,用不到一小时的时间,训练出第一个真正属于你的 LLaMA3 模型吧。
当你看到它用你熟悉的语气回答问题时,那种感觉,就像看着自己的孩子第一次开口说话。
更多推荐

所有评论(0)