基于LLama-Factory的Qwen3大模型Lora微调教程与数据集使用


·居
原创
发布时间: 2025-09-20 17:42:36 | 阅读数 0收藏数 0评论数 0
封面
LLaMA Factory 是一个简单易用、高效灵活的大语言模型(Large Language Model)训练与微调平台。借助该平台,用户无需编写任何代码,即可在本地轻松完成对预训练模型的微调。今天,我们将使用 LLaMA Factory 对 Qwen3-8B 模型进行微调。
1

modelscope

我们使用 ModelScope(魔塔)提供的免费算力资源:点击个人头像进入“个人中心”,选择“我的 Notebook”。在魔塔平台的免费实例中,有两个环境可选 —— PAI-DSW 和阿里云弹性加速计算 EAIS。建议选择 PAI-DSW,因其显存更高、运行速度更快。

2

创建实例

预装镜像选择 Ubuntu 22.04 版本中的任意一个即可。点击左下角的启动创建实例。点击“查看Notebook”进入到控制台,选择Terinal进入到终端。

3

下载llamafactory

拉取llamafactory项目,拉取完成之后,进入文件夹内。

# 拉取LLamafactory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory

下载相关依赖

pip install -e ".[torch,metrics]"

出现环境冲突可以使用

pip install --no-deps -e .
4

LLaMA-Factory 校验

完成安装后,可以通过使用 llamafactory-cli version 来快速校验安装是否成功,出现版本号就说明安装成功了。

llamafactory-cli version
5

数据处理

llamafactory下有一个data目录,其中的dataset_info.json是连接用户自定义数据集与模型训练流程的关键配置文件,dataset_info.json 包含了所有经过预处理的 本地数据集 以及 在线数据集,在其中可以添加我们自己的内容让模型去学习。

其中有两种格式的数据集,分别为Alpaca和ShareGPT,今天主要讲的内容是Alpaca格式。

其中我使用的是指令监督微调,指令监督微调(Instruct Tuning)通过让模型学习详细的指令以及对应的回答来优化模型在特定指令下的表现。

instruction 列对应的内容为人类指令, input 列对应的内容为人类输入, output 列对应的内容为模型回答。下面是一个例子

"alpaca_zh_demo.json"
[
{
"instruction": "计算这些物品的总费用。 ",
"input": "输入:汽车 - $3000,衣服 - $100,书 - $20。",
"output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"
}
]

在进行指令监督微调时, instruction 列对应的内容会与 input 列对应的内容拼接后作为最终的人类输入,即人类输入为 instruction\ninput。而 output 列对应的内容为模型回答。 在上面的例子中,人类的最终输入是:

计算这些物品的总费用。
输入:汽车 - $3000,衣服 - $100,书 - $20

模型的回答是:

汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120
6

模型训练配置文件

LLaMA Factory 的模型训练配置文件统一存放在 examples/ 目录下,涵盖多种训练方式(如 SFT、LoRA、DPO、PPO 等),方便用户根据需求快速选择和修改。

# 创建文件并进行编辑
vim examples/train_lora/qwen3_lora_sft.yaml

# 以下内容写入到文件内
### model
# 使用在线模型时 model_name要和模型社区提供的名称保持一致
# 使用离线模型时 需要输入绝对路径
model_name_or_path: Qwen/Qwen3-8B
# 是否信任模型仓库代码
trust_remote_code: true

### method
# 训练方式 当前为监督微调
stage: sft
# 是否启动训练流程
do_train: true
# 微调方式 lora
finetuning_type: lora
# 控制适配器矩阵的大小 常用值为8 越高占用显存越高
lora_rank: 8
lora_target: all

### dataset
# 数据集
dataset: identity,alpaca_zh_demo
# 对话模版
template: qwen
# 上下文长度 超过会截断
cutoff_len: 2048
# 最大训练样本 比如说你的数据集有10000条数据 但是max_samples设置为1000会随机使用其中的1000条内容
max_samples: 1000
#是否重新预处理数据(即使已有缓存)。设为 true 保证数据更新后重新处理。
overwrite_cache: true
# cpu进程数 16表格并行加速 适合多核机器
preprocessing_num_workers: 16
dataloader_num_workers: 4

### output
# 微调后模型保存的位置 会自行创建
output_dir: saves/qwen3-8b/lora/sft
# 每N步打印一次训练日志(loss、学习率)
logging_steps: 10
# 每N步保存一次输出内容
save_steps: 500
# 是否乘车loss曲线图
plot_loss: true
# true 输出目录已存在会覆盖之前的内容 false不会覆盖 调试阶段适合使用覆盖 生产建议使用false
overwrite_output_dir: true
save_only_model: false
report_to: none # choices: [none, wandb, tensorboard, swanlab, mlflow]

### train
# 每张 GPU 每次前向/反向传播处理的样本数。
# Qwen3-8B + LoRA 在 24GB 显存下通常只能设为 1。若显存不足请保持 1。

per_device_train_batch_size: 1
# 梯度累积步数:每 N 步才更新一次参数 → 等效 batch_size = per_device × gradient_accumulation

# 例:1 × 8 = 8。用于在小 batch 下模拟大 batch,提高训练稳定性
gradient_accumulation_steps: 8

# 学习率。LoRA 微调常用 1e-4 ~ 3e-4;全参微调建议 1e-5 ~ 2e-5
learning_rate: 1.0e-4

# 训练轮数:数据集将被完整遍历多少次。小数据集(<1万条)可设 3~5;大数据集可设 1~2
num_train_epochs: 3.0

# 学习率调度策略。cosine = 余弦退火,学习率从初始值平滑下降到 0,推荐使用
lr_scheduler_type: cosine

# 预热比例:前 N% 的训练步数中,学习率从 0 线性增长到设定值,避免早期震荡
# 0.1 = 前 10% 步数预热,适合大多数任务
warmup_ratio: 0.1

# 是否使用 bfloat16 混合精度训练(节省显存 + 加速)。需 GPU 支持(A100、RTX 3090/4090 等)
# 若显卡不支持(如 V100、T4),请注释此行并启用 fp16: true
bf16: true

# 分布式训练超时时间(毫秒)。单卡训练可忽略;多卡训练设大值避免因 IO 慢导致中断
ddp_timeout: 180000000

# 从哪个 checkpoint 恢复训练。null = 从头开始;可设为 "output_dir/checkpoint-500" 续训
resume_from_checkpoint: null

### eval
# eval_dataset: alpaca_en_demo
# val_size: 0.1
# per_device_eval_batch_size: 1
# eval_strategy: steps
# eval_steps: 500

其中重要的参数有:


model_name_or_path

模型的名称或者地址

stage

训练的方式

template

训练模版

output_dir

训练完成后的结果保存地址

dataset

要给模型的数据,有本身提供的内容也可以上传自己的数据集按照格式即可

learning_rate

学习率,通常设置在1e-5到5e-5之间

num_train_epochs

训练轮次

7

训练模型

# 训练指令
llamafactory-cli train examples/train_lora/qwen3_lora_sft.yaml

初次训练会先下载模型,时间较长后续就不会下载模型。训练完成的模型会保存在'saves/qwen3-8b/lora/sft'下。

8

模型推理

#新建文件
vim examples/inference/qwen3_lora_sft.yaml

# 写入以下内容
model_name_or_path: Qwen/Qwen3-8B
# 要写模型训练完的存储路径
adapter_name_or_path: saves/qwen3-8b/lora/sft
template: qwen
infer_backend: huggingface # choices: [huggingface, vllm, sglang]
trust_remote_code: true

#推理指令
llamafactory-cli chat examples/inference/qwen3_lora_sft.yaml
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载