Prhub

#48676 [ROCm][CI] fix test_common.py

原始 PR 作者 charlifu 合并时间 2026-07-15 14:42 文件变更 2 提交数 2 评论 1 代码增减 +10 / -4

执行摘要

修复 HfRunner 因缺失 tokenizer 参数导致的崩溃

PR body 指出:较新版本的 Transformers 在使用 stop strings 时要求向 model.generate() 传入 tokenizer 参数。HyperCLOVAX-SEED-Think-14B 模型的 generation_config.json 包含 "stop_strings": ["<|endofturn|>", "<|stop|>"],导致测试中调用 self.model.generate() 时触发 ValueError

值得合并的紧急修复。虽仅影响测试,但属于上游依赖变更导致的兼容性问题。可精读 HfRunner.generate 的改动以了解测试工具兼容性处理模式。

讨论亮点

无实质性 review 讨论。Claude 机器人自动评论指出该 PR 来自 fork 未触发审查;AndreasKaratzas 直接批准。

实现拆解

  1. HfRunner 生成路径修复 (tests/conftest.py):在 generate()generate_greedy_logprobs()generate_greedy_logprobs_limit() 三个方法中,将 **kwargs 替换为 **generate_kwargs,其中 generate_kwargs 通过 setdefault("tokenizer", self.tokenizer) 确保默认传入 tokenizer,同时允许调用方显式覆盖。
  2. 模型 forward 微调 (vllm/model_executor/models/hyperclovax.py):将 forward 方法中 intermediate_tensors 参数从必选改为可选(= None),与基类或其他模型的签名保持一致,避免签名不匹配导致的调用错误。
文件 模块 状态 重要度
tests/conftest.py 测试工具 modified 5.42
vllm/model_executor/models/hyperclovax.py 模型实现 modified 4.3

关键符号

HfRunner.generate HfRunner.generate_greedy_logprobs HfRunner.generate_greedy_logprobs_limit

关键源码片段

tests/conftest.py test-coverage

核心修复文件:在 HfRunner 的三个 generate 路径中添加默认 tokenizer 参数,消除因 Transformers 新版本要求导致的崩溃。

# tests/conftest.py (HfRunner.generate 方法片段 )
def generate(
    self,
    prompts: list[str] | list[list[int]],
    images: PromptImageInput | None = None,
    videos: PromptVideoInput | None = None,
    audios: PromptAudioInput | None = None,
    **kwargs: Any,
) -> list[tuple[list[list[int]], list[str]]]:
    all_inputs = self.get_inputs(
        prompts, images=images, videos=videos, audios=audios
    )
​
    outputs: list[tuple[list[list[int]], list[str]]] = []
    for inputs in all_inputs:
        # 复制原始 kwargs 并确保默认传入 tokenizer
        # 这是为了避免新版本 Transformers 在 generate() 使用 stop strings 时
        # 因缺少 tokenizer 参数而引发 ValueError。
        # 调用方可以通过显式传递 tokenizer=... 来覆盖默认值。
        generate_kwargs = dict(kwargs)
        generate_kwargs.setdefault("tokenizer", self.tokenizer)
        output_ids: torch.Tensor = self.model.generate(
            **self.wrap_device(inputs),
            use_cache=True,
            **generate_kwargs,
        )
        ...

评论区精华

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

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

风险与影响

低风险。核心逻辑仅通过 setdefault 为 test runner 添加默认参数,不改变现有行为。模型 forward 签名微调属于常规兼容性调整。但需确认所有依赖 intermediate_tensors 为必选参数的调用方是否已适配。

影响范围限于测试基础设施:修复了因 Transformers API 变更导致的 ROCm CI 测试失败。开发者和 CI 流水线可恢复正常测试运行。无用户功能影响。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论