Prhub

#50839 [CI] And PPL test for multimodal generation models

原始 PR 作者 noooop 合并时间 2026-08-03 19:25 文件变更 4 提交数 5 评论 1 代码增减 +198 / -0

执行摘要

新增多模态生成模型 PPL 回归测试与 CI 任务

PR body 明确说明目标是 Following #24485(沿用既有 PPL 测试框架),提供 a fast but sensitive test to test the entire pipeline of a multimodal model,并用于 Help confirm the accuracy of #50411。作者还演示了在 qwen2_vl.py 中把 RGB 通道交换为 BGR 后测试差异变为 -16.1757% 并 FAILED,证明该测试能捕获视觉预处理层的错误,从而为多模态相关改动提供可靠回归保护。

值得精读,重点看 ppl_utils.py 的双侧 PPL 对比口径(vLLM greedy logprob 累加 vs HF loss 平均)以及“HF 参考值可缓存为常量”的提速设计;对多模态模型维护者尤其有参考价值。后续扩展模型时需关注外部数据集依赖与 1% 容差是否适用,建议在扩展 PR 中同步评估。

讨论亮点

本 PR 没有实质性的 review 技术交锋:claude[bot] 因 PR 来自 fork 而跳过自动审查,维护者 DarkLight1337 直接批准。最有信息量的内容在 PR body 中:

  • 作者用“故意把 RGB 通道换成 BGR”的方式自证测试灵敏度:差异由 0.05% 突变到 -16.18% 并 FAILED,说明 PPL 指标能稳定捕获视觉预处理层的错误;
  • 作者给出的正常测试结果(Qwen2-VL 0.052%、Qwen2.5-VL 0.178%)与 Transformers 参考值高度一致,说明对比口径可信;
  • 唯一评论区活动是作者 @DarkLight1337 的 ready to review 提醒。

实现拆解

本 PR 是纯测试与 CI 配套变更,不涉及生产代码。实现按以下四步完成:

  1. 新增通用多模态 PPL 测试工具:在 tests/models/multimodal/generation_ppl_test/ppl_utils.py 中新增 vqa_ppl_test(),统一完成三类工作:加载 llava-bench-in-the-wild 小数据集(60 行、约 9.78 MB)并构造多轮对话 prompt;在 vLLM 侧以 max_num_seqs=1、greedy 解码方式逐 token 累计负对数似然得到 PPL;在 HF 侧通过 AutoModelForImageTextToText 计算参考 PPL(若 GenerateModelInfo.hf_ppl 已缓存则跳过 HF 前向,直接使用常量以加速 CI)。最后按 (vllm_ppl - hf_ppl) / hf_ppl 相对差异与全局 PPL_TOL=0.01 比较。该工具是后续所有多模态 PPL 用例的公共入口。

  2. 新增 Qwen 用例:tests/models/multimodal/generation_ppl_test/test_qwen.py 用 @pytest.mark.parametrize 挂载 Qwen/Qwen2-VL-2B-InstructQwen/Qwen2.5-VL-3B-Instruct 两个模型,并统一设置 min_pixels=28*28max_pixels=1280*28*28 处理器参数,控制输入分辨率与测试耗时。同目录的 __init__.py 用于包初始化。

  3. 接入 Buildkite CI:修改 .buildkite/test_areas/models_multimodal.yaml,在 Extended Generation 1 之后新增 label 为 Multi-Modal Models (PPL)、key 为 multi-modal-models-extended-ppl 的任务:在 h200_35gb 上执行 pytest -v -s models/multimodal/generation_ppl_test/,并 mirror 到 AMD mi300_1(dind: false、超时 90 分钟);optional: truesource_file_dependencies 覆盖整个 vllm/ 与测试目录,保证任何影响多模态链路的代码变更都会触发该测试。

  4. 灵敏度验证:PR body 中演示了在 qwen2_vl.py 将 RGB 通道交换为 BGR 后,测试差异从约 0.05% 变为 -16.18% 并失败,证明该测试足够敏感;正常情况 Qwen2-VL-2B 差异 0.052%、Qwen2.5-VL-3B 差异 0.178%,与 Transformers 参考值高度一致。

文件 模块 状态 重要度
tests/models/multimodal/generation_ppl_test/ppl_utils.py 测试工具 added 6.84
tests/models/multimodal/generation_ppl_test/test_qwen.py Qwen 测试 added 5.43
.buildkite/test_areas/models_multimodal.yaml CI 配置 modified 3.91
tests/models/multimodal/generation_ppl_test/__init__.py 包初始化 added 2.82

关键符号

vqa_ppl_test test_ppl

关键源码片段

tests/models/multimodal/generation_ppl_test/test_qwen.py test-coverage

首个使用 vqa_ppl_test 的模型用例,参数化挂载 Qwen2-VL-2B-Instruct 与 Qwen2.5-VL-3B-Instruct,并统一定义 min_pixels/max_pixels 处理器参数,展示工具的使用方式。

# SPDX-License-Identifier: Apache-2.0# 在 Qwen2-VL 系列上跑多模态 PPL 回归:两个模型共享同一套工具函数
MODELS = [
    GenerateModelInfo('Qwen/Qwen2-VL-2B-Instruct'),
    GenerateModelInfo('Qwen/Qwen2.5-VL-3B-Instruct'),
]# 限制输入分辨率范围,保证测试耗时可控
mm_processor_kwargs = {
    'min_pixels': 28 * 28,
    'max_pixels': 1280 * 28 * 28,
}
​
​
@pytest.mark.parametrize('model_info', MODELS)
def test_ppl(hf_runner, vllm_runner, model_info: GenerateModelInfo):
    # 直接复用 ppl_utils 里的通用 vqa_ppl_test,默认容差 1%
    vqa_ppl_test(
        hf_runner, vllm_runner, model_info, mm_processor_kwargs=mm_processor_kwargs
    )

评论区精华

Fork 仓库跳过自动审查 other

claude[bot] 评论:本 PR 来自 fork,自动审查被禁用,需维护者手动触发 @claude review。

结论:维护者 DarkLight1337 未触发 bot 审查,直接批准 PR;无进一步技术讨论。 · 已解决

风险与影响

  1. 外部数据集依赖:ppl_utils.py 运行时通过 Hugging Face 加载 lmms-lab-encoder/llava-bench-in-the-wild,数据集若下线、改版或网络受限会导致测试失败;虽然该 job 为 optional,但依赖未固化(无本地缓存或 hash 校验)仍是稳定性隐患。
  2. 容差策略单一PPL_TOL=0.01 是全局固定值。不同模型、不同 dtype 组合下 vLLM 与 HF 的数值差异可能逼近或超过 1%(Qwen2.5-VL 已达 0.178%),后续扩展更多模型时可能出现误报或漏报。
  3. CI 资源开销:新增 PPL job 在 h200_35gb 与 mi300_1 上各占用一个 GPU,超时 90 分钟;source_file_dependencies 覆盖整个 vllm/,任何 vLLM 代码变更都会触发该 job,可能增加主干 CI 排队压力。
  4. 口径假设:vLLM 侧用 greedy logprob 逐 token 累加,HF 侧用 loss 平均并排除首个 token,两者统计口径存在细微差异;若未来 logprob 语义调整,可能导致测试误报。

对用户与生产代码零影响(纯测试 + CI 配置)。对系统的影响是 CI 新增一个多模态 PPL 回归任务(multi-modal-models-extended-ppl,含 AMD 镜像);对团队的影响是此后任何触碰多模态链路(processor、vision encoder、LLM 生成)的 PR 都会多一道正确性门槛。该测试框架可作为模板扩展到更多多模态模型,只需复用 vqa_ppl_test 并注册对应 GenerateModelInfo 即可。

外部数据集依赖 新增 GPU CI 任务 固定容差策略 模型覆盖有限

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论