| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | """Data processing used for analyzing and presenting the results""" |
| |
|
| | import json |
| | import os |
| |
|
| | import pandas as pd |
| |
|
| |
|
| | def preprocess(rows, task_name: str, print_fn=print): |
| | results = [] |
| | skipped = 0 |
| | for row in rows: |
| | run_info = row["run_info"] |
| | train_info = row["train_info"] |
| | meta_info = row["meta_info"] |
| | if run_info["peft_config"]: |
| | peft_type = run_info["peft_config"]["peft_type"] |
| | else: |
| | peft_type = "full-finetuning" |
| | if train_info["status"] != "success": |
| | skipped += 1 |
| | continue |
| |
|
| | train_metrics = train_info["metrics"][-1] |
| |
|
| | |
| | dct = { |
| | "task_name": task_name, |
| | "experiment_name": run_info["experiment_name"], |
| | "model_id": run_info["train_config"]["model_id"], |
| | "train_config": run_info["train_config"], |
| | "peft_type": peft_type, |
| | "peft_config": run_info["peft_config"], |
| | "accelerator_memory_reserved_avg": train_info["accelerator_memory_reserved_avg"], |
| | "accelerator_memory_max": train_info["accelerator_memory_max"], |
| | "accelerator_memory_reserved_99th": train_info["accelerator_memory_reserved_99th"], |
| | "total_time": run_info["total_time"], |
| | "train_time": train_info["train_time"], |
| | "file_size": train_info["file_size"], |
| | "num_trainable_params": train_info["num_trainable_params"], |
| | "test_accuracy": train_metrics["test accuracy"], |
| | "train_loss": train_metrics["train loss"], |
| | "train_samples": train_metrics["train samples"], |
| | "train_total_tokens": train_metrics["train total tokens"], |
| | "forgetting*": train_metrics.get("forgetting", 123), |
| | "peft_version": meta_info["package_info"]["peft-version"], |
| | "peft_branch": run_info["peft_branch"], |
| | "transformers_version": meta_info["package_info"]["transformers-version"], |
| | "datasets_version": meta_info["package_info"]["datasets-version"], |
| | "torch_version": meta_info["package_info"]["torch-version"], |
| | "bitsandbytes_version": meta_info["package_info"]["bitsandbytes-version"], |
| | "package_info": meta_info["package_info"], |
| | "system_info": meta_info["system_info"], |
| | "created_at": run_info["created_at"], |
| | } |
| | results.append(dct) |
| |
|
| | if skipped: |
| | print_fn(f"Skipped {skipped} of {len(rows)} entries because the train status != success") |
| |
|
| | return results |
| |
|
| |
|
| | def load_jsons(path): |
| | results = [] |
| | for fn in os.listdir(path): |
| | if fn.endswith(".json"): |
| | with open(os.path.join(path, fn)) as f: |
| | row = json.load(f) |
| | results.append(row) |
| | return results |
| |
|
| |
|
| | def load_df(path, task_name, print_fn=print): |
| | jsons = load_jsons(path) |
| | preprocessed = preprocess(jsons, task_name=task_name, print_fn=print_fn) |
| | dtype_dict = { |
| | "task_name": "string", |
| | "experiment_name": "string", |
| | "model_id": "string", |
| | "train_config": "string", |
| | "peft_type": "string", |
| | "peft_config": "string", |
| | "accelerator_memory_reserved_avg": int, |
| | "accelerator_memory_max": int, |
| | "accelerator_memory_reserved_99th": int, |
| | "total_time": float, |
| | "train_time": float, |
| | "file_size": int, |
| | "test_accuracy": float, |
| | "train_loss": float, |
| | "train_samples": int, |
| | "train_total_tokens": int, |
| | "forgetting*": float, |
| | "num_trainable_params": int, |
| | "peft_version": "string", |
| | "peft_branch": "string", |
| | "transformers_version": "string", |
| | "datasets_version": "string", |
| | "torch_version": "string", |
| | "bitsandbytes_version": "string", |
| | "package_info": "string", |
| | "system_info": "string", |
| | "created_at": "string", |
| | } |
| | df = pd.DataFrame(preprocessed) |
| | df = df.astype(dtype_dict) |
| | df["created_at"] = pd.to_datetime(df["created_at"]) |
| | |
| | df["train_time"] = df["train_time"].round().astype(int) |
| | df["total_time"] = df["total_time"].round().astype(int) |
| |
|
| | |
| | important_columns = [ |
| | "experiment_name", |
| | "peft_type", |
| | "total_time", |
| | "train_time", |
| | "test_accuracy", |
| | "train_loss", |
| | "accelerator_memory_max", |
| | "accelerator_memory_reserved_99th", |
| | "accelerator_memory_reserved_avg", |
| | "num_trainable_params", |
| | "file_size", |
| | "created_at", |
| | "task_name", |
| | "forgetting*", |
| | ] |
| | other_columns = [col for col in df if col not in important_columns] |
| | df = df[important_columns + other_columns] |
| |
|
| | columns = ["experiment_name", "model_id", "peft_type", "created_at"] |
| | |
| | df = df.sort_values("created_at").drop_duplicates(columns, keep="last") |
| | return df |
| |
|