Prhub

#49231 [CI] Exercise FA3 FP8 attention on SM90

原始 PR 作者 simon-mo 合并时间 2026-07-21 10:26 文件变更 1 提交数 1 评论 0 代码增减 +6 / -3

执行摘要

启用 H100 上 FA3 FP8 注意力测试覆盖

根据 PR #43024 的 review 反馈(discussion_r3614823352),H200 CI 迁移时跳过了 SM90 上 test_online_quantizationkv_cache_dtype=fp8 组合,声称 FlashAttention 3 不支持 FP8 attention。但 FA3 实际支持 FP8 query 输入,只是要求输出为 BF16 dtype。因此需要修复 dtype 配置并恢复测试,以填补测试覆盖缺口。

值得合入,作为测试覆盖补强和小型 dtype 处理学习点。建议关注后续 CI 运行结果,验证 H200 上的实际通过情况。

讨论亮点

无审核评论讨论;仅 claude[bot] 自动评论,且 Isotr0py 直接批准。

实现拆解

  1. tests/quantization/test_fp8.pytest_online_quantization 函数中,移除了针对 SM90 + FP8 KV cache 的 pytest.skip() 调用。
  2. 新增 model_dtype 变量,默认值为 "auto";当 kv_cache_dtype == "fp8" 且 GPU 计算能力族为 90 时,将 model_dtype 设为 "bfloat16"
  3. vllm_runner 调用中增加 dtype=model_dtype 参数,确保 FA3 接收到 BF16 输出张量。
  4. 改动仅涉及一个测试文件,通过修改模型 dtype 而非输出张量,保持了 vLLM 主逻辑不变。
文件 模块 状态 重要度
tests/quantization/test_fp8.py 测试 modified 4.01

关键符号

test_online_quantization

关键源码片段

tests/quantization/test_fp8.py test-coverage

唯一变更文件,修改测试的 dtype 配置,移除跳过条件,启用 FA3 FP8 attention 测试覆盖。

# tests/quantization/test_fp8.pydef test_online_quantization(
    vllm_runner,
    kv_cache_dtype: str,
    force_marlin: bool,
    use_rocm_aiter: bool,
    monkeypatch,
) -> None:
    # 移除了以下跳过逻辑:
    # if kv_cache_dtype == "fp8" and current_platform.is_device_capability_family(90):
    # pytest.skip("FA3 currently rejects FP8 KV cache output dtype on SM90")
​
    if use_rocm_aiter:
        monkeypatch.setenv("VLLM_ROCM_USE_AITER", "1")
​
    # `LLM.apply_model` requires pickling a function.
    monkeypatch.setenv("VLLM_ALLOW_INSECURE_SERIALIZATION", "1")
​
    if force_marlin:
        monkeypatch.setenv("VLLM_TEST_FORCE_FP8_MARLIN", "1")
​
    # 新增:当 SM90 + FP8 KV cache 时,FA3 要求输出为 BF16
    model_dtype = "auto"
    if kv_cache_dtype == "fp8" and current_platform.is_device_capability_family(90):
        # FA3 requires BF16 output when the query input is FP8.
        model_dtype = "bfloat16"
​
    with vllm_runner(
        "facebook/opt-125m",
        quantization="fp8",
        dtype=model_dtype, # 新增参数,传递给模型
        enforce_eager=True,
        kv_cache_dtype=kv_cache_dtype,
    ) as llm:
        # ... 后续校验保持不变
        pass

评论区精华

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

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

风险与影响

风险极低:

  • 变更仅影响测试文件,不涉及生产代码。
  • 仅针对 SM90 + FP8 KV cache 场景,将模型 dtype 从默认 FP16 改为 BF16;BF16 是 FP8 训练/推理中常用的 dtype,不会引入精度问题。
  • 测试此前被跳过,因此不存在回归风险。

影响范围有限:

  • 仅影响 H100/H200 GPU 上运行 test_online_quantization 测试时的 CI 流程。
  • 使得 SM90 上的 FA3 FP8 attention 路径被正常测试,提升 CI 覆盖率。
  • 对用户无直接影响,不改变模型行为。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论