Skip to content

feat: sm100fp8fp4 gemm#971

Open
qqbbiu wants to merge 5 commits intoalibaba:mainfrom
qqbbiu:GB200_W4A8
Open

feat: sm100fp8fp4 gemm#971
qqbbiu wants to merge 5 commits intoalibaba:mainfrom
qqbbiu:GB200_W4A8

Conversation

@qqbbiu
Copy link
Copy Markdown
Collaborator

@qqbbiu qqbbiu commented May 7, 2026

SM100支持w4a8 gemm

@qqbbiu qqbbiu requested a review from LLLLKKKK as a code owner May 7, 2026 06:55
@qqbbiu qqbbiu enabled auto-merge (rebase) May 7, 2026 06:58
@LLLLKKKK
Copy link
Copy Markdown
Collaborator

LLLLKKKK commented May 7, 2026

AI Code Review - PR #971

Status: BLOCKING

Summary: P0/0 · P1/2 · P2/1 · P3/0

Blocking Issues

P1

  • 导入时强制解析 FP4 符号会破坏旧 DeepGEMM 环境 @ rtp_llm/models_py/kernels/cuda/deepgemm_wrapper.py:144
    • 建议:将 fp8_fp4_gemm_nt 改为 fp8_fp4_gemm_nt() 首次调用时单独 lazy resolve,或在符号缺失时仅禁用 FP4 路径并保留原 FP8/BF16 可用。
  • masked GEMM 包装器丢失 weight scale 自动打包兼容性 @ rtp_llm/models_py/kernels/cuda/deepgemm_wrapper.py:631
    • 建议:保留 wrapper 内对 b[1] 的 dtype/shape 兼容打包,或新增内部 fast path 只给已预打包权重使用,避免改变现有公共函数语义。

Non-blocking Suggestions

P2

  • 默认启用的 SM100 FP4 路径缺少对应测试覆盖 @ rtp_llm/models_py/modules/factory/linear/impl/cuda/fp8_deepgemm_linear.py:152
    • 建议:补充 SM100 linear 与 MoE FP4 正确性测试,覆盖 FP4 开启、环境变量关闭、DeepGEMM 符号缺失 fallback、masked/contiguous 两条路径。

Checklist Violations (7 fail / 56 total)

General Principles Checklist

  • [6.1] Software Engineering — OCP:本地扩展点优先于修改中心逻辑 → issue 导入时强制解析 FP4 符号会破坏旧 DeepGEMM 环境
    _新增 FP4 符号被加入 lazy_init_deep_gemm_once 的全量解析列表,旧 deep_gemm 环境会影响所有原有符号。
  • [6.1] Architecture — 兼容性:公开 API/持久数据/配置/环境迁移安全 → issue masked GEMM 包装器丢失 weight scale 自动打包兼容性
    m_grouped_fp8_gemm_nt_masked 的 b scale 自动打包被移除,公共 wrapper 调用约定发生变化。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue 默认启用的 SM100 FP4 路径缺少对应测试覆盖
    本次新增默认开启的 SM100 FP4 linear/MoE 路径,但 diff 中没有任何 test 文件变更。
  • [6.1] Tests — 边界 case 覆盖(空、单元素、最大值) → checklist-only
    未看到新增 FP4 路径的边界测试;该问题已被“默认启用的 SM100 FP4 路径缺少对应测试覆盖”概括,不单独拆分。
  • [6.1] Tests — 分布式/跨平台变更有对应覆盖 → checklist-only
    SM100/GB200 特定路径未见测试更新;已并入缺少 SM100 FP4 覆盖的问题。
  • [6.1] Quality — PR description 说明动机与设计 → checklist-only
    本地 review packet 未提供设计说明;已有具体阻塞问题优先反馈,这里作为信息性缺口。

Python Static-First Checklist

  • [P.G] 测试规范 — 数据驱动测试用 pytest.mark.parametrize → checklist-only
    本 PR 未新增测试文件;缺少 FP4 路径测试已作为单独 P2 问题反馈。

Strengths

  • 权重 scale 预打包把原来的 per-forward 工作前移到初始化阶段,方向上有利于热路径性能。
  • FP4 转换路径有环境变量开关和失败回退日志,便于上线时快速关闭新路径。

@LLLLKKKK
Copy link
Copy Markdown
Collaborator

LLLLKKKK commented May 7, 2026

AI Code Review - PR #971

Status: BLOCKING

Summary: P0/0 · P1/2 · P2/1 · P3/0

Blocking Issues

P1

  • FP4 启用条件未校验 DeepGEMM GEMM 符号可用性 @ rtp_llm/models_py/modules/factory/linear/impl/cuda/fp8_deepgemm_linear.py:156
    • 建议:增加 fp8_fp4_gemm_nt 可用性 predicate,并在 Linear/MoE 启用 FP4 前检查;符号缺失时保持 FP8 路径。
  • masked GEMM 公共 wrapper 仍改变了 weight scale 打包约定 @ rtp_llm/models_py/kernels/cuda/deepgemm_wrapper.py:613
    • 建议:保留 wrapper 内对 b[1] 的兼容打包,或新增显式 fast-path API 给已预打包权重使用,避免同名函数改变调用契约。

Non-blocking Suggestions

P2

  • 默认 FP4 路径缺少回退与开关覆盖测试 @ rtp_llm/models_py/modules/factory/linear/impl/cuda/fp8_deepgemm_linear.py:31
    • 建议:补充 SM100 用例覆盖 FP4 enabled、env 关闭、fp8_fp4_gemm_nt 缺失 fallback、linear/MoE masked/contiguous 正确性。

Checklist Violations (11 fail / 67 total)

General Principles Checklist

  • [6.1] Software Engineering — OCP:本地扩展点优先于修改中心逻辑 → issue FP4 启用条件未校验 DeepGEMM GEMM 符号可用性
    FP4 可选符号缺失时只 warning,但启用逻辑没有局部能力检查,新增硬件路径会影响既有 DeepGEMM 选择逻辑。
  • [6.1] Architecture — 状态不变量:创建/更新/失败/重试/回滚路径有效 → issue FP4 启用条件未校验 DeepGEMM GEMM 符号可用性
    self.use_fp4 只由转换成功设置,没有绑定实际 fp8_fp4_gemm_nt 符号可用性,状态可能表示可用但 forward 失败。
  • [6.1] Architecture — 错误语义:fail-fast/retry/fallback/silent 行为显式 → issue FP4 启用条件未校验 DeepGEMM GEMM 符号可用性
    缺失 FP4 GEMM 符号时 import 只 warning,但后续 FP4 分支不是显式 fallback,而是在 forward 抛通用 DeepGEMM 不可用错误。
  • [6.1] Architecture — 兼容性:公开 API/持久数据/配置/环境迁移安全 → issue masked GEMM 公共 wrapper 仍改变了 weight scale 打包约定
    m_grouped_fp8_gemm_nt_masked 同名 wrapper 改为要求调用方预打包 b scale,既有未预打包调用会改变行为。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue 默认 FP4 路径缺少回退与开关覆盖测试
    diff_paths 没有测试文件;默认 FP4、符号缺失 fallback、env 关闭和 MoE/Linear 分支未见新增覆盖。
  • [6.1] Tests — 边界 case 覆盖(空、单元素、最大值) → checklist-only
    未看到 FP4 分支边界测试;该风险已由“默认 FP4 路径缺少回退与开关覆盖测试”概括,不单独拆 issue。
  • [6.1] Tests — 分布式/跨平台变更有对应覆盖 → checklist-only
    SM100/GB200 特定路径和 MoE executor 未见新增覆盖;已并入 FP4 测试缺口问题。

RTP-LLM Checklist

  • [A] 兼容性与配置 — 默认值变更已评估对现有用户影响 → issue 默认 FP4 路径缺少回退与开关覆盖测试
    SM100 默认从 FP8 路径切到 FP4,但缺少默认启用、关闭开关和 fallback 的测试证明。
  • [A] 兼容性与配置 — 可选依赖 lazy import,pybind 新字段有 C++ 默认值 → issue FP4 启用条件未校验 DeepGEMM GEMM 符号可用性
    FP4 转换工具 lazy import 了,但实际 GEMM 符号缺失时仍可能启用 FP4,optional dependency 能力检查不完整。
  • [H] 测试与 CI — 测试覆盖充分:大重构等价覆盖,新功能端到端测试 → issue 默认 FP4 路径缺少回退与开关覆盖测试
    默认启用的 FP4 linear/MoE 以及旧 DeepGEMM fallback 没有新增端到端或单测覆盖。

Python Static-First Checklist

  • [P.G] 测试规范 — 数据驱动测试用 pytest.mark.parametrize → checklist-only
    本 PR 未新增测试文件;缺少 FP4 fallback/env 覆盖已作为单独 P2 问题反馈。

Strengths

  • 权重 scale 预打包把部分 per-forward 工作前移到初始化阶段,方向上有利于减少热路径开销。
  • FP4 转换失败时已有 warning 和 FP8 回退意图,便于上线阶段定位转换问题。

@LLLLKKKK
Copy link
Copy Markdown
Collaborator

LLLLKKKK commented May 7, 2026

AI Code Review - PR #971

Status: BLOCKING

Summary: P0/0 · P1/1 · P2/1 · P3/0

Blocking Issues

P1

  • masked GEMM 公共 wrapper 改变 weight scale 打包契约 @ rtp_llm/models_py/kernels/cuda/deepgemm_wrapper.py:641
    • 建议:保留 wrapper 内对 b[1] 的兼容打包,或新增显式 fast-path API 仅供已预打包权重使用。

Non-blocking Suggestions

P2

  • 默认 FP4 路径缺少 SM100 回退覆盖测试 @ rtp_llm/models_py/modules/factory/linear/impl/cuda/fp8_deepgemm_linear.py:31
    • 建议:补充 SM100 FP4 linear/MoE 测试,覆盖开启、关闭、符号缺失 fallback 以及 masked/contiguous 两条路径。

Checklist Violations (9 fail / 67 total)

General Principles Checklist

  • [6.1] Architecture — 兼容性:公开 API/持久数据/配置/环境迁移安全 → issue masked GEMM 公共 wrapper 改变 weight scale 打包契约
    m_grouped_fp8_gemm_nt_masked 同名公共 wrapper 改为要求 b scale 预打包,既有 raw scale 调用会被破坏。
  • [6.1] Quality — PR description 说明动机与设计 → checklist-only
    本地 review packet 仅提供标题和 diff,未提供设计说明;已有具体兼容与测试问题单独反馈。
  • [6.1] Software Engineering — OCP:本地扩展点优先于修改中心逻辑 → issue masked GEMM 公共 wrapper 改变 weight scale 打包契约
    为了优化已预打包权重,直接改变 m_grouped_fp8_gemm_nt_masked 公共 wrapper 语义,影响既有调用。
  • [6.1] Tests — 分布式/跨平台变更有对应覆盖 → issue 默认 FP4 路径缺少 SM100 回退覆盖测试
    SM100/GB200 特定 FP4 默认路径和 MoE executor 分支未见新增测试覆盖。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue 默认 FP4 路径缺少 SM100 回退覆盖测试
    新增默认 FP4 linear/MoE 路径、scale 预打包和 fallback 行为,但 diff_paths 没有任何 test 文件。
  • [6.1] Tests — 边界 case 覆盖(空、单元素、最大值) → checklist-only
    未看到 FP4 分支边界测试;该风险已由默认 FP4 路径测试缺口问题概括,不单独拆 issue。

RTP-LLM Checklist

  • [A] 兼容性与配置 — 默认值变更已评估对现有用户影响 → issue 默认 FP4 路径缺少 SM100 回退覆盖测试
    SM100 默认开启 FP4 路径,但缺少 enabled/env 关闭/符号缺失 fallback 的测试证明。
  • [H] 测试与 CI — 测试覆盖充分:大重构等价覆盖,新功能端到端测试 → issue 默认 FP4 路径缺少 SM100 回退覆盖测试
    默认启用的 SM100 FP4 linear/MoE 路径、fallback 和 wrapper 契约变化没有新增测试覆盖。

Python Static-First Checklist

  • [P.G] 测试规范 — 数据驱动测试用 pytest.mark.parametrize → checklist-only
    本 PR 未新增测试文件;缺少 SM100 FP4 fallback/env 覆盖已作为单独 P2 问题反馈。

Strengths

  • FP4 启用前增加 has_fp8_fp4_gemm_nt 能力检查,避免旧 DeepGEMM 环境直接进入 FP4 GEMM。
  • 权重 scale 预打包把部分 per-forward 工作前移到初始化阶段,方向上有利于减少热路径开销。

Add b_prepacked parameter (default False) to maintain backward
compatibility for callers passing raw float32 scales. MoE executors
that pre-pack at init time now pass b_prepacked=True to skip
redundant packing on the hot path.
@LLLLKKKK
Copy link
Copy Markdown
Collaborator

LLLLKKKK commented May 7, 2026

AI Code Review - PR #971

Status: LGTM

Summary: P0/0 · P1/0 · P2/1 · P3/0

lgtm ready to ci

Non-blocking Suggestions

P2

  • 默认 FP4 路径缺少关闭与回退覆盖测试 @ rtp_llm/models_py/modules/factory/linear/impl/cuda/fp8_deepgemm_linear.py:32
    • 建议:补充 SM100 用例覆盖默认开启、DG_USE_FP4_ON_SM100=0、符号缺失 fallback,以及 Linear/MoE masked/contiguous 正确性。

Checklist Violations (4 fail / 60 total)

General Principles Checklist

  • [6.1] Tests — 分布式/跨平台变更有对应覆盖 → issue 默认 FP4 路径缺少关闭与回退覆盖测试
    SM100 特定默认 FP4 路径涉及 Linear 与 MoE executor,但 diff 未新增关闭、符号缺失 fallback 或 grouped 分支覆盖。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue 默认 FP4 路径缺少关闭与回退覆盖测试
    新增默认 FP4、weight scale 预打包和 fallback 行为;diff_paths 没有测试文件变更。
  • [6.1] Tests — 边界 case 覆盖(空、单元素、最大值) → issue 默认 FP4 路径缺少关闭与回退覆盖测试
    新增 FP4 fallback/env 分支未见边界覆盖;已并入默认 FP4 覆盖缺口。

RTP-LLM Checklist

  • [H] 测试与 CI — 测试覆盖充分:大重构等价覆盖,新功能端到端测试 → issue 默认 FP4 路径缺少关闭与回退覆盖测试
    默认开启的 SM100 FP4 Linear/MoE 路径与 fallback/关闭开关未见新增端到端或单测覆盖。

Strengths

  • b_prepacked 默认保持 False,公共 masked wrapper 的旧调用约定已恢复兼容。
  • FP4 路径增加 has_fp8_fp4_gemm_nt() 门控,避免旧 DeepGEMM 环境直接进入 Linear FP4 GEMM。

@wht21
Copy link
Copy Markdown
Collaborator

wht21 commented May 7, 2026

internal source has been updated, please review the changes!

…sion threshold

- Add try/except guard in fp4_kernel/__init__.py for flashinfer_cutedsl_moe
  import to prevent cascade failure when cuda.bindings is unavailable
- Register cuda-bindings, cuda-python, cuda-pathfinder, nvidia-cutlass-dsl-libs-base
  as Bazel pip targets and add them to FP4 test BUILD deps
- Make deepep_normal_executor_test precision threshold configurable via
  DIFF_THRESHOLD class variable; SM100 subclass uses 0.01 (FP4 path)

Co-authored-by: Cursor <cursoragent@cursor.com>
@LLLLKKKK
Copy link
Copy Markdown
Collaborator

LLLLKKKK commented May 7, 2026

AI Code Review - PR #971

Status: BLOCKING

Summary: P0/0 · P1/2 · P2/0 · P3/0

Blocking Issues

P1

  • 可选 CuteDSL 导入失败后仍会选择 FP4 executor @ rtp_llm/models_py/kernels/cuda/fp4_kernel/__init__.py:10
    • 建议:在 executor check_conditions 中检查 callable(flashinfer_cutedsl_moe_masked),或导出会抛清晰 ImportError 的 stub 并让策略选择回退。
  • SM100 默认切到 FP4 缺少显式兼容开关 @ rtp_llm/models_py/modules/factory/linear/impl/cuda/fp8_deepgemm_linear.py:32
    • 建议:默认保持 FP8,通过标准 config/server args 显式启用 FP4,并补充质量评估与回滚说明。

Checklist Violations (9 fail / 56 total)

General Principles Checklist

  • [6.1] Architecture — 分层边界:新概念在正确层级,不泄漏内部 → issue SM100 默认切到 FP4 缺少显式兼容开关
    FP4 功能开关直接读取模块级环境变量,绕过标准 config/server args 链路,默认行为不透明。
  • [6.1] Architecture — 错误语义:fail-fast/retry/fallback/silent 行为显式 → issue 可选 CuteDSL 导入失败后仍会选择 FP4 executor
    flashinfer_cutedsl_moe_masked=None 后没有把 executor 判为不可用,错误会延迟到实际调用时变成 NoneType 崩溃。
  • [6.1] Architecture — 兼容性:公开 API/持久数据/配置/环境迁移安全 → issue SM100 默认切到 FP4 缺少显式兼容开关
    SM100 默认从 FP8 切到 FP4,且测试阈值放宽,属于输出行为默认变更。
  • [6.1] Architecture — 回滚路径:风险行为存在运维回滚手段 → issue SM100 默认切到 FP4 缺少显式兼容开关
    虽有 DG_USE_FP4_ON_SM100=0,但它不是标准参数链路,默认开启会让回滚依赖隐式环境变量。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue SM100 默认切到 FP4 缺少显式兼容开关
    新增测试覆盖了 SM100 精度阈值,但未覆盖 CuteDSL 导入失败后的策略回退,也未证明默认 FP4 对输出质量的影响可接受。
  • [6.1] Tests — 边界 case 覆盖(空、单元素、最大值) → issue 可选 CuteDSL 导入失败后仍会选择 FP4 executor
    依赖缺失是新增 optional import 的关键边界,但当前只把符号置 None,没有对应测试保证 executor 不会被选中。

RTP-LLM Checklist

  • [I] 代码质量 — 同一功能用统一工具函数 → issue SM100 默认切到 FP4 缺少显式兼容开关
    同一 FP4 开关在 linear 中模块级缓存、MoE 中运行时读取,且都绕过标准配置链路。

Python Static-First Checklist

  • [P.B] 错误处理 — 禁止 bare except 或静默吞异常 → checklist-only
    FP4 转换处 except Exception 是有意 fallback 到 FP8,未单独升级;默认开启 FP4 的兼容风险已由 issue 覆盖。
  • [P.F] 语言陷阱 — 禁止模块级 import 副作用 → issue SM100 默认切到 FP4 缺少显式兼容开关
    _USE_FP4_ON_SM100 在 import 时读取环境变量并固化默认行为,和运行时配置链路脱节。

Strengths

  • 权重 scale 预打包把原本每次 forward 的 UE8M0 packing 前移到初始化阶段,方向上能减少热路径开销。
  • SM100 MoE 测试显式区分精度阈值,说明作者意识到了 FP4 精度变化。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants