手把手教你用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,你会看到如下界面:

LLaMa-Factory WebUI

💡 提示:若在本地运行,可用 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-ZhRuozhiba 增强表达能力

第三步:配置参数并启动训练

进入 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 标签页进行对话测试。

  1. 填写基础模型路径:/path/to/Meta-Llama-3-8B-Instruct
  2. 勾选 Load Best Adapter,选择 outputs/llama3-lora-ft
  3. 设置 generation 参数(temperature=0.7, top_p=0.9)
  4. 输入 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 模型吧。

当你看到它用你熟悉的语气回答问题时,那种感觉,就像看着自己的孩子第一次开口说话。

Logo

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

更多推荐