[None][fix] Stabilize perf-sanity tests - #15440
Conversation
📝 WalkthroughWalkthroughAdds GB300 GPU detection and a dedicated ChangesGB300 UCX Support and KimiK25 MoE Enablement
Perf Test Configuration Tuning
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
/bot run --disable-fail-fast --stage-list "GB200-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge-10,GB300-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge-2,GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge-4" |
7d6b52c to
e092cf7
Compare
|
/bot run --disable-fail-fast --stage-list "GB200-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge-10,GB300-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge-2,GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge-4" |
|
PR_Github #54754 [ run ] triggered by Bot. Commit: |
|
PR_Github #54754 [ run ] completed with state
|
|
/bot run --disable-fail-fast --stage-list "GB300-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge-2" |
|
PR_Github #54799 [ run ] triggered by Bot. Commit: |
|
PR_Github #54799 [ run ] completed with state
|
|
/bot run --disable-fail-fast --stage-list "GB300-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge-2" |
|
PR_Github #55115 [ run ] triggered by Bot. Commit: |
e6793c0 to
e332b54
Compare
|
PR_Github #55115 [ run ] completed with state
|
|
/bot run --disable-fail-fast --stage-list "GB300-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge-2" |
|
PR_Github #55199 [ run ] triggered by Bot. Commit: |
|
PR_Github #55199 [ run ] completed with state
|
8334860 to
e576dc4
Compare
…num_tokens, perf-sanity timeout
Group 3 (KimiK25ForConditionalGeneration not in moe_model_arch_list):
Add 'KimiK25ForConditionalGeneration' to moe_model_arch_list so
maybe_create_moe_load_balancer calls MoeLoadBalancerConfig.setup() for
Kimi K2.5 MoE+EPLB configs. Without it, the wrapped DeepseekV3 backbone
raised 'Cannot calculate num_local_slots' on every rank during model
load (gb200_kimi-k25-thinking-fp4_8k1k_con1024_dep32_eplb416_mtp3
failures, OCI verify Slurm 3320245).
Group 4 (glm5 8k1k tep8_mtp3 RequestError):
max_num_tokens=256 < ISL=8192 in glm5_fp4_tep8_mtp3_8k1k config; bump
to 8192 to match every other 8k1k aggregated config in the repo. OCI
verify (Slurm 3320259) shows output_token_throughput=238.94 tok/s.
Group 6 (long-context 128k8k > 5400s):
DEFAULT_TIMEOUT 5400 -> 10800 in test_perf_sanity.py so the in-test
wait_for_server_config / wait_for_benchmark_ready give the engine
enough budget for 128k context fills. Re-balance pytest TIMEOUT
markers across the perf-sanity test-db YAMLs:
- 128k8k entries: TIMEOUT (120) -> TIMEOUT (180), matches the new 3h
server budget;
- all other entries: TIMEOUT (120) -> TIMEOUT (90), tightening the
outer cap on tests that don't need 2h.
AWS GB300 verify of e2e-gb300_deepseek-r1-fp4_128k8k_con256
(Slurm 560881) reached output_token_throughput=820.77 tok/s.
Signed-off-by: Chenfei Zhang <chenfeiz@nvidia.com>
…ve fixed cases
local/submit.py was missing the GB300 UCX_TLS path that the CI submit.py
already has. Without it, AWS GB300 disagg tests crashed with
'Failed to create NIXL backend: UCX' at startup. Mirror the CI logic
(jenkins/scripts/perf/submit.py:543-548):
is_gb300 -> export UCX_TLS=cuda_copy,cuda_ipc,sm,self,tcp
is_b200 -> export UCX_TLS=^ib (unchanged)
default -> unset UCX_TLS UCX_NET_DEVICES (was: only UCX_TLS)
AWS GB300 verify of e2e-gb300_deepseek-r1-fp4_128k8k_con256
(Slurm 560881) reached output_token_throughput=820.77 tok/s after the
fix; before it died at 5min with the NIXL backend error.
Drop waivers for the four cases that the fixes in this PR repair:
- aggr_upload-glm5_fp4_2_nodes_grace_blackwell-glm5_fp4_tep8_mtp3_8k1k
(was nvbugs/6324131; fixed by max_num_tokens 256->8192)
- disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_8k1k_con1024_dep32_eplb416_mtp3
(was nvbugs/6323074; fixed by adding KimiK25 to moe_model_arch_list)
- disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_8k1k_con1024_dep32_eplb416_mtp3
(was nvbugs/6323074; same fix)
- disagg_upload-e2e-gb300_deepseek-r1-fp4_128k8k_con256_pp4_dep8_mtp1
(was nvbugs/6323889; fixed by DEFAULT_TIMEOUT 5400->10800 + UCX_TLS)
Signed-off-by: Chenfei Zhang <chenfeiz@nvidia.com>
Pre-merge L0 SBSA-Multi-GPU run NVIDIA#2155 timed out at 1.5h on test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL]. Bump TIMEOUT marker from 90 → 120 minutes so the test gets the full 2h. Signed-off-by: Chenfei Zhang <chenfeiz@nvidia.com>
Post-Merge-2 reproduction with sm dropped from GB300 UCX_TLS still fails: GEN workers crash with SIGBUS (signal 7, "Non-existant physical address") at ~80% weight loading on multiple ranks. The fault is in libc memcpy on high-VA mmap pages — i.e. SHM/mmap-backed-page exhaustion in the loader path itself, before UCX/NIXL is exercised. Dropping sm from UCX_TLS does not address it. Restore sm in the GB300 UCX_TLS list (back to the original `cuda_copy,cuda_ipc,sm,self,tcp`) and re-waive the still-failing case under the existing nvbugs/6323074: perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL] Logs: results-GB300-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge-2.tar.gz (PR 44161). Signed-off-by: Chenfei Zhang <chenfeiz@nvidia.com>
e576dc4 to
4525daa
Compare
|
/bot skip --comment "Only unwaive perf tests, no need to run the whole CI pipeline" |
|
PR_Github #55382 [ skip ] triggered by Bot. Commit: |
|
PR_Github #55382 [ skip ] completed with state |
Signed-off-by: Chenfei Zhang <chenfeiz@nvidia.com> Signed-off-by: GitLab CI Bot <gitlab-ci@nvidia.com>
Signed-off-by: Chenfei Zhang <chenfeiz@nvidia.com>
Summary
Stabilize the perf-sanity tests waived in #15373. Three independent test fixes plus a CI-side fix that brings
local/submit.pyin line with the pipeline'ssubmit.py. Also drops four upstream waivers that the fixes here repair.What changed
Group 3 —
KimiK25ForConditionalGenerationnot inmoe_model_arch_listOn Kimi K2.5 MoE configs with EPLB enabled (e.g.
gb200_kimi-k25-thinking-fp4_8k1k_con1024_dep32_eplb416_mtp3),maybe_create_moe_load_balancerskippedMoeLoadBalancerConfig.setup()becauseKimiK25ForConditionalGenerationwas not registered. The wrapped DeepseekV3 backbone then raisedCannot calculate num_local_slotson every rank during model load. Add the arch tomoe_model_arch_list.Group 4 —
glm5_fp4_tep8_mtp3_8k1kRequestErrorThe aggregated server config had
max_num_tokens: 256while ISL is 8192, which raisedRequestError: The sum of prompt length (8192.0), query length (0) should not exceed max_num_tokens (256). Bump to 8192 to match every other 8k1k aggregated config in the repo.Group 6 — Long-context 128k8k > 5400s server timeout
The in-test
wait_for_server_config/wait_for_benchmark_readypaths useslurm_config.get("timeout", DEFAULT_TIMEOUT).DEFAULT_TIMEOUT=5400is too short for 128k context fills, sogb300_deepseek-r1-fp4_128k8k_con256hung. BumpDEFAULT_TIMEOUTto 10800 (3h) and re-balance the pytestTIMEOUTmarkers across the perf-sanity test-db YAMLs:TIMEOUT (120) → TIMEOUT (180)to match the new 3h server budgetTIMEOUT (120) → TIMEOUT (90)to tighten the outer cap on tests that don't need 2hCI infra — GB300
UCX_TLSinlocal/submit.pylocal/submit.pywas missing the GB300UCX_TLSpath thatjenkins/scripts/perf/submit.pyalready has. Without it, AWS GB300 disagg tests crashed withFailed to create NIXL backend: UCXbefore any work started. Mirror the CI logic (jenkins/scripts/perf/submit.py:543-548):is_gb300→export UCX_TLS=cuda_copy,cuda_ipc,sm,self,tcpis_b200→export UCX_TLS=^ib(unchanged)unset UCX_TLS UCX_NET_DEVICES(was:unset UCX_TLSonly)Drop waivers that this PR repairs
Remove four entries from
tests/integration/test_lists/waives.txt:aggr_upload-glm5_fp4_2_nodes_grace_blackwell-glm5_fp4_tep8_mtp3_8k1k(was nvbugs/6324131)disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL(was nvbugs/6323074)disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL(was nvbugs/6323074)disagg_upload-e2e-gb300_deepseek-r1-fp4_128k8k_con256_ctx1_pp4_gen1_dep8_eplb0_mtp1_ccb-NIXL(was nvbugs/6323889)Hardware verification
aggr_upload-glm5_fp4_2_nodes_grace_blackwell-glm5_fp4_tep8_mtp3_8k1koutput_token_throughput=238.94 tok/sdisagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXLCannot calculate num_local_slotsis GONE; gen server reaches EPLB initial assignments and starts model load (regression unblocked)disagg_upload-e2e-gb300_deepseek-r1-fp4_128k8k_con256_ctx1_pp4_gen1_dep8_eplb0_mtp1_ccb-NIXLoutput_token_throughput=820.77 tok/s(withDEFAULT_TIMEOUT=10800+ GB300UCX_TLS)Test plan
TIMEOUTmarkersdisagg_upload-e2e-gb300_*128k8k*benchmarks complete🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Tests
Chores