Prhub

#47008 [XPU] exclude unsupported models for test_tensor_sechma.py

原始 PR 作者 yma11 合并时间 2026-06-29 20:30 文件变更 2 提交数 3 评论 4 代码增减 +15 / -3

执行摘要

XPU 多模态测试排除不支持的模型

PR body 指出:某些多模态模型(如 mistralai/Mistral-Large-3-675B-Instruct-2512-NVFP4、baidu/UnlimitedOCR 等)在 XPU 平台上不受支持,应在 test_tensor_schema.py 之类的测试中排除,以避免 CI 失败。

该 PR 价值较低,属于特定硬件平台的测试适配。但其中集中管理排除列表、避免 CI 配置与测试代码重复的做法值得借鉴。阅读量不大,建议仅对 Intel XPU 开发和 CI 配置维护者精读。

讨论亮点

Review 中主要涉及代码风格和改进建议:

  • jikunshang 建议使用 list.remove 替代创建新列表(但最终实现采用了 while remove 模式,保留了原有结构)。
  • Copilot 指出过滤循环复杂度为 O(n*m),建议改用列表推导式一次过滤;但该建议未被采纳,作者保持了原始的 remove 循环。
  • Copilot 还指出 PR 标题中 test_tensor_sechma.py 拼写错误(应为 schema),但未修正。
  • jikunshang 在建议中修复了 baidu/UnlimitedOCR 的拼写(缺少连字符),最终版本已正确使用 baidu/Unlimited-OCR

实现拆解

  1. 在 test_common.py 中添加 XPU 模型排除列表
    - 新增 _XPU_EXCLUDED_MODEL_IDS 集合,列出三个不受支持的模型 ID:baidu/Unlimited-OCRmistralai/Mistral-Large-3-675B-Instruct-2512-NVFP4Qwen/Qwen2.5-Omni-7B-AWQ
    - 导入 vllm.platforms.current_platform 以便运行时检测 XPU。

  2. _get_model_ids_to_test 中应用过滤
    - 函数先按原逻辑收集所有待测试模型 ID,然后若当前平台是 XPU,则循环从列表中移除排除列表中的模型 ID(使用 while ... in ...: remove() 处理可能重复的情况)。
    - 此方式集中处理了所有调用 _get_model_ids_to_test 的测试,确保 test_tensor_schema.py 和将来其他测试都能受益。

  3. 简化 Intel CI 配置
    - 在 .buildkite/intel_jobs/models_multimodal_intel.yaml 的 Multi-Modal Processor 测试命令中,删除了先前用于跳过相同模型的两个 --deselect 参数。现在过滤逻辑已集中在测试代码中,无需在 CI 命令层重复配置,减少维护负担。

文件 模块 状态 重要度
tests/models/multimodal/processing/test_common.py 测试工具 modified 5.89
.buildkite/intel_jobs/models_multimodal_intel.yaml CI 配置 modified 3.11

关键符号

_get_model_ids_to_test

关键源码片段

tests/models/multimodal/processing/test_common.py test-coverage

核心变更:添加了 XPU 模型排除列表和过滤逻辑,集中控制多模态 tensor schema 测试的模型矩阵。

# 来源 : tests/models/multimodal/processing/test_common.pyfrom vllm.platforms import current_platform # 新增导入,用于检测当前硬件平台# ... ( 其它代码保持不变 )# 定义 XPU 平台不支持的模型 ID 集合(集中管理,方便未来增删)
_XPU_EXCLUDED_MODEL_IDS = {
    "baidu/Unlimited-OCR", # OCR 模型可能缺少 XPU 算子
    "mistralai/Mistral-Large-3-675B-Instruct-2512-NVFP4", # NVFP4 格式在 XPU 上不支持
    "Qwen/Qwen2.5-Omni-7B-AWQ", # AWQ 量化可能有平台依赖
}def _get_model_ids_to_test(model_arch_list: AbstractSet[str]):
    # 先收集所有候选模型 ID
    model_ids = list(_iter_model_ids_to_test(model_arch_list))
​
    # 若当前为 XPU 平台,则从列表移除不支持的模型
    # 注意:使用 while-in-remove 处理列表中可能出现的重复 ID
    if current_platform.is_xpu():
        for excluded_model_id in _XPU_EXCLUDED_MODEL_IDS:
            while excluded_model_id in model_ids:
                model_ids.remove(excluded_model_id)
​
    return model_ids

评论区精华

过滤循环实现复杂度 性能

Copilot 评论指出该过滤循环复杂度为 O(n*m),建议改为一趟列表推导式,更简明且避免反复列表突变。

结论:未采纳建议,作者保留了 while-remove 循环。虽然性能不是关键(列表很小),但可读性略差。 · 已解决

PR 标题拼写错误 documentation

Copilot 指出 PR 标题中 `test_tensor_sechma.py` 应为 `test_tensor_schema.py`,可能导致搜索 / 排查时混淆。

结论:未修正,PR 标题保留了 typo。 · unresolved

风险与影响

低风险。仅修改测试辅助函数和 CI 配置,不影响核心运行时。主要风险在于:若未来 XPU 支持了这些模型,需要从排除列表中移除;排除列表的维护需要人工同步。

  • 对用户:无直接影响。
  • 对系统:Intel XPU 上的 multimodal tensor schema 测试将跳过不支持的模型,避免因缺少算子或权重格式(NVFP4)导致测试失败。
  • 对团队:测试过滤逻辑集中到一处,CI 配置更简洁,降低维护成本。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论