Prhub

#50322 Add FlashMLA H100 tests to CI, fix them after #32810

原始 PR 作者 janeyx99 合并时间 2026-07-30 13:06 文件变更 3 提交数 1 评论 1 代码增减 +44 / -6

执行摘要

为 FlashMLA H100 测试修复并添加 CI

作者发现本地 H100 上 FlashMLA 测试因 #32810 接口变更而损坏,且未被 CI 覆盖,因此修复测试并加入 CI,以预防回归。

此 PR 属于常规测试维护,不需要精读,但值得关注其 CI 配置模式,以便在类似场景中复用。

讨论亮点

只有一个评论:作者担心新 CI 步骤的 timeout_in_minutes: 25 可能过于宽松,因为测试本地运行不到 5 分钟。未引起进一步讨论,已合并。

实现拆解

  1. 修复 tests/kernels/attention/test_flashmla.py:更新 import 语句以添加新函数 flash_mla_with_kvcache_fp8get_mla_metadata_dense_fp8;调整测试逻辑,在 FP8 路径中使用新的 API 调用,并将 descale_q/descale_k 参数仅传递给 FP8 分支。
  2. 修复 tests/kernels/attention/test_mla_cross_layer_kernel_equivalence.py:将 test_flashmla_dense_fp8_decode_unified_slot_view 测试中的 query 初始化改为 torch.float8_e4m3fn,以匹配量化 KV 缓存场景下 FP8 密集 MLA 核心对输入 dtype 的要求。
  3. 新增 Buildkite CI 步骤:在 .buildkite/test_areas/kernels.yaml 中添加 Kernels FlashMLA Test (H100) 步骤,设置超时 25 分钟,指定 H100 设备,配置源文件依赖关系,并运行三个测试文件。
  4. 配置项调整:无其他配置修改。
文件 模块 状态 重要度
tests/kernels/attention/test_flashmla.py 内核测试 modified 5.57
.buildkite/test_areas/kernels.yaml CI 配置 modified 4.11
tests/kernels/attention/test_mla_cross_layer_kernel_equivalence.py 内核测试 modified 3.83

关键符号

test_flash_mla test_flashmla_dense_fp8_decode_unified_slot_view

关键源码片段

tests/kernels/attention/test_flashmla.py test-coverage

核心测试文件,修复了因 #32810 接口变更导致的 FP8 路径问题,并调整了 import 和调用逻辑。

# 新增导入:flash_mla_with_kvcache_fp8 和 get_mla_metadata_dense_fp8
from vllm.v1.attention.ops.flashmla import (
    flash_mla_with_kvcache,
    flash_mla_with_kvcache_fp8, # 新增
    get_mla_metadata,
    get_mla_metadata_dense_fp8, # 新增
    is_flashmla_dense_supported,
)# 在 test_flash_mla 函数中,根据 use_fp8 分支调用不同 API
if use_fp8:
    tile_scheduler_metadata, num_splits = get_mla_metadata_dense_fp8(
        cache_seqlens, s_q * h_q // h_kv, h_kv
    )
else:
    tile_scheduler_metadata, num_splits = get_mla_metadata(
        cache_seqlens, s_q * h_q // h_kv, h_kv
    )# 并在 flash_mla 内部函数中同样区分
if use_fp8:
    return flash_mla_with_kvcache_fp8(
        q, blocked_k, block_table, cache_seqlens, dv,
        tile_scheduler_metadata, num_splits,
        causal=causal, descale_q=descale_q, descale_k=descale_k,
    )
return flash_mla_with_kvcache(
    q, blocked_k, block_table, cache_seqlens, dv,
    tile_scheduler_metadata, num_splits,
    causal=causal,
    # 注意:descale_q/descale_k 不再传入原始函数
)

评论区精华

CI 超时时间设置 other

作者评论:'this could be too generous, the tests take under 5m locally.'

结论:未修改,保留 25 分钟作为安全余量。 · 已解决

风险与影响

风险极低。仅修改了测试文件和 CI 配置,不影响核心运行时逻辑。新增 CI 步骤可能增加少量排队时间,但影响可控。

对用户无直接影响。对开发者:FlashMLA 相关代码在 H100 上的回归将被 CI 捕获,提高代码质量。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论