From 5cd3b30145b235821e39040d000cd5e4c3b08823 Mon Sep 17 00:00:00 2001 From: junyyang Date: Wed, 22 Jul 2026 20:15:03 +0800 Subject: [PATCH 1/4] Add manual OOB tier selection for SGLang MI355 benchmarks --- .github/workflows/atom-sglang-benchmark.yaml | 62 +++++++++++++++----- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/.github/workflows/atom-sglang-benchmark.yaml b/.github/workflows/atom-sglang-benchmark.yaml index 9a1aa8252..134d2866f 100644 --- a/.github/workflows/atom-sglang-benchmark.yaml +++ b/.github/workflows/atom-sglang-benchmark.yaml @@ -26,6 +26,10 @@ on: options: - none - all + - OOB_P0 + - OOB_P1 + - OOB_P2 + - OOB_P0+OOB_P1 - DeepSeek-V4-Pro TP8 - DeepSeek-V4-Pro MTP1 TP8 - DeepSeek-V4-Pro MTP3 TP8 @@ -740,20 +744,41 @@ jobs: if schedule_cron not in schedule_to_tier: return "SKIP-UNKNOWN-DAY", [] selected_group, tier_order = schedule_to_tier[schedule_cron] + return selected_group, select_oob_models([tier_order], include_mi308=True) + + def select_oob_models(tier_orders, include_mi308): by_prefix = first_model_by_prefix(models) - tier_prefixes = frozenset(tier_order) + tier_prefixes = frozenset( + prefix + for tier_order in tier_orders + for prefix in tier_order + ) selected = [] - for prefix in tier_order: - model = by_prefix.get(prefix) - if model is not None: - selected.append(model) + seen_prefixes = set() + for tier_order in tier_orders: + for prefix in tier_order: + if prefix in seen_prefixes: + continue + seen_prefixes.add(prefix) + model = by_prefix.get(prefix) + if model is not None: + selected.append(model) + if not include_mi308: + return selected for prefix in sorted(by_prefix): if prefix in tier_prefixes: continue model = by_prefix[prefix] if is_oob_mi308(model): selected.append(model) - return selected_group, selected + return selected + + MANUAL_OOB_SELECTIONS = { + "OOB_P0": ("OOB_P0", [OOB_P0_PREFIX_ORDER]), + "OOB_P1": ("OOB_P1", [OOB_P1_PREFIX_ORDER]), + "OOB_P2": ("OOB_P2", [OOB_P2_PREFIX_ORDER]), + "OOB_P0+OOB_P1": ("OOB_P0+OOB_P1", [OOB_P0_PREFIX_ORDER, OOB_P1_PREFIX_ORDER]), + } if event == "schedule": schedule_cron = os.environ.get("SCHEDULE_CRON", "") @@ -761,19 +786,28 @@ jobs: else: model_mi355 = os.environ.get("MODEL_MI355") or "none" model_mi308 = os.environ.get("MODEL_MI308") or "none" - selected = [ + selected = [] + manual_oob_selection = MANUAL_OOB_SELECTIONS.get(model_mi355) + if manual_oob_selection: + selected_group, tier_orders = manual_oob_selection + selected.extend(select_oob_models(tier_orders, include_mi308=False)) + else: + selected.extend( + model + for model in models + if matches_workload(model) + and manually_selected(model, model_mi355, expected_mi308=False) + ) + selected.extend( model for model in models if matches_workload(model) - and ( - manually_selected(model, model_mi355, expected_mi308=False) - or manually_selected(model, model_mi308, expected_mi308=True) - ) - ] + and manually_selected(model, model_mi308, expected_mi308=True) + ) print(f"SGLang workload label: {workload_label}", file=sys.stderr) if selected_group: - print(f"Scheduled SGLang benchmark group: {selected_group}", file=sys.stderr) + print(f"SGLang benchmark group: {selected_group}", file=sys.stderr) if not selected: print("No models selected for SGLang benchmark.", file=sys.stderr) else: @@ -792,7 +826,7 @@ jobs: MODELS_JSON: ${{ steps.load.outputs.models_json }} run: | if [[ -n "${SELECTED_GROUP}" ]]; then - echo "Scheduled SGLang benchmark group: ${SELECTED_GROUP}" + echo "SGLang benchmark group: ${SELECTED_GROUP}" fi printf 'Selected models: %s\n' "${MODELS_JSON}" From 86c5c3870df9bb1f0d6570d335783b4322ed99a6 Mon Sep 17 00:00:00 2001 From: junyyang Date: Wed, 22 Jul 2026 20:35:23 +0800 Subject: [PATCH 2/4] Add minimax-m3 for atom-sglang benchmark --- .../benchmark/sglang_benchmark_models.json | 19 ++++++++++++++++++- .github/workflows/atom-sglang-benchmark.yaml | 3 +++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/benchmark/sglang_benchmark_models.json b/.github/benchmark/sglang_benchmark_models.json index 50e3d08ed..6ca915eb4 100644 --- a/.github/benchmark/sglang_benchmark_models.json +++ b/.github/benchmark/sglang_benchmark_models.json @@ -22,7 +22,8 @@ "deepseek_v4_prefix_cache_common": "SGLANG_DEFAULT_SERVER_ARGS=\nAITER_BF16_FP8_MOE_BOUND=0\nATOM_MOE_GU_ITLV=1\nSGLANG_DEFAULT_THINKING=1\nSGLANG_DSV4_REASONING_EFFORT=max\nSGLANG_USE_AITER=1\nSGLANG_DSV4_FP4_EXPERTS=true\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nSGLANG_ENABLE_TORCH_COMPILE=1\nTORCHINDUCTOR_COMPILE_THREADS=128", "glm52_common": "SGLANG_DEFAULT_SERVER_ARGS=\nAITER_QUICK_REDUCE_QUANTIZATION=INT4\nAITER_USE_FLYDSL_MOE_SORTING=1\nSGLANG_USE_AITER=1\nSGLANG_ENABLE_TORCH_COMPILE=1\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nTORCHINDUCTOR_COMPILE_THREADS=128", "glm52_mi308_common": "SGLANG_DEFAULT_SERVER_ARGS=\nAITER_QUICK_REDUCE_QUANTIZATION=INT4\nAITER_USE_FLYDSL_MOE_SORTING=1\nSGLANG_AITER_FP8_PREFILL_ATTN=0\nSGLANG_ENABLE_TORCH_COMPILE=1\nSGLANG_USE_AITER=1\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nTORCHINDUCTOR_COMPILE_THREADS=128", - "qwen_common": "SGLANG_DEFAULT_SERVER_ARGS=\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nATOM_ENABLE_QK_NORM_ROPE_CACHE_QUANT_FUSION=0" + "qwen_common": "SGLANG_DEFAULT_SERVER_ARGS=\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nATOM_ENABLE_QK_NORM_ROPE_CACHE_QUANT_FUSION=0", + "minimax_m3_common": "SGLANG_DEFAULT_SERVER_ARGS=\nAITER_QUICK_REDUCE_QUANTIZATION=INT4\nSGLANG_USE_AITER=1\nATOM_FORCE_ATTN_TRITON=1\nSGLANG_AITER_FP8_PREFILL_ATTN=0\nTORCHINDUCTOR_COMPILE_THREADS=128\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nSGLANG_EXTERNAL_MM_PROCESSOR_PACKAGE=atom.plugin.sglang.models" } }, "models": [ @@ -462,6 +463,22 @@ "nightly_group": "A", "env_vars": "glm52_common" }, + { + "display": "MiniMax-M3-MXFP4 TP4", + "dashboard_model": "MiniMax-M3-MXFP4-tp4", + "workload_label": "SGLang-OOB", + "source_path": "amd/MiniMax-M3-MXFP4", + "path": "amd/MiniMax-M3-MXFP4", + "prefix": "minimax-m3-mxfp4-tp4", + "extra_args": [ + "trust_remote_code", + "--tensor-parallel-size 4 --attention-backend aiter --page-size 128 --mem-fraction-static 0.8 --context-length 32768 --max-running-requests 128 --disable-radix-cache --disable-cuda-graph" + ], + "bench_args": "", + "runner": "atom-mi355-8gpu-aac-runner", + "nightly_group": "B", + "env_vars": "minimax_m3_common" + }, { "display": "GLM-5.2 FP8 TP8 MI308", "dashboard_model": "GLM-5.2-FP8-tp8 MI308", diff --git a/.github/workflows/atom-sglang-benchmark.yaml b/.github/workflows/atom-sglang-benchmark.yaml index 134d2866f..c9f2e95c0 100644 --- a/.github/workflows/atom-sglang-benchmark.yaml +++ b/.github/workflows/atom-sglang-benchmark.yaml @@ -54,6 +54,7 @@ on: - GLM-5.1 FP8 TP8 - GLM-5.2 FP8 TP4 - GLM-5.2 FP4 TP4 + - MiniMax-M3-MXFP4 TP4 model_mi308: description: "Manual MI308 benchmark model selection" required: false @@ -668,6 +669,7 @@ jobs: "GLM-5.1 FP8 TP8": "glm-5-1-fp8-tp8", "GLM-5.2 FP8 TP4": "glm-5-2-fp8-tp4", "GLM-5.2 FP4 TP4": "glm-5-2-fp4-tp4", + "MiniMax-M3-MXFP4 TP4": "minimax-m3-mxfp4-tp4", "MI308 Qwen3.5-397B-A17B-FP8 TP4": "qwen3-5-397b-a17b-fp8-tp4-mi308", "MI308 Qwen3.5-397B-A17B-FP8 TP8": "qwen3-5-397b-a17b-fp8-tp8-mi308", "MI308 Qwen3.5-35B-A3B-FP8 TP1": "qwen3-5-35b-a3b-fp8-tp1-mi308", @@ -698,6 +700,7 @@ jobs: "glm-5-1-fp8-tp8", "glm-5-2-fp8-tp4", "glm-5-2-fp4-tp4", + "minimax-m3-mxfp4-tp4", ] OOB_P1_PREFIX_ORDER = [ "deepseek-v3-2-fp8-tp4", From 9f340bdba206cd891f49b3d715ddf91e2a5d9a4d Mon Sep 17 00:00:00 2001 From: junyyang Date: Wed, 22 Jul 2026 20:53:22 +0800 Subject: [PATCH 3/4] Move glm-5.1 from p0 to p2 --- .github/workflows/atom-sglang-benchmark.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atom-sglang-benchmark.yaml b/.github/workflows/atom-sglang-benchmark.yaml index c9f2e95c0..f3325a21e 100644 --- a/.github/workflows/atom-sglang-benchmark.yaml +++ b/.github/workflows/atom-sglang-benchmark.yaml @@ -697,7 +697,6 @@ jobs: "deepseek-v4-pro-tp8", "deepseek-v4-pro-mtp1-tp8", "deepseek-v4-pro-mtp3-tp8", - "glm-5-1-fp8-tp8", "glm-5-2-fp8-tp4", "glm-5-2-fp4-tp4", "minimax-m3-mxfp4-tp4", @@ -722,6 +721,7 @@ jobs: "deepseek-r1-fp4-mtp3-tp8-dp8-ep8", "qwen3-5-397b-a17b-fp8-tp4", "qwen3-5-397b-a17b-fp8-tp8", + "glm-5-1-fp8-tp8", ] def is_oob_mi308(model): From 32ae554b94273840e24030d7a004d35bdf6e713d Mon Sep 17 00:00:00 2001 From: junyyang Date: Thu, 23 Jul 2026 13:16:07 +0800 Subject: [PATCH 4/4] Modify extra args for GLM-5.2 --- .github/benchmark/sglang_benchmark_models.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/benchmark/sglang_benchmark_models.json b/.github/benchmark/sglang_benchmark_models.json index 6ca915eb4..aed9b3d76 100644 --- a/.github/benchmark/sglang_benchmark_models.json +++ b/.github/benchmark/sglang_benchmark_models.json @@ -23,7 +23,7 @@ "glm52_common": "SGLANG_DEFAULT_SERVER_ARGS=\nAITER_QUICK_REDUCE_QUANTIZATION=INT4\nAITER_USE_FLYDSL_MOE_SORTING=1\nSGLANG_USE_AITER=1\nSGLANG_ENABLE_TORCH_COMPILE=1\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nTORCHINDUCTOR_COMPILE_THREADS=128", "glm52_mi308_common": "SGLANG_DEFAULT_SERVER_ARGS=\nAITER_QUICK_REDUCE_QUANTIZATION=INT4\nAITER_USE_FLYDSL_MOE_SORTING=1\nSGLANG_AITER_FP8_PREFILL_ATTN=0\nSGLANG_ENABLE_TORCH_COMPILE=1\nSGLANG_USE_AITER=1\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nTORCHINDUCTOR_COMPILE_THREADS=128", "qwen_common": "SGLANG_DEFAULT_SERVER_ARGS=\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nATOM_ENABLE_QK_NORM_ROPE_CACHE_QUANT_FUSION=0", - "minimax_m3_common": "SGLANG_DEFAULT_SERVER_ARGS=\nAITER_QUICK_REDUCE_QUANTIZATION=INT4\nSGLANG_USE_AITER=1\nATOM_FORCE_ATTN_TRITON=1\nSGLANG_AITER_FP8_PREFILL_ATTN=0\nTORCHINDUCTOR_COMPILE_THREADS=128\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nSGLANG_EXTERNAL_MM_PROCESSOR_PACKAGE=atom.plugin.sglang.models" + "minimax_m3_common": "SGLANG_DEFAULT_SERVER_ARGS=\nAITER_QUICK_REDUCE_QUANTIZATION=INT4\nSGLANG_USE_AITER=1\nATOM_FORCE_ATTN_TRITON=1\nSGLANG_AITER_FP8_PREFILL_ATTN=0\nSGLANG_ENABLE_TORCH_COMPILE=1\nTORCHINDUCTOR_COMPILE_THREADS=128\nSGLANG_EXTERNAL_MODEL_PACKAGE=atom.plugin.sglang.models\nSGLANG_EXTERNAL_MM_PROCESSOR_PACKAGE=atom.plugin.sglang.models" } }, "models": [ @@ -472,7 +472,16 @@ "prefix": "minimax-m3-mxfp4-tp4", "extra_args": [ "trust_remote_code", - "--tensor-parallel-size 4 --attention-backend aiter --page-size 128 --mem-fraction-static 0.8 --context-length 32768 --max-running-requests 128 --disable-radix-cache --disable-cuda-graph" + "--tensor-parallel-size 4", + "--attention-backend aiter", + "--page-size 128", + "--mem-fraction-static 0.8", + "--context-length 32768", + "--max-running-requests 128", + "--model-loader-extra-config '{\"online_quant_config\":{\"global_quant_config\":\"ptpc_fp8\",\"exclude_layer\":[\"lm_head\",\"model.embed_tokens\",\"vision_tower\",\"multi_modal_projector\",\"patch_merge_mlp\",\"*block_sparse_moe\"]}}'", + "--json-model-override-args '{\"use_index_cache\":true,\"index_topk_freq\":4}'", + "--kv-cache-dtype fp8_e4m3", + "--disable-radix-cache" ], "bench_args": "", "runner": "atom-mi355-8gpu-aac-runner",