Files
wehub-resource-sync 94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:38:16 +08:00

118 lines
3.9 KiB
Python

"""Process a raw srt-slurm benchmark result JSON into an aggregated format.
Usage (called once per result file):
RESULT_FILENAME=<path_without_.json> PREFILL_GPUS=<n> DECODE_GPUS=<n> \\
RECIPE_FILE=<path_to_recipe.yaml> python3 process_result.py
Required env vars:
RESULT_FILENAME - path to the result file without the .json extension
FRAMEWORK - e.g. dynamo-sglang
PRECISION - e.g. fp8, fp4
MODEL_PREFIX - short model label, e.g. dsr1
ISL - input sequence length
OSL - output sequence length
PREFILL_GPUS - number of prefill GPUs (extracted from result filename)
DECODE_GPUS - number of decode GPUs (extracted from result filename)
Optional env vars:
RECIPE_FILE - path to the srt-slurm recipe YAML; if set, topology
fields (TP, EP, DP, workers) are parsed from it
"""
import json
import os
import sys
from pathlib import Path
def require(var):
val = os.environ.get(var)
if val is None:
print(f"ERROR: Missing required env var: {var}", file=sys.stderr)
sys.exit(1)
return val
result_filename = require("RESULT_FILENAME")
framework = require("FRAMEWORK")
precision = require("PRECISION")
model_prefix = require("MODEL_PREFIX")
isl = int(require("ISL"))
osl = int(require("OSL"))
prefill_gpus = int(require("PREFILL_GPUS"))
decode_gpus = int(require("DECODE_GPUS"))
with open(f"{result_filename}.json") as f:
raw = json.load(f)
# ---------------------------------------------------------------------------
# Topology — parse from recipe YAML if available, otherwise default to 0/"-"
# ---------------------------------------------------------------------------
prefill_tp = prefill_ep = prefill_dp_attn = 0
prefill_num_workers = decode_tp = decode_ep = decode_dp_attn = decode_num_workers = 0
recipe_file = os.environ.get("RECIPE_FILE")
if recipe_file and Path(recipe_file).exists():
import yaml
with open(recipe_file) as f:
recipe = yaml.safe_load(f)
res = recipe.get("resources", {})
prefill_num_workers = res.get("prefill_workers", 0)
decode_num_workers = res.get("decode_workers", 0)
sgl = recipe.get("backend", {}).get("sglang_config", {})
p = sgl.get("prefill", {})
d = sgl.get("decode", {})
prefill_tp = p.get("tensor-parallel-size", 0)
prefill_ep = p.get("expert-parallel-size", 0)
prefill_dp_attn = p.get("data-parallel-size", "-")
decode_tp = d.get("tensor-parallel-size", 0)
decode_ep = d.get("expert-parallel-size", 0)
decode_dp_attn = d.get("data-parallel-size", "-")
total_gpus = prefill_gpus + decode_gpus
data = {
"hw": os.environ.get("HW", "gb200"),
"conc": int(raw["max_concurrency"]),
"model": raw["model_id"],
"infmax_model_prefix": model_prefix,
"framework": framework,
"precision": precision,
"isl": isl,
"osl": osl,
"is_multinode": True,
"disagg": True,
"num_prefill_gpu": prefill_gpus,
"num_decode_gpu": decode_gpus,
"prefill_num_workers": prefill_num_workers,
"prefill_tp": prefill_tp,
"prefill_ep": prefill_ep,
"prefill_dp_attention": prefill_dp_attn,
"decode_num_workers": decode_num_workers,
"decode_tp": decode_tp,
"decode_ep": decode_ep,
"decode_dp_attention": decode_dp_attn,
"tput_per_gpu": float(raw["total_token_throughput"]) / total_gpus,
"output_tput_per_gpu": float(raw["output_throughput"]) / decode_gpus,
"input_tput_per_gpu": (
float(raw["total_token_throughput"]) - float(raw["output_throughput"])
)
/ prefill_gpus,
}
for key, value in raw.items():
if key.endswith("_ms"):
data[key.replace("_ms", "")] = float(value) / 1000.0
if "tpot" in key:
data[key.replace("_ms", "").replace("tpot", "intvty")] = 1000.0 / float(value)
out_path = Path(result_filename).parent / f"agg_{Path(result_filename).name}.json"
with open(out_path, "w") as f:
json.dump(data, f, indent=2)
print(f"Written: {out_path}")