char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
689a9a470
char/aliceai-t5-moe
1#!/usr/bin/env python3 2from __future__import annotations 3 4import argparse 5import json 6import sys 7from typing import Any 8 9from speed_bench import fmt_value ,print_rows 10 11 12def load_summary (path :str )-> list [dict [str ,Any ]]: 13with open (path ,"r" ,encoding = "utf-8" )as f : 14data = json .load (f ) 15summary = data .get ("summary" ) 16if not isinstance (summary ,list ): 17raise ValueError (f" { path } does not contain a summary list" ) 18return summary 19 20 21def compare_rows (baseline :list [dict [str ,Any ]],speculative :list [dict [str ,Any ]])-> list [dict [str ,Any ]]: 22baseline_by_category = {row ["category" ]:row for row in baseline } 23comparisons = [] 24for row in speculative : 25base = baseline_by_category .get (row ["category" ]) 26if not base : 27continue 28base_speed = base .get ("avg_pred_t_s" ) 29spec_speed = row .get ("avg_pred_t_s" ) 30base_latency = base .get ("avg_latency" ) 31spec_latency = row .get ("avg_latency" ) 32comparisons .append ( 33 { 34"category" :row ["category" ], 35"base_avg_pred_t_s" :base_speed , 36"spec_avg_pred_t_s" :spec_speed , 37"decode_speedup" : (spec_speed / base_speed )if base_speed and spec_speed else None , 38"base_avg_latency" :base_latency , 39"spec_avg_latency" :spec_latency , 40"latency_speedup" : (base_latency / spec_latency )if base_latency and spec_latency else None , 41"accept_rate" :row .get ("accept_rate" ), 42 } 43 ) 44return comparisons 45 46 47def print_comparison (rows :list [dict [str ,Any ]])-> None : 48if not rows : 49"No overlapping categories found for comparison." ) 50return 51columns = [ 52 ("category" ,"category" ,"" ), 53 ("base_avg_pred_t/s" ,"base_avg_pred_t_s" ,"speed" ), 54 ("spec_avg_pred_t/s" ,"spec_avg_pred_t_s" ,"speed" ), 55 ("decode_speedup" ,"decode_speedup" ,"speedup" ), 56 ("base_avg_latency" ,"base_avg_latency" ,"seconds" ), 57 ("spec_avg_latency" ,"spec_avg_latency" ,"seconds" ), 58 ("latency_speedup" ,"latency_speedup" ,"speedup" ), 59 ("accept_rate" ,"accept_rate" ,"rate" ), 60 ] 61print_rows (rows ,columns ) 62 63 64def main (argv :list [str ]| None = None )-> int : 65parser = argparse .ArgumentParser (description = "Compare two SPEED-Bench runs (baseline vs speculative)." ) 66parser .add_argument ("--baseline" ,required = True ,help = "Baseline results JSON produced by speed_bench.py --output" ) 67parser .add_argument ("--speculative" ,required = True ,help = "Speculative decoding results JSON produced by speed_bench.py --output" ) 68args = parser .parse_args (argv ) 69 70try : 71baseline = load_summary (args .baseline ) 72speculative = load_summary (args .speculative ) 73except Exception as exc : 74f"speed_bench_compare: failed to load inputs: { exc } " ,file = sys .stderr ) 75return 2 76 77comparisons = compare_rows (baseline ,speculative ) 78f"Comparison: baseline= { args . baseline } speculative= { args . speculative } " ) 79print_comparison (comparisons ) 80return 0 81 82 83if __name__ == "__main__" : 84raise SystemExit (main ())