12 KiB
12 KiB
SM90 MegaMoE 开发日志
2026-06-17 23:55:32 CST
- 对应 clean 工作 commit:
1dafd0f17376d8730bebb472dc8e15d9645c6b52 - 用户请求摘要:重做 Phase 1 接口/基础设施提交,保证它作为独立 clean commit 在线性历史中出现,并通过远端测试。
- 本次提交的核心改动:
- 新增 SM90 MegaMoE host API:
get_symm_buffer_size_for_sm90_mega_moe、get_token_alignment_for_sm90_mega_moe、fp8_mega_moe。 - 新增 SM90 MegaMoE JIT heuristics、runtime launch glue、scheduler 和空 kernel stub。
- Python MegaMoE wrapper 支持按当前 CUDA device 区分 SM90/SM100,SM90 使用
(1, 128, 128)recipe 和 float SF 路径。 - SM90 symmetric buffer Phase 1 接口返回 8 个常规 view:
x、x_sf、topk_idx、topk_weights、l1_acts、l1_acts_sf、l2_acts、l2_acts_sf。 - 新增 Phase 1 smoke 测试脚本:
megamoe_dev_test_scripts/phase1/interface_smoke.py。 - 更新
AGENTS.md,记录 phase 测试脚本提交规范、开发日志规范和 60 秒左右 timeout 规则。 - 更新
MEGAMOE_SM90_DESIGN.md,将 Dispatch 与 L1 TMA/WGMMA 拆成独立 phase。
- 新增 SM90 MegaMoE host API:
- 关键文件列表:
AGENTS.mdMEGAMOE_SM90_DESIGN.mdcsrc/apis/sm90_mega.hppcsrc/jit_kernels/heuristics/sm90_mega_moe.hppcsrc/jit_kernels/impls/sm90_fp8_mega_moe.hppcsrc/python_api.cppdeep_gemm/__init__.pydeep_gemm/mega/__init__.pydeep_gemm/include/deep_gemm/impls/sm90_fp8_mega_moe.cuhdeep_gemm/include/deep_gemm/layout/mega_moe.cuhdeep_gemm/include/deep_gemm/scheduler/sm90_mega_moe.cuhmegamoe_dev_test_scripts/phase1/interface_smoke.py
- 详细开发流程:
- 本地从原混合 Phase 1/Phase 2 commit 回退到 Phase 0 基线,保留工作区改动并重新拆分 commit。
- 本地将 SM90 kernel 降到 Phase 1 空 kernel stub,仅保留 ABI、JIT 模板参数和 launch 静态检查。
- 本地将
get_symm_buffer_size_for_sm90_mega_moe降到 Phase 1 接口,返回 8 个常规 buffer views,不暴露 Phase 2 dispatch 内部状态。 - 本地新增
megamoe_dev_test_scripts/phase1/interface_smoke.py,验证 SM90 buffer views、float SF dtype、weight transform 和空 kernel launch。 - 本地静态检查:
git diff --check、python3 -m py_compile megamoe_dev_test_scripts/phase1/interface_smoke.py。 - 远端同步:
rsync -avR AGENTS.md MEGAMOE_SM90_DESIGN.md csrc/python_api.cpp deep_gemm/__init__.py deep_gemm/mega/__init__.py deep_gemm/include/deep_gemm/layout/mega_moe.cuh csrc/apis/sm90_mega.hpp csrc/jit_kernels/heuristics/sm90_mega_moe.hpp csrc/jit_kernels/impls/sm90_fp8_mega_moe.hpp deep_gemm/include/deep_gemm/impls/sm90_fp8_mega_moe.cuh deep_gemm/include/deep_gemm/scheduler/sm90_mega_moe.cuh megamoe_dev_test_scripts/phase1/interface_smoke.py g0034:/mnt/beegfs/lxy/DeepGEMM/。 - 远端 build:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && timeout 60s bash develop.sh'",通过。 - 远端 single-rank smoke:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && timeout 60s python3 megamoe_dev_test_scripts/phase1/interface_smoke.py'",通过。 - 远端 2-rank smoke:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && CUDA_VISIBLE_DEVICES=0,1 timeout 60s torchrun --standalone --nproc_per_node=2 megamoe_dev_test_scripts/phase1/interface_smoke.py'",通过。
- 测试结果和已知问题:
- Phase 1 build 和 smoke 测试均通过。
- single-rank 仍出现 PyTorch symmetric memory warning:
cuMulticastCreate failed with: "invalid argument",当前不影响 smoke。 - Phase 1 kernel 是空 kernel,不产生 dispatch/GEMM 输出;正确性只覆盖接口、buffer views、JIT 编译与 launch。
- 后续待办:
- 在线性历史中继续提交 Phase 2 dispatch-only 实现。
- Phase 3 开始实现 L1 TMA + 单 tile WGMMA,并增加 accumulator/reference 对比。
2026-06-18 00:00:45 CST
- 对应 clean 工作 commit:
540e5aeadc1b21dca8222a838ed6e5b6c4de93e8 - 用户请求摘要:在线性 Phase 1 commit 之后提交 Phase 2 dispatch-only 实现,并重新通过远端 single-rank、2-rank、8-rank correctness 测试。
- 本次提交的核心改动:
- 将 SM90 kernel 从 Phase 1 空 kernel 扩展为 Phase 2 dispatch-only kernel。
- 实现 dispatch workspace 清理、expert count、source token-topk index 写入、NVLink barrier、remote/local token/SF/top-k weight pull、token source metadata 写入、
l1_arrival_countrelease。 - 扩展 SM90 symmetric buffer views,额外暴露
l1_topk_weights、expert_recv_count_sum、l1_arrival_count、token_src_metadata供 Phase 2 correctness 检查。 - 更新 Python
SymmBuffer,SM90 分支解包 12 个 views,SM100 分支保持 8 个 views。 - 新增 Phase 2 correctness 脚本
megamoe_dev_test_scripts/phase2/dispatch_only_correctness.py,使用 torchrun-compatible distributed init。
- 关键文件列表:
csrc/apis/sm90_mega.hppdeep_gemm/mega/__init__.pydeep_gemm/include/deep_gemm/impls/sm90_fp8_mega_moe.cuhmegamoe_dev_test_scripts/phase2/dispatch_only_correctness.py
- 详细开发流程:
- 在 Phase 1 commit 和 Phase 1 日志 commit 之后,从原 dispatch-only 实现恢复 Phase 2 相关文件,保证历史顺序为 Phase 1 -> Phase 1 log -> Phase 2。
- 本地静态检查:
python3 -m py_compile megamoe_dev_test_scripts/phase2/dispatch_only_correctness.py、git diff --check。 - 远端同步:
rsync -avR csrc/apis/sm90_mega.hpp deep_gemm/mega/__init__.py deep_gemm/include/deep_gemm/impls/sm90_fp8_mega_moe.cuh megamoe_dev_test_scripts/phase2/dispatch_only_correctness.py g0034:/mnt/beegfs/lxy/DeepGEMM/。 - 远端 build:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && timeout 60s bash develop.sh'",通过。 - 远端 single-rank correctness:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && timeout 60s python3 megamoe_dev_test_scripts/phase2/dispatch_only_correctness.py --tokens-list 0,8,48,192'",通过。 - 远端 2-rank correctness:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && CUDA_VISIBLE_DEVICES=0,1 timeout 60s torchrun --standalone --nproc_per_node=2 megamoe_dev_test_scripts/phase2/dispatch_only_correctness.py --tokens-list 0,8,48,192'",通过。 - 远端 8-rank correctness:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 timeout 60s torchrun --standalone --nproc_per_node=8 megamoe_dev_test_scripts/phase2/dispatch_only_correctness.py --tokens-list 0,8,48,192'",通过。 - 确认远端无残留
dispatch_only_correctness/interface_smoke/torchrun进程。
- 测试结果和已知问题:
- Phase 2 build 通过。
- Phase 2 dispatch-only correctness 在 single-rank、2-rank、8-rank 下通过。
- 覆盖
num_tokens=0,8,48,192,并覆盖BLOCK_M=32/64/128。 - single-rank 仍出现 PyTorch symmetric memory warning:
cuMulticastCreate failed with: "invalid argument",当前不影响 correctness。
- 后续待办:
- Phase 3:在 Phase 2 dispatch 产物上实现 L1 TMA + 单 tile WGMMA。
- 为 Phase 3 增加 accumulator / scaled GEMM reference 对比测试。
2026-06-18 00:46:51 CST
- 对应 clean 工作 commit:
842124b1c588d78a9fc4ff7fbdaf2b7b80e5287c - 用户请求摘要:确认 Phase 3 verification buffer 方案后,实施 SM90 MegaMoE Phase 3 L1 TMA + 单 tile WGMMA,并完成远端 build/correctness/regression 验证。
- 本次提交的核心改动:
- 扩展 SM90 symmetric buffer views,新增
l1_accum_debug: float32[128, 128],用于 Phase 3 单 tile FP32 accumulator correctness 验证。 - SM90 Python
SymmBuffer暴露buffer.l1_accum_debug,SM100 分支保持兼容的None属性。 - SM90 JIT/runtime 增加
l1_accum_debugkernel 参数。 - SM90 kernel 保留 Phase 2 dispatch 路径,并新增
BLOCK_M == 128下的 L1 TMA producer 和 WGMMA consumer:TMA load L1 acts/SFA/L1 weights,执行 FP8xFP8 WGMMA,应用 activation SF 和 weight SF,并写出首个 L1 tile 的 scaled FP32 accumulator。 - Phase 3 barrier/debug 初始化仅在
BLOCK_M == 128启用,dispatch named barrier 从0调整到1,避免与 full-CTA__syncthreads()使用的 barrier 冲突并修复 Phase 2 小BLOCK_M回归。 - 新增 Phase 3 correctness 脚本
megamoe_dev_test_scripts/phase3/l1_wgmma_single_tile.py,基于实际 dispatch pool 计算 PyTorch FP32 reference 并对比l1_accum_debug。
- 扩展 SM90 symmetric buffer views,新增
- 关键文件列表:
csrc/apis/sm90_mega.hppcsrc/jit_kernels/impls/sm90_fp8_mega_moe.hppdeep_gemm/include/deep_gemm/impls/sm90_fp8_mega_moe.cuhdeep_gemm/mega/__init__.pymegamoe_dev_test_scripts/phase3/l1_wgmma_single_tile.py
- 详细开发流程:
- 本地扩展 SM90 buffer layout 和 Python wrapper,新增 committed verification view
l1_accum_debug。 - 本地在 SM90 kernel 中移除 Phase 2 的非 dispatch thread 早退,改为 dispatch/TMA/math role branches;Phase 3 computation 只在
BLOCK_M == 128路径启用。 - 本地实现 Phase 3 shared memory layout、full/empty barrier 初始化、L1 acts/SFA/weights TMA load、SM90 FP8 WGMMA、float SF scaling 和 debug accumulator 写出。
- 本地新增
megamoe_dev_test_scripts/phase3/l1_wgmma_single_tile.py,固定num_tokens=128、num_topk=1,从buffer.l1_acts/buffer.l1_acts_sf/ transformed L1 weights 计算 reference。 - 本地静态检查:
python3 -m py_compile megamoe_dev_test_scripts/phase3/l1_wgmma_single_tile.py、git diff --check。 - 远端路径确认:
ssh g0034 "docker exec sglang-lxy bash -lc 'ls /mnt/beegfs/lxy/DeepGEMM'"。 - 远端同步:
rsync -avz --relative csrc/apis/sm90_mega.hpp csrc/jit_kernels/impls/sm90_fp8_mega_moe.hpp deep_gemm/include/deep_gemm/impls/sm90_fp8_mega_moe.cuh deep_gemm/mega/__init__.py megamoe_dev_test_scripts/phase3/l1_wgmma_single_tile.py g0034:/mnt/beegfs/lxy/DeepGEMM/。 - 远端首次 build 暴露远端
csrc/apis/mega.hppstale copy 与本地不一致,随后同步本地csrc/apis/mega.hpp到远端用于恢复远端 workspace 一致性;该文件本次 clean work commit 未改动。 - 远端 build:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && timeout 60s bash develop.sh'",通过。 - 远端 Phase 3 single-rank correctness:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && timeout 60s python3 megamoe_dev_test_scripts/phase3/l1_wgmma_single_tile.py'",通过,max_diff=0.006541。 - 远端 Phase 3 2-rank correctness/no-hang:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && CUDA_VISIBLE_DEVICES=0,1 timeout 60s torchrun --standalone --nproc_per_node=2 megamoe_dev_test_scripts/phase3/l1_wgmma_single_tile.py'",通过,rank0 输出max_diff=0.006541。 - 远端 Phase 2 regression 初次发现小
BLOCK_Mdispatch-only case 在新增 full-CTA barrier 后出现 illegal memory access;本地修复为 Phase 3 barrier/debug 初始化只在BLOCK_M == 128启用,并将 dispatch named barrier 改为1。 - 修复后重新同步 kernel 文件,并重新执行远端 build,通过。
- 远端 Phase 2 single-rank regression:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && timeout 60s python3 megamoe_dev_test_scripts/phase2/dispatch_only_correctness.py --tokens-list 192'",通过。 - 远端 Phase 2 2-rank regression:
ssh g0034 "docker exec sglang-lxy bash -lc 'cd /mnt/beegfs/lxy/DeepGEMM && CUDA_VISIBLE_DEVICES=0,1 timeout 60s torchrun --standalone --nproc_per_node=2 megamoe_dev_test_scripts/phase2/dispatch_only_correctness.py --tokens-list 192'",通过。
- 本地扩展 SM90 buffer layout 和 Python wrapper,新增 committed verification view
- 测试结果和已知问题:
- Phase 3 build 通过。
- Phase 3 single-rank 和 2-rank correctness 均通过,FP32 accumulator 最大误差
0.006541,满足atol=1e-2, rtol=5e-2。 - Phase 2 dispatch-only
BLOCK_M=128single-rank 和 2-rank regression 通过。 - single-rank 仍出现 PyTorch symmetric memory warning:
cuMulticastCreate failed with: "invalid argument",当前不影响 correctness。 - Phase 3 仅验证 L1 单 tile WGMMA/scaling/debug output,不包含 L1 SwiGLU/quant epilogue、L2 GEMM 或 final combine。
- 后续待办:
- Phase 4:在 Phase 3 accumulator 上实现 L1 epilogue,包括 gate/up deinterleave、SwiGLU、top-k weight、FP8 quantize 和
l2_arrival_maskrelease。 - 扩展 Phase 3/4 测试覆盖更多 N-block、multi-expert 和非首 tile accumulator 映射。
- Phase 4:在 Phase 3 accumulator 上实现 L1 epilogue,包括 gate/up deinterleave、SwiGLU、top-k weight、FP8 quantize 和