跳到主要内容Qwen3-VL-4B-Thinking 多模态垂直微调实战:基于 Llama Factory | 极客日志PythonAI算法
Qwen3-VL-4B-Thinking 多模态垂直微调实战:基于 Llama Factory
多模态大模型垂直微调实战涉及基座选型、数据集构建及训练配置。以 Qwen3-VL-4B-Thinking 为例,演示如何通过 Llama Factory 完成从 Alpaca 到 ShareGPT 的数据转换、云环境部署、LoRA 微调参数设置及模型导出。重点解决结构化 JSON 输出、视觉编码器冻结及长文本处理问题,助力企业实现文档理解的自动化升级。
孤勇者1 浏览 Qwen3-VL-4B-Thinking 多模态垂直微调实战:基于 Llama Factory
一、多模态大模型概述
多模态大模型(Multimodal Large Language Model, MLLM)能够理解并融合文字、图像、声音等多种模态的信息。通用模型虽然具备基础的视觉理解能力,但在特定领域的专业格式和语义上往往缺乏精确认知。
1.1 多模态垂直微调的价值
微调不仅帮助模型'看懂'图像,更能理解图像的语义逻辑。通过微调,模型在特定领域语境下能更准确地解析内容,主要提升以下三方面能力:
- 语义对齐:让模型理解领域专属符号的实际含义。例如医学报告中的"↑"表示指标偏高,而非简单的箭头符号。
- 结构化理解:掌握数据的层级关系与布局规律,直接输出结构化结果(如 JSON)。例如识别财务报表中"利润总额"与其子项的从属关系。
- 视觉稳健性:接触真实场景样本(模糊、倾斜、印章干扰等),提升对低质量图像的识别稳定性。
核心逻辑是从"看懂文字"进阶到"理解业务含义",再到"应对真实环境"。
1.2 微调带来的收益
| 维度 | 核心收益 | 具体表现 |
|---|
| 输出标准化 | 稳定可控的结构化输出 | 摆脱生成式模型的随机性,持续输出 JSON/表格等标准格式 |
| 系统简化 | 降低工程维护成本 | 替代传统正则匹配与版面解析规则,减少硬编码逻辑 |
| 泛化适配 | 增强多版本兼容能力 | 单模型覆盖同类文件的多版式变体,弱化模板依赖 |
| 数据治理 | 提升全流程数据质量 | 作为视觉识别入口,为下游提供格式统一、字段规范的数据 |
| 生态集成 | 无缝衔接业务系统 | 直接对接知识库构建、RAG 检索、数据分析等应用场景 |
本质转变是从"人工规则驱动"转向"模型能力驱动",将文档理解的复杂性内化为模型参数。
二、基座模型选择策略
选型需综合考虑输入数据模态、目标任务及部署需求。以下是主流多模态模型的对比参考:
| 模型 | 模态支持 | 中文能力 | 可私有化 | 代表优势 | 不适合的场景 |
|---|
| GPT-4o / GPT-4.5 | 文本、图片、语音、视频 | 强 | 否 | 全模态理解、推理最强 | 不能本地化、成本高 |
| Gemini 2.0 Pro | 文本、图片、音频、视频 | 中等偏强 | 否 | 超长上下文、视频摘要顶尖 | 中文 OCR 仍有短板 |
| Claude 3.5 Sonnet | 文本、图片、PDF、图表 | 中等 | 部分 | 代码理解最强、安全性高 | 无原生视频/音频理解 |
| Qwen3-VL | 文本、图片、图表、文档 |
| DeepSeek-OCR | 图片→文本、文档解析 | 强 | ✅ | OCR 精度极高、成本低 | 通用视觉理解有限 |
| InternVL3 | 文本、图片、表格、视频 | 强 | ✅ | 国产生态完善、医疗影像强 | 推理速度较慢 |
- 企业级中文文档处理:首选 Qwen3-VL,备选 Kimi k1.5。
- 代码 + 文档混合场景:Claude 3.5 Sonnet 或 GPT-4o。
- 开源可商用:Qwen3-VL 或 InternVL3。
- 端侧/边缘部署:Qwen3-VL-Mobile。
遵循"场景适配优先"原则,避免盲目追求性能指标而忽视落地可行性。
三、Qwen3-VL-4B-Thinking 微调实战
本章节以 Llama Factory 为例,演示如何完成从数据集制作到模型导出的完整流程。
3.1 数据集制作
我们需要构建包含图片和对应指令的数据集。推荐使用 Easy DataSet 工具辅助构建,将图片导入后配置问题模版。
请仔细分析图片中的表单,提取所有字段及其对应值,按照表单的逻辑结构组织成层次化的 JSON 格式返回。要求:1. 识别并提取表单中的所有字段和对应值;2. 根据表单的实际结构,将相关字段归类到适当的子对象中;3. 确保键名清晰准确;4. 生成严格的 JSON 格式,不含任何额外文本;5. 仅返回 JSON 内容。
导出时选择 Alpaca 格式,注意手动批量替换图片路径(如将 /images/... 替换为 images/...),因为不同训练框架对路径的处理方式不同。
[
{
"instruction": "请仔细分析图片中的表单...",
"input": "",
"output": "{\n \"基本信息\": { ... }\n}",
"images": ["images/zh_train_99.jpg"]
}
]
为了适配 Llama Factory 的训练要求,建议将数据转换为 ShareGPT 格式。这里提供一个转换脚本,实际运行时请注意缩进和编码。
""" Convert Alpaca format to ShareGPT format for multimodal training."""
import json
import sys
def convert_alpaca_to_sharegpt(input_file, output_file):
with open(input_file, 'r', encoding='utf-8') as f:
data = json.load(f)
converted = []
for item in data:
instruction = item.get('instruction', '')
input_text = item.get('input', '')
user_content = instruction
if input_text:
user_content += '\n' + input_text
user_content = '<image>\n' + user_content
assistant_content = item.get('output', '')
messages = [
{'role': 'user', 'content': user_content},
{'role': 'assistant', 'content': assistant_content}
]
converted_item = {
'messages': messages,
'images': item.get('images', [])
}
converted.append(converted_item)
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(converted, f, ensure_ascii=False, indent=2)
print(f"Converted {len(converted)} items from {input_file} to {output_file}")
if __name__ == '__main__':
if len(sys.argv) != 3:
print("Usage: python convert_to_sharegpt.py <input_file> <output_file>")
sys.exit(1)
convert_alpaca_to_sharegpt(sys.argv[1], sys.argv[2])
[
{
"messages": [
{"role": "user", "content": "<image>\n请仔细分析图片中的表单..."},
{"role": "assistant", "content": "{\n \"基本信息\": { ... }\n}"}
],
"images": ["images/zh_train_99.jpg"]
}
]
3.2 实验平台与环境配置
建议使用云算力服务租用单卡 A800 进行实验。环境配置步骤如下:
-
网络加速:临时修改 DNS 以提升下载速度(重启后失效)。
sudo vim /etc/resolv.conf
nameserver 100.90.90.90
nameserver 100.90.90.100
-
安装 Conda 环境:
cd ~
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
-
创建虚拟环境并安装 Llama Factory:
conda create --name llama_factory python==3.11
conda activate llama_factory
git clone --depth 1 https://github.com/hiyouga/LlamaFactory.git
cd LLaMA-Factory
pip install -e .
pip install -r requirements/metrics.txt
pip install -r requirements/swanlab.txt
llamafactory-cli version
-
下载基座模型:
mkdir base_model
cd base_model
pip install modelscope
modelscope download --model Qwen/Qwen3-VL-4B-Thinking --local_dir ./Qwen3-VL-4B-Thinking
3.3 数据集上传与注册
将转换好的 JSON 文件上传至 ~/LLaMA-Factory/data 目录,并在同级新建 images 文件夹存放图片资源。目录结构应如下:
data/
├── dataset_info.json
├── qwen3_vl_4B_train_converted.json
├── images/
│ └── zh_train_99.jpg
└── convert_to_sharegpt.py
在 dataset_info.json 中注册数据集信息,确保字段映射正确:
{
"qwen3_vl_4B_train": {
"file_name": "qwen3_vl_4B_train_converted.json",
"formatting": "sharegpt",
"columns": {
"messages": "messages",
"images": "images"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant"
}
}
}
3.4 启动 WebUI 与访问
cd LLaMA-Factory
nohup llamafactory-cli webui > webui.log 2>&1 &
若不想暴露公网 IP,可通过 SSH 客户端的内网穿透功能访问本地服务。编辑代码建议使用远程 IDE 工具连接服务器目录。
3.5 关键训练参数配置
在 WebUI 中选择预览命令并保存配置。以下是核心参数说明及推荐配置:
llamafactory-cli train \
--stage sft \
--do_train True \
--model_name_or_path base_model/Qwen3-VL-4B-Thinking \
--preprocessing_num_workers 16 \
--finetuning_type lora \
--template qwen3_vl \
--flash_attn auto \
--dataset_dir data \
--dataset qwen3_vl_4B_train \
--cutoff_len 2048 \
--learning_rate 5e-05 \
--num_train_epochs 30.0 \
--max_samples 100000 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--max_grad_norm 1.0 \
--logging_steps 5 \
--save_steps 100 \
--warmup_steps 0 \
--packing False \
--enable_thinking True \
--report_to none \
--use_swanlab True \
--output_dir saves/Qwen3-VL-4B-Thinking/lora/train_2026-02-28-17-55-16 \
--bf16 True \
--plot_loss True \
--trust_remote_code True \
--ddp_timeout 180000000 \
--include_num_input_tokens_seen True \
--optim adamw_torch \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0 \
--lora_target all \
--freeze_vision_tower True \
--freeze_multi_modal_projector True \
--image_max_pixels 589824 \
--image_min_pixels 1024 \
--video_max_pixels 65536 \
--video_min_pixels 256 \
--swanlab_project qwen3vl-4B-ft \
--swanlab_run_name qwen3vl-4B-ft \
--swanlab_workspace xxx \
--swanlab_mode cloud
--stage sft:监督微调阶段。
--finetuning_type lora:使用 LoRA 技术,节省显存。
--template qwen3_vl:指定 Qwen3-VL 的对话模板。
--enable_thinking True:启用思考模式,保留 CoT 能力。
--freeze_vision_tower True:冻结视觉编码器,只训练语言部分,适合特定任务微调。
--bf16 True:使用 BF16 混合精度,加速计算且稳定。
--lora_rank 8:LoRA 秩设为 8,平衡参数量与效果。
训练过程约需 1 小时,可通过实验跟踪工具查看 Loss 曲线变化。
3.6 模型效果评估
训练完成后,加载检查点进行测试。上传图片并输入与训练一致的问题,观察输出是否符合预期的 JSON 格式。
请仔细分析图片中的表单,提取所有字段及其对应值,按照表单的逻辑结构组织成层次化的 JSON 格式返回。
- Max Length Token: 1024
- Top-P: 0.7
- Temperature: 0.7
3.7 模型导出
在 WebUI 界面选择导出功能,将微调后的 LoRA 权重合并到基座模型中,即可得到可直接部署的完整模型文件。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online