Prhub

#20717 [CI] Add Per-Tensor, Blockwise FP8 Tests on SM120

原始 PR 作者 DerekY2 合并时间 2026-04-02 09:20 文件变更 1 提交数 2 评论 7 代码增减 +86 / -0

执行摘要

为 SM120 GPU 添加 FP8 量化模型测试,覆盖逐张量和分块量化格式。

根据PR body描述,动机是“改进SM120上量化模型测试的覆盖率”,并明确指出这是解决#20600问题的多项措施之一。现有测试已包含Blackwell多GPU上的FP4覆盖,以及其他测试套件中的FP8/MoE/MLA准确性测试,但缺少在单5090/SM120上的FP8量化模型测试。PR作者DerekY2在issue评论中也确认了添加Qwen模型以覆盖不同量化格式(分块vs逐张量)的考虑。

对于技术管理者,此PR值得快速浏览以了解测试覆盖扩展方向;对于工程师,除非负责量化或CI测试,否则无需精读。值得关注的设计决策是:1) 使用统一的基类减少代码重复。2) 通过不同模型路径和参数同时测试两种量化格式。3) 集成到现有CI注册框架。

讨论亮点

review讨论非常简短但关键。reviewer b8zhong在评论中建议:“看起来不错。我们能否也添加Qwen/Qwen3-4B-Instruct-2507-FP8。量化格式会有点不同(分块vs逐张量缩放)。”作者DerekY2在issue评论中回应“刚刚添加了👍”,并在第二次提交中实现了该建议。这体现了对测试覆盖完整性的关注,确保同时覆盖两种主要的FP8量化格式。没有其他争议或未解决疑虑。

实现拆解

实现方案单一且集中:新增一个测试文件test/registered/quant/test_fp8_gemm_sm120.py。该文件定义了一个基础测试类FP8GemmSM120Base,负责启动FP8量化模型服务器并运行GSM8K评估。然后派生出两个具体测试类:TestFP8PerTensorGemmSM120Auto测试逐张量量化的Llama模型,TestFP8BlockwiseGemmSM120Auto测试分块量化的Qwen模型。两个测试都使用auto后端,并设置了不同的shot数和准确性阈值。测试通过register_cuda_ci注册到stage-b-test-small-1-gpu CI套件,并包含SM版本检查。

文件 模块 状态 重要度
test/registered/quant/test_fp8_gemm_sm120.py 测试 / 量化 added 10.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

FP8GemmSM120Base.setUpClass FP8GemmSM120Base.test_gsm8k TestFP8PerTensorGemmSM120Auto TestFP8BlockwiseGemmSM120Auto

评论区精华

添加 Qwen 模型以覆盖分块量化格式 测试

reviewer b8zhong 建议添加 Qwen 模型,因为其量化格式(分块)与 Llama(逐张量)不同,以提升测试覆盖完整性。

结论:作者 DerekY2 在第二次提交中采纳建议,添加了 Qwen 模型测试。 · 已解决

风险与影响

技术风险较低,因为这是纯粹的测试代码添加,不涉及生产逻辑。主要风险包括:1) 测试准确性阈值设置可能过于严格或宽松,导致CI不稳定(如metrics["accuracy"] >= 0.73/0.87)。2) 测试依赖外部模型仓库(Hugging Face),可能因网络或模型可用性问题导致CI失败。3) 测试执行时间(est_time=120秒)可能影响CI流水线效率。4) 新增测试文件可能与其他FP8测试产生冗余,但根据PR描述,这是填补特定硬件覆盖空白。

影响范围有限但重要:1) 对用户无直接影响,这是内部测试增强。2) 对系统:提升了SM120架构上FP8量化模型的测试覆盖率,有助于早期发现该硬件配置下的回归问题。3) 对团队:CI流水线将更全面地验证FP8量化功能,特别是针对RTX 5090等SM120设备。影响程度中等,因为它针对特定硬件和量化格式,但作为#20600的一部分,是整体测试改进的重要一环。

外部模型依赖 准确性阈值风险 CI 执行时间增加

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR为SM120架构GPU(如RTX 5090)新增了FP8量化模型的CI测试,覆盖逐张量(Llama-3.1-8B-Instruct-FP8)和分块(Qwen3-4B-Instruct-2507-FP8)两种量化格式,通过GSM8K准确性评估验证功能。这是解决#20600测试覆盖率问题的一部分,填补了单5090 GPU上FP8测试的空白,风险较低但提升了特定硬件的测试完整性。

功能与动机

动机:根据PR body,主要目标是“改进SM120上量化模型测试的覆盖率”。现有测试已包含Blackwell多GPU上的FP4覆盖和其他套件中的FP8测试,但缺少在单5090/SM120上的FP8量化模型测试。PR作者指出这是“解决#20600的众多措施之一”。

关键表述

"Missing single-5090 coverage for these tests. This PR addresses coverage for FP8-quantized models in particular."

实现拆解

实现集中在一个新增的测试文件中:

文件路径 关键内容 作用
test/registered/quant/test_fp8_gemm_sm120.py 定义基类FP8GemmSM120Base和两个测试子类 封装服务器启动、GSM8K评估和清理逻辑

核心逻辑

  1. 基类设计FP8GemmSM120Base 提供通用的setUpClass(启动服务器)和test_gsm8k(运行评估)方法。
  2. 测试注册:通过register_cuda_ci(est_time=120, suite="stage-b-test-small-1-gpu") 将测试集成到CI流水线。
  3. 两种量化格式测试
    • TestFP8PerTensorGemmSM120Auto:测试逐张量量化的Llama模型,准确性阈值≥0.73。
    • TestFP8BlockwiseGemmSM120Auto:测试分块量化的Qwen模型,准确性阈值≥0.87。
  4. 硬件检查:使用@unittest.skipIf(get_device_sm() < 100, "Test requires CUDA SM 100 or higher") 确保仅在SM100+设备运行。

评论区精华

review讨论非常简短但关键,体现了对测试覆盖完整性的关注:

b8zhong: "Looks good. Can we also add Qwen/Qwen3-4B-Instruct-2507-FP8. The quantization format will be a bit different (blockwise vs per-tensor scale)."

作者DerekY2在issue评论中回应“刚刚添加了👍”,并在第二次提交中实现了该建议,确保了测试同时覆盖两种主要的FP8量化格式。

风险与影响

风险

  1. 外部依赖:测试依赖Hugging Face模型仓库,网络或模型可用性问题可能导致CI失败。
  2. 阈值设置:准确性阈值(0.73和0.87)可能因模型更新或评估波动导致CI不稳定。
  3. 执行时间:预估120秒可能增加CI流水线负担。

影响

  • 对用户:无直接影响。
  • 对系统:提升了SM120设备上FP8量化功能的测试覆盖率,有助于早期发现回归。
  • 对团队:CI将更全面验证FP8量化,特别是针对RTX 5090等硬件,作为#20600整体测试改进的一部分。

关联脉络

与历史PR的关联

  1. #21888 和 #21576:都涉及FP8量化相关修改,属于同一技术领域,本PR的测试可能覆盖这些变更。
  2. #21233:涉及量化代码重构,本PR的测试有助于验证重构后的功能。

演进方向:本PR是#20600测试覆盖率提升计划的一部分,近期多个PR(如#21888、#21576)都在加强量化相关测试,表明团队正系统性地完善量化功能的验证体系,特别是在不同硬件架构上的覆盖。

参与讨论