import os import json import time from datetime import datetime import joblib import psutil import platform try: import cpuinfo CPU_NAME = cpuinfo.get_cpu_info().get('brand_raw', platform.processor()) except Exception: CPU_NAME = platform.processor() def log_experiment_results(logs, log_dir="experiments/logs/", log_file="experiment_log.jsonl"): os.makedirs(log_dir, exist_ok=True) log_path = os.path.join(log_dir, log_file) with open(log_path, "a") as f: for entry in logs: f.write(json.dumps(entry) + "\n") def create_log_entry(experiment_title, model_name, hyperparams, dataset_name, preprocessing, metrics, train_time, model_object): timestamp = datetime.now().isoformat() model_size = get_model_size(model_object) cpu_util = psutil.cpu_percent(interval=0.1) return { "experiment_title": experiment_title, "timestamp": timestamp, "model": model_name, "hyperparameters": hyperparams, "dataset": dataset_name, "preprocessing": preprocessing, "metrics": metrics, "training_time_sec": train_time, "model_size_bytes": model_size, "system_info": { "cpu": CPU_NAME, "cpu_utilization": cpu_util, "memory_used_mb": psutil.Process().memory_info().rss // 1024 ** 2 } } def get_model_size(model): temp_path = "experiments/logs/_temp_model.joblib" joblib.dump(model, temp_path) size = os.path.getsize(temp_path) os.remove(temp_path) return size