From 994ca23fa4e7831e6df5dc6a780949680c6e3974 Mon Sep 17 00:00:00 2001 From: yufeiwu-nv <230315618+yufeiwu-nv@users.noreply.github.com> Date: Fri, 7 Aug 2026 14:57:04 +0000 Subject: [PATCH 1/3] [None][test] Set avg_seq_len for the qwen3.5_9b 500/2000 perf case Qwen3.5-9B is a hybrid GDN model, so KV cache manager v2 splits memory between an attention pool (per-token cost) and an SSM/conv state pool (fixed cost per resident sequence). Without kv_cache_config.avg_seq_len it warns and falls back to max_seq_len/2, which underestimates the real sequence length by 2x and undersizes the attention pool relative to the SSM pool. On L40S the 500/2000 case then admits 485 resident sequences, saturates the attention pool at 99% utilization and aborts with a V2 scheduler deadlock. The synthetic dataset uses stdev 0, so 500+2000=2500 is the exact total sequence length rather than an estimate. Scoped to the failing case only; the other qwen3.5_9b cases currently pass and changing their pool ratio would shift their perf baselines. Signed-off-by: yufeiwu-nv <230315618+yufeiwu-nv@users.noreply.github.com> --- tests/integration/defs/perf/pytorch_model_config.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/integration/defs/perf/pytorch_model_config.py b/tests/integration/defs/perf/pytorch_model_config.py index 1bb2b623fdf5..409bd0343d9c 100644 --- a/tests/integration/defs/perf/pytorch_model_config.py +++ b/tests/integration/defs/perf/pytorch_model_config.py @@ -324,6 +324,17 @@ def get_model_yaml_config(model_label: str, }, } }, + # Qwen3.5-9B hybrid GDN: V2 KV/SSM pool split needs the real seq len. + { + 'patterns': [ + 'qwen3.5_9b-bench-pytorch-bfloat16-maxbs:512-maxnt:2048-input_output_len:500,2000', + ], + 'config': { + 'kv_cache_config': { + 'avg_seq_len': 2500, + }, + } + }, # MiniMax-M3 MXFP8 block-sparse MoE: sparse backend, no KV reuse, trust_remote_code, capped max_seq_len to avoid the 1M-default CUDA-graph OOM. { 'patterns': ['minimax_m3_mxfp8'], From 84d92a8b126d8bb9eb3a8bbdd8b7a387dd0b422d Mon Sep 17 00:00:00 2001 From: yufeiwu-nv <230315618+yufeiwu-nv@users.noreply.github.com> Date: Fri, 7 Aug 2026 19:24:55 +0000 Subject: [PATCH 2/3] [None][test] Restore H100 coverage for two Qwen3.5 perf cases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #17303 moved these two cases out of the H100-capable conditions: qwen3.5_122b_a10b input_output_len:500,2000 -ep:4-tp:4-gpus:4 qwen3.5_397b_a17b_fp8 input_output_len:1000,2000 -ep:8-tp:8-gpus:8 The first went to the gpu_memory > 90000 condition under an "OOM on 80G GPUs" rationale, the second to a B200/B300-only condition. The perf result database contradicts both: 500,2000 has 26 successful H100 runs (last 2026-07-30) out of 191 total, and 1000,2000 has 11 H100 runs (last 2026-07-30) out of 67 total. Move each back next to its siblings, which never left the H100 conditions. qwen3.5_122b_a10b input_output_len:128,128 stays where it is — it has 115 runs but none on H100, so it has no H100 baseline to restore. Signed-off-by: yufeiwu-nv <230315618+yufeiwu-nv@users.noreply.github.com> --- tests/integration/test_lists/qa/llm_perf_core.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/test_lists/qa/llm_perf_core.yml b/tests/integration/test_lists/qa/llm_perf_core.yml index 8bb7ead14921..fe05f05e7849 100644 --- a/tests/integration/test_lists/qa/llm_perf_core.yml +++ b/tests/integration/test_lists/qa/llm_perf_core.yml @@ -106,6 +106,7 @@ llm_perf_core: - perf/test_perf.py::test_perf[qwen3.5_35b_a3b_fp8-bench-pytorch-float8-maxbs:1-input_output_len:8000,1000-reqs:10-con:1] #min_latency - perf/test_perf.py::test_perf[qwen3.5_35b_a3b_fp8-bench-pytorch-float8-maxbs:512-input_output_len:8000,1000-con:256] #max_throughput #qwen3.5_122b_a10b (MoE BF16 234G, 4-GPU) + - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:500,2000-ep:4-tp:4-gpus:4] - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:2000,500-ep:4-tp:4-gpus:4] - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:8000,1000-ep:4-tp:4-gpus:4] - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:1000,2000-ep:4-tp:4-gpus:4] @@ -279,7 +280,6 @@ llm_perf_core: - perf/test_perf.py::test_perf[minimax_m3_fp4-bench-pytorch-float4-maxbs:1-input_output_len:1024,1024-reqs:10-con:1-ep:8-tp:8-gpus:8] #min_latency - perf/test_perf.py::test_perf[minimax_m3_fp4-bench-pytorch-float4-maxbs:256-maxnt:8192-input_output_len:1024,1024-con:256-ep:8-tp:8-gpus:8] TIMEOUT(120) #max_throughput - perf/test_perf.py::test_perf[deepseek_r1_0528_fp4-bench-pytorch-float4-maxbs:384-maxnt:1536-input_output_len:1000,2000-reqs:10000-con:3072-ep:8-tp:8-gpus:8] TIMEOUT(120) #max throughput test - - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp8-bench-pytorch-float8-input_output_len:1000,2000-ep:8-tp:8-gpus:8] # 8: B300 test cases @@ -311,6 +311,7 @@ llm_perf_core: - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp8-bench-pytorch-float8-input_output_len:500,2000-ep:8-tp:8-gpus:8] - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp8-bench-pytorch-float8-input_output_len:2000,500-ep:8-tp:8-gpus:8] - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp8-bench-pytorch-float8-input_output_len:8000,1000-ep:8-tp:8-gpus:8] + - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp8-bench-pytorch-float8-input_output_len:1000,2000-ep:8-tp:8-gpus:8] - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp8-bench-pytorch-float8-maxbs:1-input_output_len:8000,1000-reqs:10-con:1-ep:8-tp:8-gpus:8] #min_latency - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp8-bench-pytorch-float8-maxbs:512-input_output_len:8000,1000-con:512-ep:8-tp:8-gpus:8] #max_throughput @@ -328,7 +329,6 @@ llm_perf_core: tests: #qwen3.5_122b_a10b (MoE BF16 234G, 4-GPU): OOM on 80G GPUs, needs >90G - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:128,128-ep:4-tp:4-gpus:4] - - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:500,2000-ep:4-tp:4-gpus:4] #qwen3.5_397b_a17b_fp4 (MoE FP4 234G, 8-GPU ep=8) - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp4-bench-pytorch-float4-input_output_len:128,128-ep:8-tp:8-gpus:8] - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp4-bench-pytorch-float4-input_output_len:500,2000-ep:8-tp:8-gpus:8] From ff67109ef4954706285159c666f20ac63fdd72d2 Mon Sep 17 00:00:00 2001 From: yufeiwu-nv <230315618+yufeiwu-nv@users.noreply.github.com> Date: Fri, 7 Aug 2026 19:37:07 +0000 Subject: [PATCH 3/3] [None][test] Restore H100 coverage for qwen3.5_122b_a10b 128,128 Follow-up to the previous commit, which left this case in the gpu_memory > 90000 condition on the grounds that it had no H100 history. A closer look at the perf result database shows the case was never executed on H100 at all, rather than executed and failed: it has zero perf_result rows on H100, and across the last 15 H100 runs that ran qwen3.5_122b_a10b input_output_len:500,2000 the 128,128 case is absent from every one. Its 115 runs on other GPUs all produced valid throughput, with no failures recorded anywhere. So the "OOM on 80G GPUs" rationale has no supporting data for this case either. 128,128 has a 256-token sequence against 2500 for the 500,2000 case that does pass on H100, so it is the lighter workload of the two. Move it back next to its siblings and drop the now-empty comment. Signed-off-by: yufeiwu-nv <230315618+yufeiwu-nv@users.noreply.github.com> --- tests/integration/test_lists/qa/llm_perf_core.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/integration/test_lists/qa/llm_perf_core.yml b/tests/integration/test_lists/qa/llm_perf_core.yml index fe05f05e7849..ecb407e83278 100644 --- a/tests/integration/test_lists/qa/llm_perf_core.yml +++ b/tests/integration/test_lists/qa/llm_perf_core.yml @@ -106,6 +106,7 @@ llm_perf_core: - perf/test_perf.py::test_perf[qwen3.5_35b_a3b_fp8-bench-pytorch-float8-maxbs:1-input_output_len:8000,1000-reqs:10-con:1] #min_latency - perf/test_perf.py::test_perf[qwen3.5_35b_a3b_fp8-bench-pytorch-float8-maxbs:512-input_output_len:8000,1000-con:256] #max_throughput #qwen3.5_122b_a10b (MoE BF16 234G, 4-GPU) + - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:128,128-ep:4-tp:4-gpus:4] - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:500,2000-ep:4-tp:4-gpus:4] - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:2000,500-ep:4-tp:4-gpus:4] - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:8000,1000-ep:4-tp:4-gpus:4] @@ -327,8 +328,6 @@ llm_perf_core: gpu_memory: gt: 90000 tests: - #qwen3.5_122b_a10b (MoE BF16 234G, 4-GPU): OOM on 80G GPUs, needs >90G - - perf/test_perf.py::test_perf[qwen3.5_122b_a10b-bench-pytorch-bfloat16-input_output_len:128,128-ep:4-tp:4-gpus:4] #qwen3.5_397b_a17b_fp4 (MoE FP4 234G, 8-GPU ep=8) - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp4-bench-pytorch-float4-input_output_len:128,128-ep:8-tp:8-gpus:8] - perf/test_perf.py::test_perf[qwen3.5_397b_a17b_fp4-bench-pytorch-float4-input_output_len:500,2000-ep:8-tp:8-gpus:8]