Skip to content

feat: sm100fp8fp4 gemm#971

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

feat: sm100fp8fp4 gemm#971
qqbbiu wants to merge 4 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 工作前移到初始化阶段,方向上有利于减少热路径开销。

@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!

@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 精度变化。

@LLLLKKKK
Copy link
Copy Markdown
Collaborator

LLLLKKKK commented May 8, 2026

AI Code Review - PR #971

Status: BLOCKING

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

Blocking Issues

P1

  • MoE 在 SM100 默认切到 FP4 缺少显式兼容开关 @ rtp_llm/models_py/modules/factory/fused_moe/impl/cuda/executors/deepgemm_hybrid_executor.py:148
    • 建议:默认保持 FP8,通过标准 config/server args 或明确量化配置启用 FP4,并补充关闭、fallback 与质量回归测试。

Checklist Violations (12 fail / 99 total)

General Principles Checklist

  • [6.1] Architecture — 分层边界:新概念在正确层级,不泄漏内部 → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    MoE FP4 开关直接读取 DG_USE_FP4_ON_SM100,绕过标准 config/server args 链路,默认行为对调用方不透明。
  • [6.1] Architecture — 兼容性:公开 API/持久数据/配置/环境迁移安全 → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    SM100 MoE 默认从 FP8 w13/w1 GEMM 切到 FP4,属于输出行为默认变更,且测试阈值被放宽。
  • [6.1] Architecture — 回滚路径:风险行为存在运维回滚手段 → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    虽然可用 DG_USE_FP4_ON_SM100=0 关闭,但这是隐式环境变量,未接入标准配置链路,默认开启时回滚不可见。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    测试只放宽 SM100 diff 阈值和增加依赖,未覆盖 MoE 默认开启、关闭开关、符号缺失 fallback 与质量影响。
  • [6.1] Tests — 边界 case 覆盖(空、单元素、最大值) → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    新增 MoE FP4 默认路径没有覆盖 env 关闭、符号缺失、masked/contiguous 边界组合。
  • [6.1] Tests — 分布式/跨平台变更有对应覆盖 → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    变更专门面向 SM100/GB200 和 MoE executor,但新增测试未证明默认 FP4 在关闭/fallback 分支下跨平台安全。
  • [6.1] Quality — PR description 说明动机与设计 → checklist-only
    本地 packet 未提供完整 PR description;已有具体默认行为风险单独升级为 issue。

RTP-LLM Checklist

  • [A] 兼容性与配置 — 默认值变更已评估对现有用户影响 → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    MoE 中 DG_USE_FP4_ON_SM100 默认值为 "1",SM100 默认启用低精度 FP4,但缺少标准配置和质量评估证据。
  • [B] 正确性与逻辑 — 边界 case(空输入、单元素、最大值) → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    新增默认 FP4 MoE 路径缺少关闭、fallback、masked/contiguous 边界组合测试。
  • [H] 测试与 CI — 测试覆盖充分:大重构等价覆盖,新功能端到端测试 → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    新增默认 MoE FP4 路径和 fallback 行为,但测试只放宽 SM100 阈值,未覆盖显式开启/关闭和符号缺失。
  • [I] 代码质量 — 同一功能用统一工具函数 → issue MoE 在 SM100 默认切到 FP4 缺少显式兼容开关
    同一 FP4 开关在 Linear 中默认关闭并模块级缓存,MoE 中运行时读取且默认开启,行为不统一。

Python Static-First Checklist

  • [P.F] 语言陷阱 — 禁止模块级 import 副作用 → checklist-only
    Linear 中仍有模块级读取 DG_USE_FP4_ON_SM100,但默认关闭;主要兼容风险来自 MoE 默认开启,已单独升级为 issue。

Strengths

  • CuteDSL 可选导入失败后,executor 选择条件已增加 callable 检查,避免 NoneType 延迟崩溃。
  • weight scale 预打包把部分 per-forward 工作前移到初始化阶段,有利于降低热路径开销。
  • Linear FP4 路径已改为默认关闭,减少了线性层默认精度行为变更风险。

@LLLLKKKK
Copy link
Copy Markdown
Collaborator

LLLLKKKK commented May 8, 2026

AI Code Review - PR #971

Status: LGTM

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

lgtm ready to ci

Non-blocking Suggestions

P2

  • FP4 opt-in 路径缺少实际启用与 fallback 测试 @ rtp_llm/models_py/modules/factory/fused_moe/impl/cuda/executors/test/deepep_normal_executor_sm100_test.py:16
    • 建议:补充参数化 SM100 用例,显式覆盖 FP4 开启、关闭、DeepGEMM FP4 符号缺失 fallback,以及 Linear/MoE masked/contiguous 正确性。
  • Linear 与 MoE 的 FP4 开关读取时机不一致 @ rtp_llm/models_py/modules/factory/linear/impl/cuda/fp8_deepgemm_linear.py:32
    • 建议:抽出统一的 FP4 enable helper 或接入标准配置链路,并在 Linear/MoE 初始化时使用同一读取时机。

Checklist Violations (9 fail / 78 total)

General Principles Checklist

  • [6.1] Architecture — 状态不变量:创建/更新/失败/重试/回滚路径有效 → issue Linear 与 MoE 的 FP4 开关读取时机不一致
    Linear 与 MoE 对 DG_USE_FP4_ON_SM100 的读取时机不同,FP4 启用状态可能在同一进程内不一致。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    新增 FP4 Linear/MoE opt-in 和 fallback 行为,但测试 diff 未显式启用 DG_USE_FP4_ON_SM100 或覆盖符号缺失 fallback。
  • [6.1] Tests — 边界 case 覆盖(空、单元素、最大值) → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    FP4 opt-in 新分支缺少 env 关闭、符号缺失、masked/contiguous 与不同 batch 组合覆盖。
  • [6.1] Tests — 分布式/跨平台变更有对应覆盖 → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    变更专门面向 SM100/GB200 DeepGEMM,但新增测试没有证明 FP4 opt-in 和 fallback 在 SM100 下真实执行。
  • [6.1] Quality — PR description 说明动机与设计 → checklist-only
    本地 review packet 只提供标题和 diff,未包含完整设计说明;已有具体测试和开关一致性问题单独反馈。

RTP-LLM Checklist

  • [H] 测试与 CI — 测试覆盖充分:大重构等价覆盖,新功能端到端测试 → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    测试没有显式开启 DG_USE_FP4_ON_SM100,也没有验证 FP4 符号缺失 fallback 或 MoE/Linear 两类 FP4 路径。
  • [I] 代码质量 — 同一功能用统一工具函数 → issue Linear 与 MoE 的 FP4 开关读取时机不一致
    同一 DG_USE_FP4_ON_SM100 开关在 Linear 中 import 时缓存,在两个 MoE executor 中 init 时读取,读取时机不统一。

Python Static-First Checklist

  • [P.F] 语言陷阱 — 禁止模块级 import 副作用 → issue Linear 与 MoE 的 FP4 开关读取时机不一致
    fp8_deepgemm_linear 在模块级读取 DG_USE_FP4_ON_SM100 并固化,MoE 则在 init 读取,导致同一开关行为不一致。
  • [P.G] 测试规范 — 数据驱动测试用 pytest.mark.parametrize → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    新增 FP4 env/fallback 组合没有参数化测试;当前 SM100 测试只放宽阈值,没有覆盖组合矩阵。

Strengths

  • FP4 路径已改为默认关闭,并增加 has_fp8_fp4_gemm_nt 门控,降低旧 DeepGEMM 环境的回归风险。
  • masked GEMM wrapper 通过 b_prepacked 默认 False 保持旧调用约定,同时允许权重 scale 初始化期预打包。

@LLLLKKKK
Copy link
Copy Markdown
Collaborator

LLLLKKKK commented May 8, 2026

AI Code Review - PR #971

Status: LGTM

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

lgtm ready to ci

Non-blocking Suggestions

P2

  • FP4 opt-in 路径缺少实际启用与 fallback 测试 @ rtp_llm/models_py/modules/factory/fused_moe/impl/cuda/executors/test/deepep_normal_executor_sm100_test.py:16
    • 建议:补充参数化 SM100 用例,显式覆盖 FP4 开启/关闭、DeepGEMM FP4 符号缺失 fallback,以及 Linear/MoE masked/contiguous 正确性。
  • Linear 与 MoE 的 FP4 开关读取时机不一致 @ rtp_llm/models_py/modules/factory/linear/impl/cuda/fp8_deepgemm_linear.py:32
    • 建议:抽出统一的 FP4 enable helper 或接入标准配置链路,并让 Linear/MoE 在同一生命周期读取同一开关值。
  • 必需 DeepGEMM 符号缺失被静默降级到首个请求 @ rtp_llm/models_py/kernels/cuda/deepgemm_wrapper.py:141
    • 建议:仅对新 FP4 可选符号容忍缺失;对既有必需符号保持 fail-fast,或增加 per-symbol capability 并在 executor 选择阶段检查。

Checklist Violations (12 fail / 78 total)

General Principles Checklist

  • [6.1] Software Engineering — DRY:重复非平凡逻辑被抽取或显式复用 → issue Linear 与 MoE 的 FP4 开关读取时机不一致
    同一 DG_USE_FP4_ON_SM100 开关在 Linear 模块级缓存,在 MoE 初始化时读取,缺少统一 helper。
  • [6.1] Architecture — 状态不变量:创建/更新/失败/重试/回滚路径有效 → issue Linear 与 MoE 的 FP4 开关读取时机不一致
    同一 env 在 import/init 不同阶段读取,FP4 启用状态可能在同一进程内不一致。
  • [6.1] Architecture — 错误语义:fail-fast/retry/fallback/silent 行为显式 → issue 必需 DeepGEMM 符号缺失被静默降级到首个请求
    DeepGEMM 必需符号缺失现在只 warning,executor 选择阶段仍可能通过,错误延迟到首个 forward。
  • [6.1] Tests — 新逻辑有聚焦单测 + 相关集成/smoke 测试 → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    新增 FP4 Linear/MoE opt-in 和 fallback 行为,但测试没有显式启用 env 或断言 FP4 分支执行。
  • [6.1] Tests — 边界 case 覆盖(空、单元素、最大值) → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    FP4 opt-in 新分支缺少 env 关闭、符号缺失、masked/contiguous 与不同 batch 组合覆盖。
  • [6.1] Tests — 分布式/跨平台变更有对应覆盖 → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    变更专门面向 SM100/GB200 DeepGEMM,但新增测试未证明 FP4 opt-in/fallback 在 SM100 下真实执行。
  • [6.1] Quality — PR description 说明动机与设计 → checklist-only
    本地 review packet 未提供完整 PR description;具体可审风险已通过测试、开关和符号语义 issue 反馈。

RTP-LLM Checklist

  • [A] 兼容性与配置 — 可选依赖 lazy import,pybind 新字段有 C++ 默认值 → issue 必需 DeepGEMM 符号缺失被静默降级到首个请求
    FP4 可选符号缺失可降级,但当前 catch 覆盖所有 DeepGEMM symbols,必需符号缺失也被延迟。
  • [H] 测试与 CI — 测试覆盖充分:大重构等价覆盖,新功能端到端测试 → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    测试没有显式开启 DG_USE_FP4_ON_SM100,也没有验证 FP4 符号缺失 fallback 或 MoE/Linear 两类 FP4 路径。
  • [I] 代码质量 — 同一功能用统一工具函数 → issue Linear 与 MoE 的 FP4 开关读取时机不一致
    同一 DG_USE_FP4_ON_SM100 开关在 Linear 中 import 时缓存,在两个 MoE executor 中 init 时读取。

Python Static-First Checklist

  • [P.F] 语言陷阱 — 禁止模块级 import 副作用 → issue Linear 与 MoE 的 FP4 开关读取时机不一致
    fp8_deepgemm_linear 在模块级读取 DG_USE_FP4_ON_SM100 并固化,MoE 则在 init 读取。
  • [P.G] 测试规范 — 数据驱动测试用 pytest.mark.parametrize → issue FP4 opt-in 路径缺少实际启用与 fallback 测试
    新增 FP4 env/fallback 组合没有参数化测试;当前 SM100 测试只放宽阈值,没有覆盖组合矩阵。

Strengths

  • FP4 路径默认关闭并增加 has_fp8_fp4_gemm_nt 门控,降低旧 DeepGEMM 环境的默认回归风险。
  • b_prepacked 默认保持 False,公共 masked wrapper 的旧调用约定仍然兼容,同时允许权重 scale 初始化期预打包。

@wht21
Copy link
Copy Markdown
Collaborator

wht21 commented May 8, 2026

internal source has been updated, please review the changes!

1 similar comment
@wht21
Copy link
Copy Markdown
Collaborator

wht21 commented May 8, 2026

internal source has been updated, please review the changes!

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