in src/lighteval/logging/evaluation_tracker.py [0:0]
def save(self) -> None:
"""Saves the experiment information and results to files, and to the hub if requested."""
logger.info("Saving experiment tracker")
date_id = datetime.now().isoformat().replace(":", "-")
# We first prepare data to save
config_general = asdict(self.general_config_logger)
# We remove the config from logging, which contains context/accelerator objects
config_general.pop("config")
results_dict = {
"config_general": config_general,
"results": self.metrics_logger.metric_aggregated,
"versions": self.versions_logger.versions,
"config_tasks": self.task_config_logger.tasks_configs,
"summary_tasks": self.details_logger.compiled_details,
"summary_general": asdict(self.details_logger.compiled_details_over_all_tasks),
}
# Create the details datasets for later upload
details_datasets: dict[str, Dataset] = {}
for task_name, task_details in self.details_logger.details.items():
# Create a dataset from the dictionary - we force cast to str to avoid formatting problems for nested objects
dataset = Dataset.from_list([asdict(detail) for detail in task_details])
# We don't keep 'id' around if it's there
column_names = dataset.column_names
if "id" in dataset.column_names:
column_names = [t for t in dataset.column_names if t != "id"]
# Sort column names to make it easier later
dataset = dataset.select_columns(sorted(column_names))
details_datasets[task_name] = dataset
# We save results at every case
self.save_results(date_id, results_dict)
if self.should_save_details:
self.save_details(date_id, details_datasets)
if self.should_push_to_hub:
self.push_to_hub(
date_id=date_id,
details=details_datasets,
results_dict=results_dict,
)
if self.wandb is True:
self.push_to_wandb(
results_dict=results_dict,
details_datasets=details_datasets,
)
if self.should_push_results_to_tensorboard:
self.push_to_tensorboard(
results=self.metrics_logger.metric_aggregated, details=self.details_logger.compiled_details
)