Qwen3 模型 LoRA 微调实战(基于 LLaMA-Factory)
介绍使用 LLaMA-Factory 框架对 Qwen3 大模型进行 LoRA 指令微调的完整流程。内容包括开发环境搭建、数据集格式说明(Alpaca、ShareGPT 及自定义)、命令行与可视化界面微调操作,以及常见错误排查(如 CUDA 版本、bf16 支持等)。旨在帮助开发者快速上手本地化模型训练。

介绍使用 LLaMA-Factory 框架对 Qwen3 大模型进行 LoRA 指令微调的完整流程。内容包括开发环境搭建、数据集格式说明(Alpaca、ShareGPT 及自定义)、命令行与可视化界面微调操作,以及常见错误排查(如 CUDA 版本、bf16 支持等)。旨在帮助开发者快速上手本地化模型训练。

开源项目地址: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 包含了所有经过预处理的本地数据集以及在线数据集。如果您希望使用自定义数据集,请务必在该文件中添加对数据集及其内容的定义。目前项目支持 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_call 等),构成对象列表呈现在 conversations 列中。
示例:
{"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":"类型#裤*版型#宽松*风格#性感*图案#线条*裤型#阔腿裤","summary":"宽松的阔腿裤这两年真的吸粉不少..."}
需进行两步操作:
data 目录下。data/dataset_info.json 完成注册,定义输入输出映射关系。{"adgen_local":{"file_name":"AdvertiseGen/train.json","columns":{"prompt":"content","response":"summary"}}}
准备好数据集后,开始准备训练。以下使用命令行版本进行训练:
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 下主要包含三部分:
adapter 开头的文件夹:LoRA 保存结果,用于后续推理融合。training_loss 和 trainer_log 等:记录训练过程指标。# 开启可视化操作界面
set CUDA_VISIBLE_DEVICES=0
llamafactory-cli webui
建议选择 ModelScope,HuggingFace 有时连接不稳定。
根据需要选择,本例选择 LoRA。
可选择 LLaMA-Factory 自带的,也可使用自定义数据集。
根据显卡性能选择(如 fp16/bf16)。
根据显卡档次选择模型,显存不足可能导致加载失败。
创建文件夹,在 Export 部分填入绝对路径,检查点路径选择要合并的 checkpoint。
解决方法:在虚拟环境中更换与当前 CUDA 版本匹配的 PyTorch 版本。可参考 PyTorch 官网获取历史版本。
此错误表示 GPU 不支持 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