From f2b2d1f288968030440230507817d65f37d04a5c Mon Sep 17 00:00:00 2001 From: Harry Mellor <19981378+hmellor@users.noreply.github.com> Date: Thu, 29 Jan 2026 18:48:52 +0100 Subject: [PATCH] Fix `tie_word_embeddings` for multimodal models in Transformers v5 Signed-off-by: Harry Mellor <19981378+hmellor@users.noreply.github.com> --- vllm/config/vllm.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/vllm/config/vllm.py b/vllm/config/vllm.py index 690597418479..719b414b1ccb 100644 --- a/vllm/config/vllm.py +++ b/vllm/config/vllm.py @@ -458,6 +458,30 @@ def with_hf_config( hf_config.architectures = architectures model_config = copy.deepcopy(self.model_config) + + if ( + model_config.is_multimodal_model + and hasattr(model_config.hf_config, "tie_word_embeddings") + and not hasattr(hf_config.get_text_config(), "tie_word_embeddings") + ): + # In Transformers v5, tie_word_embeddings belongs to the config of the class + # that can see both layers to be tied. For example: + # + # SomeVLModel: + # self.language_model = SomeLanguageModel() + # self.vision_model = SomeVisionModel() + # + # SomeVLModelForMultimodalLM: + # self.model = SomeVLModel() + # self.lm_head = nn.Linear() + # + # Therefore, tie_word_embeddings is defined in SomeVLModelForMultimodalLM's + # config and is not present in SomeVLModel's config. In vLLM, the lm_head + # belongs to the language_model, so we must ensure that tie_word_embeddings + # is set in the language_model's config. + tie_word_embeddings = model_config.hf_config.tie_word_embeddings + hf_config.get_text_config().tie_word_embeddings = tie_word_embeddings + model_config.hf_config = hf_config model_config.model_arch_config = model_config.get_model_arch_config()