xref: /aosp_15_r20/external/pytorch/benchmarks/inference/process_metrics.py (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker"""
2*da0073e9SAndroid Build Coastguard WorkerThis file will take the csv outputs from server.py, calculate the mean and
3*da0073e9SAndroid Build Coastguard Workervariance of the warmup_latency, average_latency, throughput and gpu_util
4*da0073e9SAndroid Build Coastguard Workerand write these to the corresponding `results/output_{batch_size}_{compile}.md`
5*da0073e9SAndroid Build Coastguard Workerfile, appending to the file if it exists or creatng a new one otherwise.
6*da0073e9SAndroid Build Coastguard Worker"""
7*da0073e9SAndroid Build Coastguard Worker
8*da0073e9SAndroid Build Coastguard Workerimport argparse
9*da0073e9SAndroid Build Coastguard Workerimport os
10*da0073e9SAndroid Build Coastguard Worker
11*da0073e9SAndroid Build Coastguard Workerimport pandas as pd
12*da0073e9SAndroid Build Coastguard Worker
13*da0073e9SAndroid Build Coastguard Worker
14*da0073e9SAndroid Build Coastguard Workerif __name__ == "__main__":
15*da0073e9SAndroid Build Coastguard Worker    parser = argparse.ArgumentParser(description="Parse output files")
16*da0073e9SAndroid Build Coastguard Worker    parser.add_argument("--csv", type=str, help="Path to csv file")
17*da0073e9SAndroid Build Coastguard Worker    parser.add_argument("--name", type=str, help="Name of experiment")
18*da0073e9SAndroid Build Coastguard Worker    args = parser.parse_args()
19*da0073e9SAndroid Build Coastguard Worker
20*da0073e9SAndroid Build Coastguard Worker    input_csv = "./results/" + args.csv
21*da0073e9SAndroid Build Coastguard Worker    df = pd.read_csv(input_csv)
22*da0073e9SAndroid Build Coastguard Worker
23*da0073e9SAndroid Build Coastguard Worker    batch_size = int(os.path.basename(args.csv).split("_")[1])
24*da0073e9SAndroid Build Coastguard Worker    compile = os.path.basename(args.csv).split("_")[-1].split(".")[0]
25*da0073e9SAndroid Build Coastguard Worker
26*da0073e9SAndroid Build Coastguard Worker    # Calculate mean and standard deviation for a subset of metrics
27*da0073e9SAndroid Build Coastguard Worker    metrics = ["warmup_latency", "average_latency", "throughput", "gpu_util"]
28*da0073e9SAndroid Build Coastguard Worker    means = {}
29*da0073e9SAndroid Build Coastguard Worker    stds = {}
30*da0073e9SAndroid Build Coastguard Worker
31*da0073e9SAndroid Build Coastguard Worker    for metric in metrics:
32*da0073e9SAndroid Build Coastguard Worker        means[metric] = df[metric].mean()
33*da0073e9SAndroid Build Coastguard Worker        stds[metric] = df[metric].std()
34*da0073e9SAndroid Build Coastguard Worker
35*da0073e9SAndroid Build Coastguard Worker    output_md = f"results/output_{batch_size}_{compile}.md"
36*da0073e9SAndroid Build Coastguard Worker    write_header = os.path.isfile(output_md) is False
37*da0073e9SAndroid Build Coastguard Worker
38*da0073e9SAndroid Build Coastguard Worker    with open(output_md, "a+") as f:
39*da0073e9SAndroid Build Coastguard Worker        if write_header:
40*da0073e9SAndroid Build Coastguard Worker            f.write(f"## Batch Size {batch_size} Compile {compile}\n\n")
41*da0073e9SAndroid Build Coastguard Worker            f.write(
42*da0073e9SAndroid Build Coastguard Worker                "| Experiment | Warmup_latency (s) | Average_latency (s) | Throughput (samples/sec) | GPU Utilization (%) |\n"
43*da0073e9SAndroid Build Coastguard Worker            )
44*da0073e9SAndroid Build Coastguard Worker            f.write(
45*da0073e9SAndroid Build Coastguard Worker                "| ---------- | ------------------ | ------------------- | ------------------------ | ------------------- |\n"
46*da0073e9SAndroid Build Coastguard Worker            )
47*da0073e9SAndroid Build Coastguard Worker
48*da0073e9SAndroid Build Coastguard Worker        line = f"| {args.name} |"
49*da0073e9SAndroid Build Coastguard Worker        for metric in metrics:
50*da0073e9SAndroid Build Coastguard Worker            line += f" {means[metric]:.3f} +/- {stds[metric]:.3f} |"
51*da0073e9SAndroid Build Coastguard Worker        f.write(line + "\n")
52