Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion .github/benchmark/sglang_benchmark_models.json
Original file line number Diff line number Diff line change
Expand Up @@ -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\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": [
Expand Down Expand Up @@ -462,6 +463,31 @@
"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",
"--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",
"nightly_group": "B",
"env_vars": "minimax_m3_common"
},
{
"display": "GLM-5.2 FP8 TP8 MI308",
"dashboard_model": "GLM-5.2-FP8-tp8 MI308",
Expand Down
67 changes: 52 additions & 15 deletions .github/workflows/atom-sglang-benchmark.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -50,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
Expand Down Expand Up @@ -664,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",
Expand Down Expand Up @@ -691,9 +697,9 @@ 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",
]
OOB_P1_PREFIX_ORDER = [
"deepseek-v3-2-fp8-tp4",
Expand All @@ -715,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):
Expand All @@ -740,40 +747,70 @@ 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", "")
selected_group, selected = scheduled_oob_selection(schedule_cron)
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:
Expand All @@ -792,7 +829,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}"

Expand Down
Loading