You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Unsloth的Qwen2.5-VL-Instruct三阶段续训LoRA目标模块设置咨询

三阶段LoRA训练Qwen2.5-VL-Instruct的配置方案

阶段1:仅训练投影器(对齐)

Qwen2.5-VL的投影器模块通常命名为visual_projection(可通过print(model.named_modules())确认具体层级),要仅对其应用LoRA,需:

  1. 冻结视觉编码器和LLM的所有参数
  2. 在LoRA配置中仅指定投影器模块作为target_modules

代码示例:

from unsloth import FastLanguageModel
from peft import LoraConfig

# 加载模型(启用4bit量化加速)
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "Qwen/Qwen2.5-VL-7B-Instruct",
    max_seq_length = 2048,
    load_in_4bit = True,
)

# 冻结视觉编码器和LLM
model.vision_tower.requires_grad_(False)
model.language_model.requires_grad_(False)

# 配置LoRA仅作用于投影器
lora_config = LoraConfig(
    r = 16,
    lora_alpha = 32,
    target_modules = ["visual_projection"],
    lora_dropout = 0.05,
    bias = "none",
    task_type = "CAUSAL_LM",
)

# 应用LoRA
model = FastLanguageModel.get_peft_model(model, lora_config)

阶段2:训练投影器+LLM(预训练)

此阶段需同时对投影器和LLM的关键注意力层应用LoRA,保持视觉编码器冻结:

  1. 仅冻结视觉编码器
  2. target_modules合并投影器模块和LLM的标准LoRA目标模块(Qwen2系列常用q_proj、v_proj,Unsloth提供预设的qwen2目标集合)

代码示例:

from unsloth import FastLanguageModel
from peft import LoraConfig

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "Qwen/Qwen2.5-VL-7B-Instruct",
    max_seq_length = 2048,
    load_in_4bit = True,
)

# 仅冻结视觉编码器
model.vision_tower.requires_grad_(False)

# 配置LoRA作用于投影器+LLM
lora_config = LoraConfig(
    r = 16,
    lora_alpha = 32,
    target_modules = ["visual_projection"] + list(FastLanguageModel.get_target_modules("qwen2")),
    lora_dropout = 0.05,
    bias = "none",
    task_type = "CAUSAL_LM",
)

model = FastLanguageModel.get_peft_model(model, lora_config)

阶段3:训练全部组件(视觉编码器+投影器+LLM,监督微调)

需将视觉编码器的关键层也纳入LoRA范围,无需额外冻结核心组件(Unsloth的4bit量化会自动处理不可训练层):

  1. 无需手动冻结非目标模块
  2. target_modules包含视觉编码器关键层、投影器、LLM目标模块

代码示例:

from unsloth import FastLanguageModel
from peft import LoraConfig

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "Qwen/Qwen2.5-VL-7B-Instruct",
    max_seq_length = 2048,
    load_in_4bit = True,
)

# 配置LoRA作用于全部组件
lora_config = LoraConfig(
    r = 16,
    lora_alpha = 32,
    target_modules = [
        "visual_projection",
        *FastLanguageModel.get_target_modules("qwen2"),  # LLM层
        "vision_tower.encoder.layers.*.self_attn.q_proj",  # 视觉编码器注意力层
        "vision_tower.encoder.layers.*.self_attn.v_proj",
    ],
    lora_dropout = 0.05,
    bias = "none",
    task_type = "CAUSAL_LM",
)

model = FastLanguageModel.get_peft_model(model, lora_config)

实践注意事项

  • 模块名称确认:训练前务必通过for name, module in model.named_modules(): print(name)打印所有模块层级,确保target_modules名称完全匹配
  • 学习率调整:阶段1(仅投影器)建议设为1e-4,阶段2/3可设为2e-5
  • 量化兼容:Unsloth的4bit量化对视觉编码器和投影器同样生效,无需额外配置

内容的提问来源于stack exchange,提问作者rice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:58:20