Repository navigation
[Experiment][MoE] H200 NVFP4 MegaMoE via flashinfer.megamoe - #3
Draft
qianlihuang wants to merge 1 commit into
Draft
qianlihuang wants to merge 1 commit into
qianlihuang wants to merge 1 commit into
Conversation
Archive the legacy flashinfer.megamoe experiment for H200. The integration is held in favor of FlashInfer vllm-project#6999. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Yiliu Dong <91178480+qianlihuang@users.noreply.github.com>
6 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
Archive the H200 SM90 NVFP4 experiment using
flashinfer.megamoe, the legacy Torch-symmetric-memory API. Held experiment; no upstream submission planned. Prefer evaluating FlashInfer #6999's unifiedflashinfer.moe_ep.MoEEpLayerimplementation when it is ready.This snapshot temporarily reuses
--moe-backend flashinfer_moe_ep_cutedslto select the legacy adapter. It does not integrate vllm-project#6999. The unvalidated independent-backend rename is not included.Claims
fused.Validation
8× H200 on one node for decode; GPUs 0–3 for prefill. Same
nvidia/GLM-5.3-Flash-NVFP4checkpoint, revisionda920bb0b9f4a06727223a349e55468e38352348, in both arms. Baseline: HUMMING + allgather/reducescatter. Candidate: FI legacy MegaMoE + internal dispatch/combine, with BF16 MTP still using AG/RS.Published snapshot
ff86daa9a4b9b932a0e636c5e8894b32ad3ada0d. Source base18343393b4da41a7e8027efbc4c7e77c28301bf0; native wheel4c12fce79d33abe2cfcf56c7cbb0c5eccb9c276e(CUDA/Rust source unchanged between these revisions); FlashInfer source47a51d76d023dbf145ac3b7111e783e015a19033. Torch 2.14.0+cu130. The experiment base branch is pinned because the personal fork'smainis older.Decode: TP1/DP8/EP8, MRV2, default CUDA graphs, DecodeBenchConnector, ISL131072/OSL512, MTP3 synthetic unconditional acceptance
[0.8,0.6,0.5], C8/32/64/128/192, N=2C, seed0. One warm-up and three timed passes per arm, serial A/B/A. All45 timed runs completed with zero failed requests and exact token counts; finite512-logprob gates passed. Profiles are separate from the timing runs. ReplaySSM is omitted in both arms because the NVIDIA conditional wrapper is not on main's allowlist.Five-second samples during all 45 timing windows show eight GPU contexts, with their PIDs matching each arm's server log, and SM clocks of 1980 MHz. These are point samples, not proof of continuous exclusivity. Earlier co-tenant-affected node18 performance runs are excluded.
Prefill: TP2/DP2/EP4, natural MTP3, MRV2/default graphs, ISL2048/OSL1. Warm-up 64 requests; three 1000-request unlimited-rate runs (seeds 102/104/106); Poisson 11/15/19/21/23/25RPS. A and B completed; the return-to-baseline arm was interrupted during startup. This is preliminary A/B evidence only.
Profile: DP0 decode contains 29 baseline versus 31 FI MTP iterations. Per iteration, 42 pairs of target Humming GEMMs become 42 FI fused launches. AG/RS pairs fall 45→3, preserving the BF16 MTP path. Cumulative kernel-time sums are not wall-clock savings.
Correctness: the measured source passed 28 model tests and 3 distributed tests covering EP4/EP8, TP2+SP/DP2/EP4, ragged/idle ranks, and graph replay at 16/257 rows. The published cleanup adds a constructor non-None assertion, equivalent test API aliases, and help/docs wording; no arithmetic change. These final cleanup files were not rerun on GPUs after the experiment was held. Pre-commit passed on the published snapshot. Final
VLLM_GPU_SYNC_CHECK=errorserving validation was queued and canceled before execution.Operator and regression test commands
Recorded RED cases before fixes included BF16 MTP selecting pass-through stages, idle-rank buffer allocation rejecting M=0, and explicit ubatch_size=2 being accepted. Representative output:
Stable FlashInfer lacks
flashinfer.megamoe; the hardware tests skip when this API is absent. Manual H200 runs used the source revision above. No upstream CI result is claimed.Server and Rust client commands
Both arms use identical flags; omit the final
--moe-backendoption for the baseline. The backend choice also binds internalpassthrough; do not add an A2A CLI option.Raw Rust C128 outputs: all nine timed runs (overall metrics)
These excerpts stop before ITL and the distinct steady-state subsection. Warm-up/profile runs are excluded.
0-base, pass0
0-base, pass1
0-base, pass2
1-mega, pass0
1-mega, pass1
1-mega, pass2
2-base, pass0
2-base, pass1
2-base, pass2
Raw Rust prefill saturation outputs: three runs per arm
0-base, seed102
0-base, seed104
0-base, seed106
1-mega, seed102
1-mega, seed104
1-mega, seed106
Raw GSM8K output — no accuracy-parity claim
1319 questions, 5-shot, natural MTP3. DEP8 candidate scores range 0.908–0.919 over six runs; prefill includes 0.902. Latencies in these raw evaluator outputs are not serving benchmark speedups.
DEP8 baseline
DEP8 candidate, run1
DEP8 candidate, run2
DEP8 candidate, run3
DEP8 candidate, run4
DEP8 candidate, run5
DEP8 candidate, run6
Prefill baseline
Prefill candidate, run1
Prefill candidate, run2
Details
flashinfer.moe_epAPI, rather than extend this legacy API detour.Pull Request Checklist
/pr-checklistskill.