diff --git a/requirements/test/cpu.txt b/requirements/test/cpu.txt index fff92993fb..cb45f29ed5 100644 --- a/requirements/test/cpu.txt +++ b/requirements/test/cpu.txt @@ -1169,7 +1169,7 @@ tqdm==4.67.3 # segmentation-models-pytorch # sentence-transformers # transformers -transformers==5.14.1 +transformers==5.15.0 # via # -r requirements/test/../common.txt # -r requirements/test/cuda.in diff --git a/requirements/test/cuda.in b/requirements/test/cuda.in index c3d3e1289a..8a56743b1c 100644 --- a/requirements/test/cuda.in +++ b/requirements/test/cuda.in @@ -39,7 +39,7 @@ open_clip_torch==2.32.0 # Required for nemotron_vl test, Nemotron Parse in test_ datamodel_code_generator # required for minicpm3 test lm-eval[api]>=0.4.12 # required for model evaluation test mteb[bm25s]>=2, <3 # required for mteb test -transformers==5.14.1 +transformers==5.15.0 tokenizers==0.22.2 schemathesis>=4.0.0 # Required for openai schema test. # quantization diff --git a/requirements/test/cuda.txt b/requirements/test/cuda.txt index 259eb58589..f0bea6e5ba 100644 --- a/requirements/test/cuda.txt +++ b/requirements/test/cuda.txt @@ -1272,7 +1272,7 @@ tqdm==4.67.3 # segmentation-models-pytorch # sentence-transformers # transformers -transformers==5.14.1 +transformers==5.15.0 # via # -c requirements/common.txt # -r requirements/test/../common.txt diff --git a/requirements/test/nightly-torch.txt b/requirements/test/nightly-torch.txt index ac38f761cf..10c639af42 100644 --- a/requirements/test/nightly-torch.txt +++ b/requirements/test/nightly-torch.txt @@ -29,7 +29,7 @@ opencv-python-headless >= 4.13.0 # required for video test datamodel_code_generator # required for minicpm3 test lm-eval[api]>=0.4.12 # required for model evaluation test mteb[bm25s]>=2, <3 # required for mteb test -transformers==5.14.1 +transformers==5.15.0 tokenizers==0.22.2 schemathesis>=4.0.0 # Required for openai schema test. # quantization diff --git a/requirements/test/rocm.in b/requirements/test/rocm.in index eb93b0c24c..5858a028ca 100644 --- a/requirements/test/rocm.in +++ b/requirements/test/rocm.in @@ -35,7 +35,7 @@ open_clip_torch==2.32.0 # Required for nemotron_vl test, Nemotron Parse in test_ datamodel_code_generator # required for minicpm3 test lm-eval[api]>=0.4.12 # required for model evaluation test mteb[bm25s]>=2, <3 # required for mteb test -transformers==5.14.1 +transformers==5.15.0 tokenizers==0.22.2 schemathesis>=4.0.0 # Required for openai schema test # quantization diff --git a/requirements/test/rocm.txt b/requirements/test/rocm.txt index 1859202e51..83f491a257 100644 --- a/requirements/test/rocm.txt +++ b/requirements/test/rocm.txt @@ -1222,7 +1222,7 @@ tqdm==4.67.3 # sentence-transformers # tilelang # transformers -transformers==5.14.1 +transformers==5.15.0 # via # -c requirements/common.txt # -r requirements/test/../common.txt diff --git a/requirements/test/xpu.in b/requirements/test/xpu.in index a786740fce..269fd47fb0 100644 --- a/requirements/test/xpu.in +++ b/requirements/test/xpu.in @@ -17,7 +17,7 @@ accelerate arctic-inference lm_eval[api]>=0.4.12 modelscope<1.38 -transformers==5.14.1 +transformers==5.15.0 # --- Audio Processing --- librosa diff --git a/requirements/test/xpu.txt b/requirements/test/xpu.txt index 71b17aa034..39ef171115 100644 --- a/requirements/test/xpu.txt +++ b/requirements/test/xpu.txt @@ -940,7 +940,7 @@ tqdm==4.67.3 # pqdm # sentence-transformers # transformers -transformers==5.14.1 +transformers==5.15.0 # via # -c requirements/common.txt # -r requirements/test/../common.txt diff --git a/tests/config/test_model_arch_config.py b/tests/config/test_model_arch_config.py index cf65c0e159..0688be4fd7 100644 --- a/tests/config/test_model_arch_config.py +++ b/tests/config/test_model_arch_config.py @@ -371,19 +371,17 @@ def test_gemma4_uniform_head_dims_are_homogeneous(): class _HeterogeneousConfig(PretrainedConfig): - """A stand-in for the Transformers >= 5.15.0 heterogeneous config API. + """A heterogeneous config with no convertor of its own. - No released Transformers has it, so the default per-layer seam has no other - way to be exercised. Mirrors the parts vLLM uses: per-layer configs are - shallow copies with the varying attributes applied and heterogeneity - stripped, so they do not recurse. - """ + Mirrors the parts vLLM uses: per-layer configs are shallow copies with the + varying attributes applied and heterogeneity stripped, so they do not recurse.""" is_heterogeneous = True def __init__(self, per_layer: dict[str, list], **kwargs): - super().__init__(**kwargs) + # Set before `super().__init__` because it validates `per_layer_config` self._per_layer = per_layer + super().__init__(**kwargs) @property def per_layer_config(self) -> list[PretrainedConfig]: diff --git a/tests/models/transformers/test_backend.py b/tests/models/transformers/test_backend.py index 9b49ca3e21..4b6b2796af 100644 --- a/tests/models/transformers/test_backend.py +++ b/tests/models/transformers/test_backend.py @@ -151,7 +151,7 @@ def test_mla(vllm_runner: type[VllmRunner], example_prompts: list[str]) -> None: f"transformers>={required}, but got {installed}" ) - model = get_model("DeepseekV2ForCausalLM") # DeepSeek-V2-Lite, MLA + MoE + model = "hmellor/tiny-random-DeepseekV2ForCausalLM" args = (example_prompts, 32, 5) kwargs: dict[str, Any] = {"max_model_len": 2048, "enforce_eager": True} diff --git a/vllm/model_executor/models/transformers/multimodal.py b/vllm/model_executor/models/transformers/multimodal.py index 977ee8e30a..f073e8c186 100644 --- a/vllm/model_executor/models/transformers/multimodal.py +++ b/vllm/model_executor/models/transformers/multimodal.py @@ -390,6 +390,14 @@ class MultiModalProcessor(BaseMultiModalProcessor[MultiModalProcessingInfo]): mm_placeholders: dict[str, list[PlaceholderRange]] = {} split_sizes = mm_tokens_per_modality["num_image_tokens"] if split_sizes: + image_token_ids = getattr(hf_processor, "image_token_ids", None) + if image_token_ids is None: + # Transformers <5.10.0 + image_token_ids = [hf_processor.image_token_id] + image_token_ids = torch.tensor( + [i for i in image_token_ids if i is not None] + ) + chunked_mm_positions = torch.split(mm_positions, split_sizes) mm_tokens = torch.tensor(prompt_ids)[mm_token_type_ids[0].bool()] chunked_mm_tokens = torch.split(mm_tokens, split_sizes) @@ -397,7 +405,7 @@ class MultiModalProcessor(BaseMultiModalProcessor[MultiModalProcessingInfo]): PlaceholderRange( offset=positions[0].item(), length=positions.shape[0], - is_embed=(mm_tokens == hf_processor.image_token_id).bool(), + is_embed=torch.isin(mm_tokens, image_token_ids), ) for positions, mm_tokens in zip(chunked_mm_positions, chunked_mm_tokens) ]