Prhub

#43581 [Model][Bugfix] Rename weight_mapper to hf_to_vllm_mapper in LlamaNemotronVL pooling models

原始 PR 作者 jzakrzew 合并时间 2026-05-28 18:32 文件变更 1 提交数 8 评论 2 代码增减 +4 / -4

执行摘要

重命名 weight_mapper 以对齐标准接口

PR body 明确指出:'Rename weight_mapper to hf_to_vllm_mapper... to align with the standard VllmModel interface used by 50+ other model implementations.' 同时说明 'This is necessary to support llmcompressor quantized checkpoints.' 这表明命名不一致阻碍了量化功能的兼容性。

建议合并。这是一个命名一致性修复,无逻辑变更,且测试通过。值得作为后续量化功能支持的基础补丁。

讨论亮点

没有实质性的讨论。审阅者 tomeras91 直接批准(LGTM),gemini-code-assist 仅发表通用评论。PR 作者指出 all-tests 标签触发了随机 CI 失败,但标签已被移除。

实现拆解

  1. vllm/model_executor/models/nemotron_vl.py 中,将 LlamaNemotronVLForEmbedding 类的类变量 weight_mapper 重命名为 hf_to_vllm_mapper,其值为相同的 WeightsMapper 实例。
  2. 在该类的 load_weights 方法中,将 mapper=self.weight_mapper 更新为 mapper=self.hf_to_vllm_mapper
  3. 相应地在 LlamaNemotronVLForSequenceClassification 类中,将类变量 weight_mapper 重命名为 hf_to_vllm_mapper,并更新其复合定义中对父类映射器的引用。
  4. 未涉及测试、配置或部署的改动。
文件 模块 状态 重要度
vllm/model_executor/models/nemotron_vl.py 模型执行器 modified 5.8

关键源码片段

vllm/model_executor/models/nemotron_vl.py data-contract

唯一修改的文件,重命名两个类中的 weight_mapper 为 hf_to_vllm_mapper,并更新 load_weights 中的引用。

# vllm/model_executor/models/nemotron_vl.py# 在 LlamaNemotronVLForEmbedding 类中:
class LlamaNemotronVLForEmbedding(LlamaNemotronVLChatModel, VllmModelForPooling):
    """
    LlamaNemotronVL model for embeddings.
    Inherits from LlamaNemotronVLChatModel and specializes it for embedding tasks.
    """
​
    is_pooling_model = True
​
    # 原 weight_mapper 重命名为 hf_to_vllm_mapper,以对齐 VllmModel 标准接口
    hf_to_vllm_mapper = WeightsMapper(
        orig_to_new_prefix={
            "language_model.layers.": "language_model.model.layers.",
            "language_model.embed_tokens.": "language_model.model.embed_tokens.",
            "language_model.norm.": "language_model.model.norm.",
            "vision_model.encoder.": "vision_model.vision_model.encoder.",
            "vision_model.embeddings.": "vision_model.vision_model.embeddings.",
            "vision_model.post_layernorm.": "vision_model.vision_model.post_layernorm.",
        }
    )
​
    def load_weights(self, weights: Iterable[tuple[str, torch.Tensor]]) -> set[str]:
        """Override to use different weight mapping for SigLIP."""
        loader = AutoWeightsLoader(self)
        return loader.load_weights(weights, mapper=self.hf_to_vllm_mapper) # 引用重命名后的变量
​
​
# 在 LlamaNemotronVLForSequenceClassification 类中:
class LlamaNemotronVLForSequenceClassification(
    LlamaNemotronVLForEmbedding, SupportsCrossEncoding
):
    """
    LlamaNemotronVL model variant for sequence classification / reranking.
    """
​
    hf_to_vllm_mapper = WeightsMapper(orig_to_new_prefix={"model.": ""}) | (
        LlamaNemotronVLForEmbedding.hf_to_vllm_mapper # 更新对父类映射器的引用
    )
    # 其余代码不变

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。这是因为纯重命名,不改变任何逻辑或映射行为。若任何外部代码通过 weight_mapper 直接引用该类属性,可能导致中断,但 vLLM 内部代码已全部同步更新,且该属性仅在此文件中定义和使用。

影响范围仅限于 LlamaNemotronVL 系列的 pooling 模型类。对用户无可见行为变化。使这些模型遵循 vLLM 的命名约定,为未来量化功能对齐铺平道路。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论