Qwen3 模型 LoRA 微调实战:使用 LLaMA-Factory
使用 LLaMA-Factory 框架对 Qwen3 大模型进行 LoRA 指令微调的完整流程。内容涵盖开发环境安装、数据集格式规范(包括 Alpaca、ShareGPT 及自定义格式)、命令行与可视化界面的训练操作,以及常见问题解决方案。通过配置 dataset_info.json 注册数据并调整超参数,可实现高效的模型适配与优化。

使用 LLaMA-Factory 框架对 Qwen3 大模型进行 LoRA 指令微调的完整流程。内容涵盖开发环境安装、数据集格式规范(包括 Alpaca、ShareGPT 及自定义格式)、命令行与可视化界面的训练操作,以及常见问题解决方案。通过配置 dataset_info.json 注册数据并调整超参数,可实现高效的模型适配与优化。

开源项目地址:https://github.com/hiyouga/LLaMA-Factory 文档:https://llamafactory.readthedocs.io/zh-cn/latest/
# 创建新开发环境
conda create -n llama_factory_Qwen3 python=3.11 -y
conda activate llama_factory_Qwen3
# 下载项目并安装
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
在 git 失败时,清理 DNS 缓存,然后继续:
ipconfig /flushdns
dataset_info.json 包含了所有经过预处理的本地数据集以及在线数据集。如果您希望使用自定义数据集,请务必在 dataset_info.json 文件中添加对数据集及其内容的定义。目前项目支持 Alpaca 格式和 ShareGPT 格式的数据集。
指令监督微调 (Instruct Tuning) 通过让模型学习详细的指令以及对应的回答来优化模型在特定指令下的表现。instruction 列对应的内容为人类指令,input 列对应的内容为人类输入,output 列对应的内容为模型回答。下面是一个例子:
{"instruction":"计算这些物品的总费用。","input":"输入:汽车 - $3000,衣服 - $100,书 - $20。","output":"汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"}
在进行指令监督微调时,instruction 列对应的内容会与 input 列对应的内容拼接后作为最终的人类输入,即人类输入为 instruction\ninput。而 output 列对应的内容为模型回答。如果指定 system 列对应的内容将被作为系统提示词。history 列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。
指令监督微调数据集的最终格式要求如下:
[{"instruction":"人类指令(必填)","input":"人类输入(选填)","output":"模型回答(必填)","system":"系统提示词(选填)","history":[["第一轮指令(选填)","第一轮回答(选填)"],["第二轮指令(选填)","第二轮回答(选填)"]]}]
对于上述格式的数据,dataset_info.json 中的数据集描述应为:
"数据集名称":{"file_name":"data.json","columns":{"prompt":"instruction","query":"input","response":"output","system":"system","history":"history"}}
相比 alpaca 格式的数据集,sharegpt 格式支持更多的角色种类,例如 human、gpt、observation、function 等等。它们构成一个对象列表呈现在 conversations 列中。
下面是 sharegpt 格式的一个例子:
{"conversations":[{"from":"human","value":"你好,我出生于 1990 年 5 月 15 日。你能告诉我今天几岁了吗?"},{"from":"function_call","value":"{\"name\": \"calculate_age\", \"arguments\": {\"birthdate\": \"1990-05-15\"}}"},{"from":"observation","value":"{\"age\": 31}"},{"from":"gpt","value":"根据我的计算,你今天 31 岁了。"}],"tools":"[{\"name\": \"calculate_age\", \"description\": \"根据出生日期计算年龄\", \"parameters\": {\"type\": \"object\"}}]"
注意:其中 human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置。
对于上述格式的数据,dataset_info.json 中的数据集描述应为:
"数据集名称":{"file_name":"data.json","formatter":"sharegpt","columns":{"messages":"conversations","system":"system","tools":"tools"}}
我们用于训练的数据也转换成 Alpaca 格式,然后在 data/dataset_info.json 中进行注册。接下来,我们使用一个具体的例子来说明数据集的使用。该数据集是商品文案生成数据集,原始格式如下,很明显,训练目标是输入 content(也就是 prompt),输出 summary(对应 response)。
{"content":"类型#裤*版型#宽松*风格#性感*图案#线条*裤型#阔腿裤","summary":"宽松的阔腿裤这两年真的吸粉不少,明星时尚达人的心头爱。毕竟好穿时尚,谁都能穿出腿长 2 米的效果宽松的裤腿,当然是遮肉小能手啊。上身便..."}
想将该自定义数据集放到我们的系统中使用,则需要进行如下两步操作:
{"adgen_local":{"file_name":"AdvertiseGen/train.json","columns":{"prompt":"content","response":"summary"}}}
在准备好数据集之后,我们就可以开始准备训练了,我们的目标就是让原来的 LLaMA 模型能够学会我们定义的'你是谁',同时学会我们希望的商品文案的一些生成。这里我们先使用命令行版本来训练,从命令行更容易学习相关的原理。
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
--stage sft \
--do_train \
--model_name_or_path <local_model_path> \
--dataset alpaca_gpt4_zh,identity,adgen_local \
--dataset_dir ./data \
--template qwen3 \
--finetuning_type lora \
--output_dir <local_lora_save_path> \
--overwrite_cache \
--overwrite_output_dir \
--cutoff_len 1024 \
--preprocessing_num_workers 16 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--logging_steps 50 \
--warmup_steps 20 \
--save_steps 100 \
--eval_steps 50 \
--evaluation_strategy steps \
--load_best_model_at_end \
--learning_rate 5e-5 \
--num_train_epochs 5.0 \
--max_samples 1000 \
--val_size 0.1 \
--plot_loss \
--fp16
训练完后就可以在设置的 output_dir 下看到如下内容,主要包含 3 部分:
# 开启可视化操作界面
set CUDA_VISIBLE_DEVICES=0
llamafactory-cli webui
因为选择 huggingface 整不了,选择了 modelscope。
根据需要选择,这里选择的是 LORA。
根据需要,可以选择 LlamaFactory 自带的,也可以用自己的数据集。
根据自己的显卡选。
选模型要根据自己显卡档次选,太大可能加载失败。

先创建个文件夹,然后把绝对路径放 Export 部分导出目录,最上边检查点路径选要合并的那一个。
解决方法:在自己创的环境里换跟自己 CUDA 版本匹配的 Pytorch 版本。链接:PyTorch 官网。下的不成功,就换个下载源。
这个错误是因为你的 GPU 不支持 bf16(bfloat16)格式。这很常见,大多数消费级 NVIDIA 显卡都不支持 bf16(只有 RTX 30/40 系列部分型号支持)。换个适合的,直接在 UI 界面改。
本文介绍了使用 LLaMA-Factory 对 Qwen3 模型进行 LoRA 微调的完整流程,涵盖环境搭建、数据配置、训练方法及问题排查。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online