@@ -243,7 +243,7 @@ def derive_fields(path: Path, payload: dict[str, Any]) -> dict[str, Any] | None:
243243
244244
245245def enrich_payload (
246- path : Path , payload : dict [str , Any ], fields : dict [str , Any ]
246+ path : Path , payload : dict [str , Any ], fields : dict [str , Any ], hardware : str | None
247247) -> dict [str , Any ]:
248248 env = slurm_job_env (path )
249249 enriched = dict (payload )
@@ -263,6 +263,13 @@ def enrich_payload(
263263 enriched .setdefault ("decode_workers" , env .get ("DECODE_WORKERS" ))
264264 enriched .setdefault ("prefill_tp" , env .get ("PREFILL_TP" ))
265265 enriched .setdefault ("decode_tp" , env .get ("DECODE_TP" ))
266+ runner = env .get ("SLURM_SUBMIT_RUNNER" , "" )
267+ if hardware :
268+ enriched ["hardware" ] = hardware
269+ elif runner == "atomesh-cicd-mi350" :
270+ enriched ["hardware" ] = "MI350X"
271+ elif runner == "atomesh-cicd" :
272+ enriched ["hardware" ] = "MI355X"
266273
267274 if "total_token_throughput" not in enriched :
268275 enriched ["total_token_throughput" ] = number (
@@ -330,7 +337,9 @@ def perf_point(
330337 hardware = string_value (
331338 payload .get ("hardware" ), payload .get ("gpu_name" ), default = "mi355x"
332339 ).lower ()
333- if "mi355" in hardware :
340+ if "mi350" in hardware :
341+ hardware = "mi350x"
342+ elif "mi355" in hardware :
334343 hardware = "mi355x"
335344 backend = string_value (
336345 payload .get ("backend" ), fields .get ("backend" ), default = "atom"
@@ -457,6 +466,7 @@ def collect_dashboard_entries(
457466 paths : list [Path ],
458467 run_url : str | None ,
459468 gsm8k_scores : dict [tuple [str , int ], dict [str , Any ]],
469+ hardware : str | None ,
460470) -> tuple [list [dict [str , Any ]], list [dict [str , Any ]]]:
461471 entries : list [dict [str , Any ]] = []
462472 rows : list [dict [str , Any ]] = []
@@ -469,7 +479,7 @@ def collect_dashboard_entries(
469479 fields = derive_fields (path , payload )
470480 if not fields :
471481 continue
472- payload = enrich_payload (path , payload , fields )
482+ payload = enrich_payload (path , payload , fields , hardware )
473483 conc = int (payload .get ("max_concurrency" , fields ["conc" ]))
474484 gsm8k_score = gsm8k_scores .get ((topology_key (fields ["topology" ]), conc ))
475485 if gsm8k_score is None :
@@ -538,12 +548,13 @@ def write_summary(rows: list[dict[str, Any]], summary_path: Path) -> None:
538548 lines = [
539549 "### ATOMesh Model Performance Benchmark Summary" ,
540550 "" ,
541- "| Model | Topology | ISL/OSL | Concurrency | Interactivity | Total tok/s | Input tok/s | Output tok/s | Total tok/s/GPU | Input tok/s/GPU | Output tok/s/GPU | TTFT ms | TPOT ms | E2E ms | GSM8K |" ,
542- "| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |" ,
551+ "| Hardware | Model | Topology | ISL/OSL | Concurrency | Interactivity | Total tok/s | Input tok/s | Output tok/s | Total tok/s/GPU | Input tok/s/GPU | Output tok/s/GPU | TTFT ms | TPOT ms | E2E ms | GSM8K |" ,
552+ "| --- | --- | --- | --- | --- : | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |" ,
543553 ]
544554 for row in rows :
545555 lines .append (
546- "| {model} | {topology} | {isl}/{osl} | {conc} | {interactivity} | {total} | {input_} | {output} | {total_per_gpu} | {input_per_gpu} | {output_per_gpu} | {ttft} | {tpot} | {e2e} | {gsm8k} |" .format (
556+ "| {hardware} | {model} | {topology} | {isl}/{osl} | {conc} | {interactivity} | {total} | {input_} | {output} | {total_per_gpu} | {input_per_gpu} | {output_per_gpu} | {ttft} | {tpot} | {e2e} | {gsm8k} |" .format (
557+ hardware = row .get ("hardware" , "--" ),
547558 model = row .get ("benchmark_model_name" , "--" ),
548559 topology = row .get ("display_topology" ) or row .get ("topology" , "--" ),
549560 isl = row .get ("random_input_len" , "--" ),
@@ -578,12 +589,15 @@ def main() -> None:
578589 )
579590 parser .add_argument ("--summary" , default = "benchmark-summary.md" )
580591 parser .add_argument ("--run-url" , default = None )
592+ parser .add_argument ("--hardware" , default = None )
581593 args = parser .parse_args ()
582594
583595 root = Path (args .result_dir )
584596 bench_paths = list (root .rglob ("pd-*.json" ))
585597 gsm8k_scores = find_eval_scores (root )
586- entries , rows = collect_dashboard_entries (bench_paths , args .run_url , gsm8k_scores )
598+ entries , rows = collect_dashboard_entries (
599+ bench_paths , args .run_url , gsm8k_scores , args .hardware
600+ )
587601 Path (args .output ).write_text (json .dumps (entries , indent = 2 ), encoding = "utf-8" )
588602 write_summary (rows , Path (args .summary ))
589603 print (
0 commit comments