最推荐的微调工具是 LLaMA-Factory 或阿里官方的 MS-Swift。下面我将为你梳理一份基于 LLaMA-Factory 的 Qwen2-VL-7B LoRA 微调实战指南。
一、 硬件要求与环境准备
微调 Qwen2-VL-7B 相比普通纯文本模型更吃显存,主要是因为视觉 Token 数量较多。
- GPU 显存:
- 7B LoRA 微调: 建议至少 24GB(如 RTX 3090/4090)。
- 7B 全参数微调: 需要 80GB(如 A100/H800)及以上。
- 环境依赖:Bash
git clone --depth 1 https://github.com/hiyouga/Llama-Factory.git cd Llama-Factory pip install -e ".[torch,metrics,deepspeed]"
二、 关键:数据准备格式
Qwen2-VL 的微调数据需要遵循多模态的 JSON 结构。假设我们要微调一个“电路板缺陷检测”模型:
JSON
[
{
"id": "pcb_check_001",
"images": ["/path/to/pcb_img1.jpg"],
"conversations": [
{
"from": "human",
"value": "<image>\n请检查这张电路板是否有缺陷,并标出位置。"
},
{
"from": "gpt",
"value": "检测到缺陷:在左上角 [234, 150, 450, 300] 处存在焊点桥接。"
}
]
}
]
注意:
<image>占位符必须存在,它代表了视觉 Token 插入的位置。
三、 微调参数配置 (LoRA)
在 Llama-Factory 目录下创建一个 qwen2vl_lora_sft.yaml 配置文件。这是最核心的步骤:
YAML
### 模型与阶段
model_name_or_path: Qwen/Qwen2-VL-7B-Instruct
stage: sft
do_train: true
finetuning_type: lora
### 关键参数:冻结与解冻
# 对于 Qwen2-VL,通常建议只训练语言模型部分或视觉 Projection 层
lora_target: all # 或者指定具体模块,如 q_proj, v_proj
### 数据集
dataset: your_custom_dataset # 在 data/dataset_info.json 中注册
template: qwen2_vl
cutoff_len: 2048
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 8
### 训练超参
per_device_train_batch_size: 2
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: true # 或者 bf16,如果显卡支持
### 分辨率控制 (重点)
# Qwen2-VL 支持动态分辨率,微调时建议限制最大像素以节省显存
qwen2vl_max_pixels: 602112 # 约 776x776
四、 启动微调
使用以下命令启动单卡或多卡微调:
Bash
llamafactory-cli train qwen2vl_lora_sft.yaml
五、 行业微调的三大坑(经验谈)
- 显存爆炸: 即使是 7B 模型,如果输入的图片分辨率极高且不做限制,视觉 Token 可能瞬间撑破显存。务必在配置文件中设置
qwen2vl_max_pixels。 - 视觉遗忘: 如果只微调语言模型部分(LLM),模型可能会丧失对通用物体的识别精度。建议在数据集中掺入 10%-20% 的通用图文数据(如 COCO 数据集)进行“知识保鲜”。
- 坐标理解: 如果你的行业需求涉及定位(如:标出肿瘤位置、识别零件坐标),确保你的 Ground Truth 格式与 Qwen2-VL 的归一化坐标一致(通常是 $[0, 1000]$ 范围内的整数)。
结语
微调后的 Qwen2-VL 就像一个“经过专业培训”的员工,它不再只是泛泛而谈,而是能看懂你行业特有的图表、病理片或代码截屏。