internvl3 微调记录
2025-9-1
| 2025-10-5
字数 1462阅读时长 4 分钟
type
status
date
slug
summary
tags
category
icon
password

环境安装

推理环境安装

如果flash-attn==2.3.6安装失败,可能是flash-attn找不到对应nvcc版本。
如果版本不对,重新安装nvcc
安装后续库

微调环境安装

注意的是,可以将xtuner的分支改到最新tag,这样pip安装才会出现可执行的xtuner。
建议微调和推理环境分开。
 

数据集处理

如果需要输入坐标信息,可以将坐标信息归一化到[0, 1000]之间的整型,token中有0到1000的数字,这样文本的token数量不会太多

微调

关键设计决策(先说结论)

  1. 视觉 LoRA 而非解冻全部视觉参数:你当前 freeze_visual_encoder=True,配合 visual_encoder_lora 是正确的方向 —— 冻结 base 参数、只训练 LoRA adapter,适合少样本场景且显存友好。
  1. target_modules 用子串匹配就够:你列出的模块里,视觉的 attention 是 attn.qkv,mlp 是 mlp.fc1/fc2,用 ["attn.qkv","mlp.fc1","mlp.fc2"] 即可匹配所有层。
  1. 少样本时减小 LoRA 容量、再加低 LR 与更多 epoch:把视觉 LoRA 的 r / alpha 调小(例如 r=32, alpha=32),学习率降到 1e-5 ~ 5e-6,并增加 epoch(3~10,视样本数)或用更多 gradient_accumulation_steps
  1. 把 bbox 显式写入训练 prompt:训练样本的文本(context)应包含 bbox 信息(格式化为 boxes: [[x1,y1,x2,y2,label], ...] 或自然语言描述),模型依据该 context 学习把视觉特征和 bbox 对齐。
  1. 数据量小 -> 强正则/数据增强/重复采样:对图片做轻微 augment(翻转/色彩 jitter)、使用重复采样或 upsampling 生成足够 batch。
 
遇到问题
报错信息
明白了,你 _llm_forward 里已经把视觉模型和语言模型都混合在一起了,但问题是 PEFT 封装会把 input_idsattention_mask 等参数传给整个模型,导致 InternVisionModel.forward() 报错。
核心思路是:视觉模型只接受 pixel_values,语言模型只接受 inputs_embedsinput_ids,两者不要混用参数
你可以这样改 _llm_forward
✅ 改动重点:
  1. 视觉模型单独前向,不传 input_idsattention_mask 等。
  1. 文本模型单独使用 inputs_embeds 前向。
  1. LoRA/PEFT 调用 _llm_forward 时不会把不需要的参数传给视觉模型。

推理

对于多边形的推理和微调
  • LoRA 可以让模型学会 polygon 推理,但需要大量高质量 polygon 标注 + 格式约束,且训练难度高。
  • 更实用的办法 是用 InternVL3 做 bbox 检测,再接 SAM / 语义分割网络 → polygon。
  • 如果你只是想快速落地,建议优先用 检测 + SAM + mask2polygon,而不是直接逼 LLM 输出 polygon。
Fuji Lake HotelUbuntu 批量压缩文件夹
Loading...