From 28848bfe7c5496b7d8bb7261b3dda390cc95bf30 Mon Sep 17 00:00:00 2001 From: Brayden Zhong Date: Wed, 5 Aug 2026 18:06:47 -0700 Subject: [PATCH] Fix Nightly NV CI (#33564) Co-authored-by: Brayden Zhong Co-authored-by: Baizhou Zhang --- python/sglang/srt/arg_groups/overrides.py | 3 ++ python/sglang/srt/layers/n_gram_embedding.py | 2 +- .../registered/8-gpu-models/test_glm52_fp8.py | 2 +- .../test_longcat_flash_lite_fp8.py | 50 +++++++++++-------- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/python/sglang/srt/arg_groups/overrides.py b/python/sglang/srt/arg_groups/overrides.py index 41f3550be..245f5943c 100644 --- a/python/sglang/srt/arg_groups/overrides.py +++ b/python/sglang/srt/arg_groups/overrides.py @@ -1725,6 +1725,9 @@ def _deepseek_moe_quant_resolution(view: Any) -> dict: if ( view.moe_a2a_backend == "none" and view.moe_runner_backend == "auto" + # LongCat top-k spans the zero-expert logits, which trtllm-gen's + # fused routing cannot see. + and not model_arch.startswith("LongcatFlash") and ( quantization in ["fp8", "modelopt_fp8", "modelopt_fp4", "modelopt_mixed"] diff --git a/python/sglang/srt/layers/n_gram_embedding.py b/python/sglang/srt/layers/n_gram_embedding.py index 6bdb16d62..699e7c326 100644 --- a/python/sglang/srt/layers/n_gram_embedding.py +++ b/python/sglang/srt/layers/n_gram_embedding.py @@ -49,7 +49,7 @@ class NgramEmbedding(torch.nn.Module): + int(over_embedding_m + i * 2 + 1) ) self.oe_embeder = VocabParallelEmbedding( - num_embeddings=self.exclusive_oe_embedder_size_sums[-1], + num_embeddings=int(self.exclusive_oe_embedder_size_sums[-1]), embedding_dim=oe_hidden_dim, use_attn_tp_group=use_attn_tp_group, ) diff --git a/test/registered/8-gpu-models/test_glm52_fp8.py b/test/registered/8-gpu-models/test_glm52_fp8.py index 8995298aa..dca35ed6d 100644 --- a/test/registered/8-gpu-models/test_glm52_fp8.py +++ b/test/registered/8-gpu-models/test_glm52_fp8.py @@ -15,7 +15,7 @@ COMMON_ARGS = [ "--trust-remote-code", "--reasoning-parser=glm45", "--tool-call-parser=glm47", - "--mem-fraction-static=0.85", + "--mem-fraction-static=0.8", "--enable-metrics", ] diff --git a/test/registered/8-gpu-models/test_longcat_flash_lite_fp8.py b/test/registered/8-gpu-models/test_longcat_flash_lite_fp8.py index b48825e10..feec8d0e7 100644 --- a/test/registered/8-gpu-models/test_longcat_flash_lite_fp8.py +++ b/test/registered/8-gpu-models/test_longcat_flash_lite_fp8.py @@ -6,8 +6,7 @@ from sglang.test.performance_test_runner import PerformanceTestParams from sglang.test.run_combined_tests import run_combined_tests from sglang.test.test_utils import ModelLaunchSettings -# Runs on both H200 and B200 via the nightly-8-gpu-common suite. -register_cuda_ci(est_time=1200, suite="nightly-8-gpu-common", nightly=True) +register_cuda_ci(est_time=1200, suite="nightly-8-gpu-h200", nightly=True) # LongCat-Flash-Lite-FP8 is the smallest member of the LongCat family # (~138 GB FP8 weights, hidden=3072, 14 layers, 256 routed + 128 zero @@ -20,7 +19,6 @@ register_cuda_ci(est_time=1200, suite="nightly-8-gpu-common", nightly=True) # LongcatFlashNgramForCausalLM is remapped to model_type "longcat_flash") # with LongCat-Flash-Chat-FP8 and LongCat-2.0-FP8, so it guards the shared # code paths that recent LongCat EP fixes touched: -# - the scheduler moe-topk gate for --moe-a2a-backend (PR #30975) # - ScMoE dense-branch gather (RoPE) + the MoE-vs-DeepEPMoE double # all_reduce fix (PR #31311) # - the zero-expert (identity) compute path (zero_expert_num=128) and @@ -41,28 +39,14 @@ class TestLongCatFlashLiteFp8(unittest.TestCase): Two variants exercise the two MoE all-to-all backends that the LongCat EP fixes gate on: - - EP8 + deepep : real expert parallelism (the path #30975/#31311 fix) - EP8 + none : EP-over-TP baseline (all_reduce / gather correctness) + - EP8 + deepep : real expert parallelism (the path #30975/#31311 fix), + skipped until DeepEP raises its low-latency top-k cap to 12 """ - def test_longcat_flash_lite_fp8(self): - variants = [ - ModelLaunchSettings( - LONGCAT_FLASH_LITE_FP8_MODEL_PATH, - tp_size=8, - extra_args=COMMON_ARGS + ["--ep=8"], - variant="TP8+EP8+none", - ), - ModelLaunchSettings( - LONGCAT_FLASH_LITE_FP8_MODEL_PATH, - tp_size=8, - extra_args=COMMON_ARGS + ["--ep=8", "--moe-a2a-backend=deepep"], - variant="TP8+EP8+deepep", - ), - ] - + def _run(self, variant: ModelLaunchSettings): run_combined_tests( - models=variants, + models=[variant], test_name="LongCat-Flash-Lite-FP8", # Measured 2026-07-22 on 8xH100-80GB, gsm8k 200q, 5-shot, greedy: # TP8+EP8+none -> 0.840 @@ -78,6 +62,30 @@ class TestLongCatFlashLiteFp8(unittest.TestCase): ), ) + def test_longcat_flash_lite_fp8(self): + self._run( + ModelLaunchSettings( + LONGCAT_FLASH_LITE_FP8_MODEL_PATH, + tp_size=8, + extra_args=COMMON_ARGS + ["--ep=8"], + variant="TP8+EP8+none", + ) + ) + + @unittest.skip( + "Blocked: DeepEP low-latency dispatch asserts num_topk <= kNumMaxTopK " + "(11 in internode_ll.cu), LongCat moe_topk is 12." + ) + def test_longcat_flash_lite_fp8_deepep(self): + self._run( + ModelLaunchSettings( + LONGCAT_FLASH_LITE_FP8_MODEL_PATH, + tp_size=8, + extra_args=COMMON_ARGS + ["--ep=8", "--moe-a2a-backend=deepep"], + variant="TP8+EP8+deepep", + ) + ) + if __name__ == "__main__": unittest.main()