最推荐的微调工具是 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)及以上。
  • 环境依赖:Bashgit 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

五、 行业微调的三大坑(经验谈)

  1. 显存爆炸: 即使是 7B 模型,如果输入的图片分辨率极高且不做限制,视觉 Token 可能瞬间撑破显存。务必在配置文件中设置 qwen2vl_max_pixels
  2. 视觉遗忘: 如果只微调语言模型部分(LLM),模型可能会丧失对通用物体的识别精度。建议在数据集中掺入 10%-20% 的通用图文数据(如 COCO 数据集)进行“知识保鲜”。
  3. 坐标理解: 如果你的行业需求涉及定位(如:标出肿瘤位置、识别零件坐标),确保你的 Ground Truth 格式与 Qwen2-VL 的归一化坐标一致(通常是 $[0, 1000]$ 范围内的整数)。

结语

微调后的 Qwen2-VL 就像一个“经过专业培训”的员工,它不再只是泛泛而谈,而是能看懂你行业特有的图表、病理片或代码截屏。