LLaMA-Factory 大模型高效微调实战指南
背景介绍
在构建任务相关数据时,如果能通过网页界面轻松完成微调(Fine-tuning)操作,将大大减轻开发工作量。2024 年 ACL 会议上,北航与北大合作发表了论文《LLAMAFACTORY: 统一高效微调超百种语言模型》。该项目集成了顶尖的训练效率技术,用户无需编写代码,即可通过网页界面 LLAMABOARD 对上百种语言模型进行个性化微调。
项目发布前已在 GitHub 上获得大量关注,彰显了其在社区中的巨大影响力。

微调界面预览(LLaMA Board)
只需一键启动 WebUI,即可接入 LLaMA Board。这是一个直观的操作面板,允许用户轻松选择数据集、自定义各种参数。体验从预览配置、保存训练设置到加载配置、启动高效训练的无缝流程。界面实时展示训练损失曲线,让用户随时掌握微调进度与效果。


如何准备微调环境?
第一步:安装环境(以 Conda 为例)
# 第 1 步 clone LLaMA-Factory 仓库
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
# 第 2 步 进入目录
cd LLaMA-Factory
# 第 3 步 创建基础环境(推荐 Python 3.10)
conda create -n llama_factory python=3.10
# 第 4 步 激活 conda 环境
conda activate llama_factory
# 第 5 步 安装依赖(清华源加速)
pip install -e .[metrics] -i https://pypi.tuna.tsinghua.edu.cn/simple
可选扩展: 如果需要 DeepSpeed 加速(适用于显存受限场景),请额外安装:
pip install deepspeed==0.14.3
第二步:构造数据
微调数据通常采用 ShareGPT 格式。以下是一个标准的数据集示例:
[
{
"id": "p1",
"system": "你是一个销售小助手,你的任务是邀请程序员购买 AI 大模型课程",
"conversations": [
{
"from": "user",
"value": "你好,你是?"
},
{
"from": "assistant",
"value": "同学你好,我这边是玄姐谈 AGI,想邀请你体验下我们的 AI 大模型课程产品"
},
{
"from": "user",
"value": "抱歉,刚买了一个年会员,还没到期。"
},
{
"from": "assistant",
"value": "不好意思同学,打扰到您了,那晚些时候再给您来电,祝您工作顺利,再见"
}
]
},
{
"id": "p2",
"system": "你是一个销售小助手,你的任务是邀请程序员购买 AI 大模型课程",
"conversations": [
{
"from": "user",
"value": "你们有什么优惠吗?"
},
{
"from": "assistant",
"value": "目前我们有早鸟价,欢迎咨询详情。"
}
]
}
]
第三步:配置数据集信息
进入 LLaMA-Factory/data 目录,找到 dataset_info.json 文件。
在 JSON 字典中添加自己的数据信息:
"my_task": {
"file_name": "finetune_data.json",
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"tools": "id"
},
"tags": {
"role_tag": "from",
"content_tag": "value",
"user_tag": "user",
"assistant_tag": "assistant"
}
}
file_name: 数据文件名,需确保文件位于data目录下。formatting: 数据格式化方式,通常为sharegpt。columns: 映射字段名,根据实际 JSON 结构调整。tags: 角色标签定义,用于区分用户和助手。
开始微调训练
方法一:WebUI 选参训练
这种方式前端界面友好,适合快速验证。
运行命令:
CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli webui
在浏览器中打开本地服务地址,选择模型、数据集及参数后点击启动。
方法二:命令行后台训练
适合生产环境或长时间训练。
export CUDA_VISIBLE_DEVICES=0,1,2,3
llamafactory-cli train ./sft_yaml/my_finetune.yaml
配置文件详解 (my_finetune.yaml)
### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
### method
stage: sft # 监督微调阶段
do_train: true # 开启训练
finetuning_type: full # 全量微调,也可改为 lora 节省显存
deeepspeed: examples/deepspeed/ds_z3_config.json # 使用 ZeRO-3 优化显存
### dataset
dataset: identity,alpaca_en_demo # 指定数据集名称
template: llama3 # 匹配模型模板
cutoff_len: 1024 # 最大截断长度,超过部分将被丢弃
max_samples: 1000 # 限制样本数量,调试时可减小
overwrite_cache: true # 覆盖缓存
preprocessing_num_workers: 16 # 预处理线程数
### output
output_dir: saves/llama3-8b/full/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 2
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: true # 混合精度训练
ddp_timeout: 180000000 # DDP 超时时间
### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500
关键参数说明:
finetuning_type: 推荐使用lora进行微调,可大幅降低显存需求;full为全量更新权重。deepspeed: 若显存不足,可切换至ds_z3_offload_config.json启用 CPU Offload。cutoff_len: 根据显存大小调整,过大会导致 OOM(显存溢出)。
查看训练日志
微调过程完毕后,前往指定的输出目录 (output_dir),在其中审视训练日志。这些记录涵盖关键指标,如训练损失(Loss)与验证损失,帮助全面了解模型学习进展与性能变化。
微调后评估与部署
要更新大模型的适配器,只需简单选取目标模型即可完成配置。经过微调训练得到的大模型,其部署和调用方式与其他预训练大模型保持一致。
推理脚本示例
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"./saves/llama3-8b/full/sft",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("./saves/llama3-8b/full/sft")
prompt = "你好,介绍一下你自己。"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
常见问题排查
- 显存溢出 (OOM):
- 减小
per_device_train_batch_size。 - 启用
deepspeed或切换为lora微调模式。 - 减小
cutoff_len。
- 减小
- 数据格式错误:
- 检查
dataset_info.json中的columns映射是否与数据文件一致。 - 确保 JSON 格式合法,无多余逗号或缺失括号。
- 检查
- 训练不收敛:
- 尝试调整
learning_rate(通常 1e-4 到 5e-5 之间)。 - 增加
num_train_epochs或检查数据质量。
- 尝试调整
总结
LLaMA-Factory 提供了从数据准备、配置管理到训练部署的一站式解决方案。通过合理的参数配置与环境优化,开发者可以高效地完成大模型的定制化微调,满足特定业务场景的需求。

