feat(model): Support Qwen2.5 VL models (#2743)

This commit is contained in:
Fangyin Cheng
2025-05-30 23:43:22 +08:00
committed by GitHub
parent e04b0f9c19
commit 0188d2367b
5 changed files with 99 additions and 32 deletions

View File

@@ -157,6 +157,9 @@ hf_kimi = [
hf_qwen3 = [
"transformers>=4.51.0",
]
hf_qwen2vl = [
"transformers>=4.34.0",
]
[build-system]
requires = ["hatchling"]

View File

@@ -553,6 +553,7 @@ class QwenAdapter(NewHFChatModelAdapter):
and "1.5" in lower_model_name_or_path
and "moe" not in lower_model_name_or_path
and "qwen2" not in lower_model_name_or_path
and "vl" not in lower_model_name_or_path
)
@@ -565,10 +566,12 @@ class Qwen2Adapter(QwenAdapter):
(
"qwen2" in lower_model_name_or_path
and "instruct" in lower_model_name_or_path
and "vl" not in lower_model_name_or_path
)
or (
"qwen2.5" in lower_model_name_or_path
and "instruct" in lower_model_name_or_path
and "vl" not in lower_model_name_or_path
)
)
@@ -608,6 +611,7 @@ class Qwen3Adapter(QwenAdapter):
return lower_model_name_or_path and (
"qwen3" in lower_model_name_or_path
and "base" not in lower_model_name_or_path
and "vl" not in lower_model_name_or_path
)
def check_transformer_version(self, current_version: str) -> None:
@@ -664,6 +668,60 @@ class Qwen3Adapter(QwenAdapter):
return str_prompt
class Qwen2VLAdapter(NewHFChatModelAdapter):
def check_transformer_version(self, current_version: str) -> None:
if not current_version >= "4.37.0":
raise ValueError(
"Qwen2.5VL model require transformers.__version__>=4.37.0, please "
"upgrade your transformers package."
)
def do_match(self, lower_model_name_or_path: Optional[str] = None):
return (
lower_model_name_or_path
and "qwen2" in lower_model_name_or_path
and "vl" in lower_model_name_or_path
and "instruct" in lower_model_name_or_path
)
def load(self, model_path: str, from_pretrained_kwargs: dict):
try:
from transformers import (
Qwen2_5_VLForConditionalGeneration,
)
except ImportError as exc:
raise ValueError(
"Could not import qwen2.5 vl model, please upgrade your "
"transformers package to 4.37.0 or later."
) from exc
logger.info(
f"Load model from {model_path}, from_pretrained_kwargs: "
f"{from_pretrained_kwargs}"
)
revision = from_pretrained_kwargs.get("revision", "main")
trust_remote_code = from_pretrained_kwargs.get(
"trust_remote_code", self.trust_remote_code
)
low_cpu_mem_usage = from_pretrained_kwargs.get("low_cpu_mem_usage", False)
if "trust_remote_code" not in from_pretrained_kwargs:
from_pretrained_kwargs["trust_remote_code"] = trust_remote_code
if "low_cpu_mem_usage" not in from_pretrained_kwargs:
from_pretrained_kwargs["low_cpu_mem_usage"] = low_cpu_mem_usage
tokenizer = self.load_tokenizer(
model_path,
revision,
use_fast=self.use_fast_tokenizer(),
trust_remote_code=trust_remote_code,
)
model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
model_path, **from_pretrained_kwargs
)
return model, tokenizer
class QwenOmniAdapter(NewHFChatModelAdapter):
def do_match(self, lower_model_name_or_path: Optional[str] = None):
return lower_model_name_or_path and (
@@ -1075,6 +1133,7 @@ register_model_adapter(GLM4Adapter, supported_models=COMMON_HF_GLM_MODELS)
register_model_adapter(GLM40414Adapter)
register_model_adapter(Codegeex4Adapter)
register_model_adapter(Qwen2Adapter, supported_models=COMMON_HF_QWEN25_MODELS)
register_model_adapter(Qwen2VLAdapter)
register_model_adapter(Internlm2Adapter)
register_model_adapter(DeepseekV3R1Adapter, supported_models=COMMON_HF_DEEPSEEK__MODELS)
register_model_adapter(KimiVLAdapter)