File size: 1,743 Bytes
4f99f73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import argparse
from pathlib import Path

import matplotlib.pyplot as plt
import pandas as pd


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--runs-dir", default="runs")
    args = parser.parse_args()
    runs_dir = Path(args.runs_dir)
    frames = [pd.read_csv(path) for path in runs_dir.glob("*/history.csv")]
    if not frames:
        raise SystemExit("No histories found")
    results = pd.concat(frames, ignore_index=True)
    results.to_csv(runs_dir / "summary_table.csv", index=False)
    final = results.sort_values("stage").groupby("run_name", as_index=False).tail(1)
    (runs_dir / "summary_table.md").write_text(final.to_markdown(index=False))
    specs = [
        ("eval_accuracy", "Evaluation accuracy", "eval_accuracy_by_stage.png"),
        ("eval_sampled_pass_at_1", "Sampled pass@1", "sampled_pass_at_1_by_stage.png"),
        ("eval_sampled_pass_at_4", "Sampled pass@4", "sampled_pass_at_4_by_stage.png"),
        ("train_reward_mean", "Train reward mean", "reward_mean_by_stage.png"),
        ("kl_mean", "KL mean", "kl_by_stage.png"),
        ("avg_completion_length", "Completion length", "completion_length_by_stage.png"),
    ]
    for column, ylabel, filename in specs:
        if column not in results or results[column].isna().all():
            continue
        plt.figure(figsize=(7, 4))
        for run_name, group in results.groupby("run_name"):
            plt.plot(group["stage"], group[column], marker="o", label=run_name)
        plt.xlabel("Stage")
        plt.ylabel(ylabel)
        plt.legend()
        plt.tight_layout()
        plt.savefig(runs_dir / filename, dpi=160)
        plt.close()
    print(final.to_string(index=False))


if __name__ == "__main__":
    main()