perf(recipe): add Qwen3.5 text H100 recipe - #5098
Conversation
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/nvskills-ci |
|
/ok to test a767ee3 |
|
Light review — Qwen3.5-35B-A3B H100 perf recipe + skill updates Solid, well-documented addition. The recipe wiring is correct: A few small things to consider (none merge-blocking): 1. Perf gate reuses the Qwen3-30B number (Question). 2. cross_entropy_fusion_impl silently flips to te (Low). The base recipe deliberately sets 3. Card architecture field (Question). The card lists The skill/card documentation updates are thorough, internally consistent, and cross-referenced. The Suggested test cases
Only a single BF16 / H100 / 16-GPU perf recipe is added; no fp8_cs, fp8_mx, or nvfp4 variants exist for this model, so no other perf cases are impacted. The added unit test |
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/nvskills-ci |
Signed-off-by: nvskills-svc-account <svc-nvskills-signing@nvidia.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/nvskills-ci |
Signed-off-by: nvskills-svc-account <svc-nvskills-signing@nvidia.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/nvskills-ci |
Signed-off-by: nvskills-svc-account <svc-nvskills-signing@nvidia.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/nvskills-ci |
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/nvskills-ci |
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/ok to test 14fe1a7 |
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/ok to test 1f21e3f1cba9ef82db33bb411a8f179b19dad557 |
@yaoyu-33, there was an error processing your request: See the following link for more information: https://docs.gha-runners.nvidia.com/cpr/e/2/ |
|
/ok to test 1f21e3f |
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/ok to test 07e7bca |
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/ok to test d414104 |
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
|
/ok to test 7e4a6d1 |
|
/nvskills-ci |
|
Light review — LGTM with minor notes Solid, well-scoped PR: a fail-closed H100 perf recipe + model-specific runtime patch, extensively unit-tested. The runtime patch validates every assumption (SM90, 128-dim heads, BF16-only, SwiGLU, static rank capacity, GPU-resident counts) and raises rather than silently degrading, and the recipe only layers benchmark overrides onto the existing GB200 base config. Revision pins are consistently applied and asserted in tests. Notes (non-blocking):
Suggested test cases
No functional/L-tier perf launcher targets a qwen35_*gpu_h100_bf16_perf case; coverage for this recipe is the unit tests above (the H100 perf run is validated via the model-verification card command, not a CI perf test). |
What does this PR do?
Adds the canonical text-only H100 performance recipe for
Qwen/Qwen3.5-35B-A3B, focused tests, a verified H100 performance item in themodel verification card, and reusable performance skill/campaign guidance.
This PR is stacked on the public runtime pin in #5449, which pins the current
Megatron-Core integration head published in NVIDIA/Megatron-LM#6370. The
model-card run used ancestor
606c01046bf411c54e730739844da9e613f84a76; later commits update tests andrepair only the inactive deterministic torch fallback's FLA 0.4.2
l2normcall. The measured FlashQLA path is unchanged.
Frozen configuration
and moments, no parameter remainders
torch.grouped_mm, HybridEP, static capacity 1.05, 64-tokenchunks, 16 dispatcher SMs, 108 preprocessing SMs, and shared-expert overlap
combined EP communication overlap
caches, plus a shared Torch extension build cache
The recipe retains the model-native local
aux_losscoefficient and gradientclipping. Forced expert balancing and mock data make this a performance
stability benchmark, not convergence evidence.
The TE cross-entropy path is intentional for this mock-data performance
recipe; it does not change the functional-training coverage, which remains
unverified. The card records the Hugging Face repository's top-level
Qwen3_5MoeForConditionalGenerationarchitecture, while the recipe selectsthe supported text-only causal-LM provider.
Reproduce
The recipe-specific kernel overlay is required and hash-locked in
examples/model_verification_cards/qwen3.5-35b-a3b/runtime-requirements.txt.Install it without replacing the base container's Torch stack before running
the card command:
The caller supplies normal site-specific Slurm, container, credential, cache,
and storage wiring outside the card.
Verified result
A fresh public checkout of Bridge
fdc1ac339303330c1a73eaa3d1d9d4bab70c776band MCore
606c01046bf411c54e730739844da9e613f84a76completed the exact 50-stepcard command. Steps 41-50 averaged 20,966.100 ms / 280.970
model TFLOP/s/GPU. LM loss was finite from 12.830670 to
0.008044560,
skipped=0,NaN=0, the resolved post-setup configurationwas persisted, and every Slurm step exited
0:0.The earlier frozen candidate reached 285.18 model TFLOP/s/GPU; the card uses a
portable 280 model TFLOP/s/GPU final-10 gate to tolerate ordinary node-to-node
variance.
The card remains pinned to
fdc1ac339303330c1a73eaa3d1d9d4bab70c776b,the exact public commit used by the accepted run. Later equal-input HybridEP
hardening and EOS-only launcher experiments were removed from the final
stack. The current recipe includes only a CI-required static declaration
rewrite for rank-local cache environment variables; its resolved runtime
environment and performance path are equivalent to the measured source, but
the source text is not byte-for-byte identical.
Compared with the previous public 24,561.870 ms / 239.820 TFLOP/s/GPU result,
the frozen candidate reduced step time by 15.90% and increased throughput by
18.91%.
Optimizations retained
torch.grouped_mmexperts with GPU-resident offsetsdeterministic multi-rank startup
Rejected experiments are intentionally not in the frozen recipe: FP8, MBS2,
GDN recompute, CPU offload, combined EP overlap, DP/parameter-gather overlap,
CUDA graphs, global fused residual RMSNorm, NCCL EP, and alternate chunk/SM
settings were slower, unstable, or exceeded memory.
Public PR stack
The #6370 integration carries adaptations of NVIDIA/Megatron-LM#5982 and
NVIDIA/Megatron-LM#5396. The former is inactive because the accepted recipe
does not recompute; the latter's separate Q/K normalization path is bypassed
by pre-GDR fusion. Neither is credited for the result.
Validation
steps 41-50, finite metrics, zero skipped/NaN iterations, exit
0:0uv lock --checkand all-extras dry-runuv run pre-commit run --all-files