Qwen2.5-VL 多模态模型基于 LLaMA-Factory WebUI 的 LoRA 微调教程
Qwen2.5-VL 多模态模型基于 LLaMA-Factory WebUI 的 LoRA 微调教程。内容涵盖环境搭建、数据集准备、WebUI 训练参数配置、训练监控及故障排除。通过宝可梦图文数据集示例,提供从启动服务到模型评估对话测试的完整流程,帮助开发者在消费级显卡上完成多模态大模型的定制化训练。

Qwen2.5-VL 多模态模型基于 LLaMA-Factory WebUI 的 LoRA 微调教程。内容涵盖环境搭建、数据集准备、WebUI 训练参数配置、训练监控及故障排除。通过宝可梦图文数据集示例,提供从启动服务到模型评估对话测试的完整流程,帮助开发者在消费级显卡上完成多模态大模型的定制化训练。

本教程将详细介绍如何使用 LLaMA-Factory 的图形化 WebUI 界面,对强大的开源多模态模型 Qwen2.5-VL-3B-Instruct 进行 LoRA 微调。LLaMA-Factory 是一个功能强大、简单易用的一站式大模型微调平台,它集成了多种主流的微调方法(如 LoRA、QLoRA、全量微调等),并通过简洁的 WebUI 和命令行工具,极大地降低了个人或小型团队进行模型训练的门槛。我们将以经典的宝可梦图文数据集为例,一步步带您完成从环境搭建到模型评估的全过程。
经过验证,以下是稳定运行所需的配置:
3.10 或 3.11。官方推荐 3.10,本教程也将基于此版本。11.8 或更高版本。这是 PyTorch 2.x 所推荐的稳定版本。首先,我们克隆项目并搭建一个干净的 Python 虚拟环境。
# 1. 克隆项目仓库
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 2. 创建并激活 Conda 虚拟环境
conda create -n llama_factory python=3.10
conda activate llama_factory
# 3. 安装核心依赖
# LLaMA-Factory 提供了便捷的安装指令,包含 torch 和评估指标库
pip install -e .[torch,metrics]
安装完成后,可以通过命令行工具检查版本以确认安装成功。
llamafactory-cli version
如果终端显示欢迎信息和版本号(如 Welcome to LLaMA Factory, version 0.9.x),则说明环境已准备就绪。
对于多模态任务,LLaMA-Factory 需要特定的文件结构。
pokemon_sharegpt/
├── dataset_info.json # 数据集配置文件,告诉 LLaMA-Factory 如何解析数据
├── images/ # 存放所有图片的文件夹
│ ├── pokemon_0001.png
│ ├── pokemon_0002.png
│ └── ...
└── pokemon_sharegpt.json # ShareGPT 格式的图文对话数据
数据文件是一个 JSON 列表,每个元素代表一轮或多轮对话。图像通过特殊占位符 <image> 插入,并通过 images 字段关联。
[{"conversations":[{"from":"human","value":"详细描述一下这只宝可梦。<image>"},{"from":"gpt","value":"这是皮卡丘,一只电属性的宝可梦,拥有黄色的皮毛和红色的脸颊。"}],"images":["images/pokemon_0001.png"]}]
此文件是数据集的'身份证',用于向 LLaMA-Factory 注册。
{"pokemon_multimodal":{"file_name":"pokemon_sharegpt.json","formatting":"sharegpt","columns":{"messages":"conversations","images":"images"}}}
pokemon_multimodal: 您为该数据集指定的唯一名称,稍后将在 WebUI 中选择。file_name: 对话数据文件的名称。formatting: 指定数据格式为 sharegpt。columns: 映射 JSON 文件中的键到 LLaMA-Factory 的内部字段。为了加速模型下载,特别是对于国内用户,建议设置 USE_MODELSCOPE_HUB 环境变量。
# 使用 ModelScope Hub 下载模型(国内网络推荐)
export USE_MODELSCOPE_HUB=1
# 启动 WebUI 服务
llamafactory-cli webui
启动后,终端会显示访问地址,通常是 http://0.0.0.0:7860。在浏览器中打开此地址。
我们将重点关注 Train (训练) 标签页的配置。
模块一:模型与方法
打开页面后,可在语言下拉框中选择 zh,在模型名称中搜索 vl,即可看到相关的多模态模型,选择其一,就会下载指定的模型权重到本地,这里我们选择 Qwen/Qwen2.5-VL-3B-Instruct:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 语言 | zh | 将界面切换为中文,方便操作。 |
| 模型名称 | Qwen/Qwen2.5-VL-3B-Instruct | LLaMA-Factory 会自动从 HuggingFace 或 ModelScope 下载。 |
| 模型路径 | 默认 | 若已有本地模型,可填写绝对路径。 |
| 微调方法 | LoRA | 低秩适应微调,在效果和资源消耗之间取得了最佳平衡,是目前的主流选择。 |
| 量化等级 | none (不量化) | 4-bit 量化可大幅节省显存,但对模型精度有轻微影响。初次训练建议不量化。 |
| 对话模板 | qwen2_vl | 至关重要。必须与模型(Qwen2.5-VL)严格匹配,否则模型无法正确理解输入。 |
模块二:训练设置
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 训练阶段 | Supervised Fine-Tuning | 监督微调,适用于我们准备的'问答'式标注数据。 |
| 数据目录 | ./pokemon_sharegpt | 指向您准备好的数据集文件夹。 |
| 数据集 | pokemon_multimodal | 选中我们刚才在 dataset_info.json 中定义的数据集名称。 |
| 截断长度 | 4096 | 模型能处理的最大序列长度。对于图文模型,建议不低于 2048 以确保图像编码有足够空间。 |
| 学习率 | 2e-4 | 这是 LoRA 微调 3B 级别模型的黄金学习率。如果 Loss 不下降可升至 3e-4,若震荡则降至 1e-4。 |
| 训练轮数 | 3 | 对于中小规模数据集(< 10k 条),3-5 轮通常足够。过多轮次可能导致过拟合。 |
| 批处理大小 | 2 | 每张 GPU 一次处理的样本数。受显存限制,24GB 显存可尝试 2-4,16GB 建议 1-2。 |
| 梯度累积 | 8 | '模拟'大批量训练的技巧。有效批量 = 批处理大小 × 梯度累积。这里有效批量为 16,是公认的稳定值。 |
| 计算类型 | bf16 | 强烈推荐。适用于新架构显卡(A100, RTX 30/40 系),数值稳定性优于 fp16。 |
| 学习率调节器 | cosine | 余弦退火调度器,能使学习率平滑下降,有助于模型收敛到更优的点。 |
| 验证集比例 | 0.1 | 从训练集中划分 10% 的数据用于验证,以监控模型是否过拟合。 |
| 输出目录 | saves/qwen25-vl-pokemon-lora | 保存 LoRA 权重、日志和训练图表的文件夹。 |
| 日志间隔 | 10 | 每训练 10 步在控制台和日志文件中输出一次 Loss 等信息。 |
| 保存间隔 | 500 | 每训练 500 步保存一次模型权重(checkpoint)。 |
| LoRA 秩 | 64 | LoRA 矩阵的维度。越大,可训练参数越多,拟合能力越强,但显存占用也越高。64 是一个很好的平衡点。 |
| LoRA 缩放系数 | 128 | 通常设为 rank 的 2 倍,这是一个广泛验证过的有效配置。 |
loss 值随着训练进行而持续下降,并在训练后期趋于平稳。cosine 调度器从初始值 2e-4 平滑下降。saves/qwen25-vl-pokemon-lora)下会生成 training_loss.png。一条健康的曲线应平滑下降并收敛。| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| CUDA out of memory | 批量大小过大或截断长度过长。 | 1. 降低批处理大小 至 1。 |
3e-4。1e-4。 |
| 训练速度过慢 | 硬件限制或配置问题。 | 1. 确认已安装 flash-attn。训练完成后,切换到 Evaluate 标签页。
saves/... 目录下)。pokemon_multimodal 数据集,设置一个小的最大样本数(如 100)进行快速评估。开始评估:点击 开始。评估完成后会给出 BLEU、ROUGE 等量化指标。
这是检验模型效果最直观的方式。
对比测试:要感受微调带来的提升,可以点击 卸载模型,然后不选择任何适配器,再次点击 加载模型 加载原始的 Qwen2.5-VL-3B-Instruct 模型,用同样的问题进行测试,对比效果差异。
数据增强:可以为同一张图编写不同角度的问题,如:
["这只宝可梦是什么颜色的?<image>", "分析一下它的战斗特点。<image>", "它看起来开心还是难过?<image>"]
16.0。LoRA+ 是一种改进算法,理论上能以相同的成本提升模型性能,值得尝试。q_proj,v_proj,k_proj,o_proj 等,避免改动视觉编码器。通过本教程,您已经掌握了使用 LLaMA-Factory 对先进的多模态大模型进行 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
| LoRA 随机丢弃 |
0.1 |
| 在 LoRA 模块中加入 Dropout,能有效防止过拟合,增强模型泛化能力。 |
| LoRA 作用模块 | all | 将 LoRA 应用于模型的所有线性层。对于初学者来说,这是最简单且效果不错的选择。 |