|
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
|
|
|