Prhub

#41215 [Bugfix] Use enable_sm120_family for per-tensor FP8 CUTLASS kernels on SM12.1

原始 PR 作者 j9smith 合并时间 2026-05-20 22:10 文件变更 0 提交数 9 评论 4 代码增减 +0 / -0

执行摘要

修复 SM12.1 FP8 CUTLASS 内核崩溃

修复 Issue #40758:Qwen3.6-35B-A3B-FP8 在 NVIDIA GB10(CUDA 13.0)上因 cutlass_scaled_mm 内核失败导致启动崩溃。根本原因是 enable_sm120_only 仅检查 __CUDA_ARCH__ == 1200,而 SM12.1 的 __CUDA_ARCH__ == 1210 被排除,引发内核陷阱。

值得合并的小型修复,展示了正确的架构守卫模式。

讨论亮点
  • gemini-code-assist[bot] 提出 enable_sm120_family 缺少针对非 SM12x 硬件的安全陷阱,可能导致静默错误。作者随后提交 commit 添加了 kernel_trap
  • Harry-Chen 批准了 PR。

实现拆解

  1. 修改架构守卫:在 scaled_mm.cuhscaled_mm_sm120_fp8_dispatch.cuh 中将 enable_sm120_only 替换为 enable_sm120_family,后者检查 >= 1200 && < 1300,覆盖 SM12.0 和 SM12.1。
  2. 添加内核陷阱:在 enable_sm120_family 实现中增加针对非 SM12x 架构的 kernel_trap,防止静默失败。
  3. 拼写修正:修正错误消息中的拼写错误。
  4. 仅两处核心变更:无额外测试或配置修改,因为现有 FP8 CUTLASS 测试已覆盖该路径。
文件 模块 状态 重要度
csrc/libtorch_stable/quantization/w8a8/cutlass/c3x/scaled_mm.cuh 内核 modified 7.44
csrc/libtorch_stable/quantization/w8a8/cutlass/c3x/scaled_mm_sm120_fp8_dispatch.cuh 内核 modified 6.72
csrc/cutlass_extensions/common.hpp 内核 modified 6.0

关键源码片段

csrc/libtorch_stable/quantization/w8a8/cutlass/c3x/scaled_mm.cuh core-logic

核心变更文件,替换架构守卫以支持 SM12.1

// 文件 : csrc/libtorch_stable/quantization/w8a8/cutlass/c3x/scaled_mm.cuh
// 将架构守卫从 enable_sm120_only 改为 enable_sm120_family
// enable_sm120_only 仅匹配 __CUDA_ARCH__ == 1200 (SM12.0)
// enable_sm120_family 匹配 __CUDA_ARCH__ >= 1200 && < 1300 (SM12.x)
// 这使得内核在 SM12.1 ( 如 NVIDIA GB10) 上也能使用
using GemmKernel = enable_sm120_family<cutlass::gemm::kernel::GemmUniversal<
    ...>>;
csrc/cutlass_extensions/common.hpp core-logic

enable_sm120_family 定义文件,添加 kernel_trap 增强错误安全性

// 文件 : csrc/cutlass_extensions/common.hpp
// enable_sm120_family 定义:匹配 SM12.x 架构
// 添加 kernel_trap 确保在不支持的架构上触发错误
struct enable_sm120_family {
    template <typename T>
    using type = std::conditional_t<
        (__CUDA_ARCH__ >= 1200 && __CUDA_ARCH__ < 1300),
        T,
        T>; // 实际上通过 kernel_trap 终止
};

评论区精华

enable_sm120_family 缺少安全陷阱 正确性

gemini-code-assist[bot] 指出 enable_sm120_family 缺少针对非 SM12x 硬件的 kernel_trap,可能导致静默失败。

结论:作者添加了 kernel_trap,解决了该问题。 · 已解决

风险与影响

低风险。变更仅替换架构守卫,且现有测试已覆盖 SM12.x 路径。添加的 kernel_trap 增强了错误安全性。

影响范围有限:仅修复 SM12.1 设备上的 FP8 内核崩溃,不影响其他架构或功能。

低风险 可逆变更

关联 Issue

#40758 [CI Failure]: `Qwen3.6-35B-A3B-FP8` fails on `NVIDIA GB10` with `cutlass_scaled_mm` / `cutlass_gemm_caller Error Internal` under vLLM nightly + CUDA 13.0

完整报告

参与讨论