Qwen-VL-Series-Finetune
支持 Qwen2-VL/Qwen3-VL/Qwen3.5 全系列微调的开源工具链,覆盖 SFT/Lo
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
支持 Qwen2-VL/Qwen3-VL/Qwen3.5 全系列微调的开源工具链,覆盖 SFT/Lo
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个这样的场景:你的产品团队想要让视觉语言模型(VLM)能够精准识别生产线上的缺陷零件,或者让 AI 能够根据用户上传的发票图片自动完成报销核验。这不再是"大厂专属"的能力——如今,借助开源工具,任何团队都可以在自己的数据上微调出专业级的视觉语言模型。
Qwen-VL-Series-Finetune 正是这样一座"微调工厂"。它由独立开发者 2U1 维护,提供了对阿里通义千问(Qwen)系列视觉语言模型的完整微调支持,涵盖 Qwen2-VL、Qwen2.5-VL、Qwen3-VL、Qwen3.5 全家族。项目 Star 数接近 2000,是目前 GitHub 上最完整的开源 Qwen-VL 微调方案之一。
图1:2U1 组织头像
Qwen-VL 系列是阿里巴巴通义千问团队开源的多模态大模型,在图像理解、文档分析、视觉问答等任务上表现出色。然而,通义千问出厂时是"通用型选手"——它见过海量的图像和文本,但未必懂得你业务场景里的专有术语、特殊标注规则或特定领域的图片风格。
微调(Fine-tuning)就是让模型"专业化"的过程。通过在特定领域的数据(如质检图片、发票、医疗影像)上继续训练,可以让通用模型进化为领域专家。
但问题在于:官方的训练代码往往面向研究者设计,对工程团队不够友好——参数配置复杂、依赖版本混乱、分布式训练需要大量调试。Qwen-VL-Series-Finetune 的出现,正是为了解决这个痛点。
这个项目最核心的价值,在于它提供了一套覆盖主流微调范式的完整脚本体系,开发者无需从零搭建训练流程。
1. 全参数微调(SFT / Supervised Fine-Tuning)
通过 scripts/finetune.sh,可以对整个模型进行全参数训练。脚本基于 DeepSpeed ZeRO-3 分布式训练,支持多 GPU 横向扩展,提供了 zero3.json 和 zero3_offload.json 两套配置——后者额外支持 CPU Offload,适合显存受限的场景。核心参数包括:
--bf16 True:启用 BF16 混合精度训练,在保证数值稳定性的同时节省显存--use_liger_kernel True:集成 LinkedIn 开源的 Liger-Kernel,通过融合算子(Fused Kernels)加速训练、降低显存占用--image_min_pixels / --image_max_pixels:控制输入图像的分辨率范围(需为 32 倍数)2. 参数高效微调(LoRA / DoRA)
全参数微调的代价是显存和计算成本都相当可观。对于资源有限的团队,scripts/finetune_lora.sh 提供了 LoRA(Low-Rank Adaptation)和 DoRA(Weight-Decomposed LoRA)两种轻量级微调方案。LoRA 通过在模型中插入低秩矩阵,大幅减少可训练参数,同时保持微调效果。
3. 偏好对齐训练(DPO / GRPO)
SFT 让模型"模仿"正确答案,而偏好对齐则让模型学会"区分"好坏答案。项目支持 DPO(Direct Preference Optimization)和 GRPO(Group Relative Policy Optimization)两种偏好对齐方法。前者通过对比正负样本对直接优化策略,后者则在 PPO 基础上引入了相对排名奖励,在推理任务上效果显著。
4. 多模态混合数据训练
项目支持在同一个训练批次中混合纯文本数据、图像-文本对和视频-文本数据(--mixed_modality True)。这对于构建"既能看懂图片、也能理解文字"的统一多模态模型至关重要。
5. 视频训练
通过 scripts/finetune_video.sh,支持在视频数据上微调 Qwen-VL,实现视频理解、视频问答等能力。这是 2025 年底新增的重要功能,使得模型不仅能"看图",还能"看片"。
项目采用清晰的模块化结构,核心代码位于 src/ 目录:
| 模块 | 职责 |
|---|---|
src/model/ | 模型加载、配置管理 |
src/dataset/ | 数据集处理、多模态数据拼接 |
src/train/ | SFT 训练入口 |
src/trainer/ | 自定义训练器封装 |
src/loss/ | DPO / GRPO 损失函数 |
src/utils.py | 工具函数 |
src/merge_lora_weights.py | LoRA 权重合并脚本 |
src/serve/ | 推理服务模块 |
scripts/ | 各类训练脚本 + DeepSpeed 配置 |
所有训练脚本通过设置 PYTHONPATH=src 导入项目内部模块,形成"配置驱动"的训练范式——换模型、换数据、换超参数,只需修改脚本中的少量参数。
项目的技术栈非常现代化,核心依赖包括:
优点: 无需 Docker,直接通过 conda 环境或 pip 安装依赖,配置灵活性高。提供了 environment.yaml 和 requirements.txt 两种依赖管理方式。DeepSpeed 配置以 JSON 文件形式外置,方便调整。
挑战: 完整的全参数微调至少需要 8 块高性能 GPU(如 A100 80G),单卡训练只能支持 LoRA 模式。没有提供 Gradio/Streamlit 等 Web UI,推理需要自己封装。训练过程需要手动配置模型下载地址(需预先登录 HuggingFace 获取 access token)。
推荐上手路径:
scripts/finetune_lora.sh 在单卡上跑通流程,验证数据格式src/merge_lora_weights.py 将 LoRA 权重合并回基础模型,再进行推理显存需求高:全参数训练 Qwen2.5-VL-7B 至少需要 4x80G GPU,Qwen3-VL-4B 至少 2x80G,这是硬件门槛。对于没有 GPU 集群的团队,该项目几乎无法使用。
数据格式要求严格:训练数据必须为特定 JSON 格式(包含 image 路径和 text 字段),且多模态混合训练的数据配比需要手动调优,缺乏自动化工具。
缺乏生产级部署方案:项目专注于训练阶段,没有提供模型服务、批量推理或 A/B 测试等生产环节的工具。模型训练完成后,如何高效部署仍是需要自行解决的问题。
Flash Attention 2 兼容性问题:Qwen3.5 系列使用 Flash Attn2 会触发 CUDA 错误,项目文档建议使用 SDPA 替代。这可能会略微增加训练时间和显存占用。
Qwen-VL-Series-Finetune 的出现,让"在自有数据上微调视觉语言模型"这件事,从需要深入理解分布式训练框架的专家工作,变成有一定 Python 基础的工程师就能完成的工程任务。
在开源社区中,它是目前对 Qwen 系列视觉语言模型支持最全面的微调工具链——从 SFT 到 DPO/GRPO,从图像到视频,从 LoRA 到全参数,构成了一个完整的多模态训练工具箱。随着 Qwen3-VL 和 Qwen3.5 系列的加入,这个工具箱还在持续扩展。
如果你正在寻找一个稳定、文档清晰、社区活跃的 Qwen-VL 微调方案,这个项目值得优先考虑。