1
Fork 0

refactor(log): use dataclass for config

This commit is contained in:
Tibo De Peuter 2026-04-16 15:18:40 +02:00
parent 37a4b59e04
commit c5b08e817e
Signed by: tdpeuter
SSH key fingerprint: SHA256:u/h/LVoqKF1Iz02uOyxe6hcjmoZASCGV2HM0TG9ZMoU
3 changed files with 17 additions and 28 deletions

View file

@ -36,13 +36,9 @@ def main(dict_cfg: DictConfig):
cfg_dict = OmegaConf.to_container(dict_cfg, resolve=True, throw_on_missing=True)
init_logger(
run_name=run_name,
config=cfg_dict,
project_name=config.logging.wandb_project_name,
entity=config.logging.wandb_entity,
full_config=cfg_dict,
logging_cfg=config.logging,
base_dir=os.path.dirname(run_dir),
use_wandb=config.logging.track,
upload_final_model=config.logging.upload_final_model,
upload_checkpoints=config.logging.upload_checkpoints,
)
logger = get_logger()
logger.info(f"Hydra-initialized run: {run_name}")

View file

@ -14,18 +14,16 @@ class SimpleLogger:
def __init__(
self,
run_name: str = "simple_run",
config: Optional[Dict[str, Any]] = None,
project_name: str = "none",
entity: Optional[str] = None,
full_config: Optional[Dict[str, Any]] = None,
logging_cfg: Optional[Any] = None,
base_dir: str = "runs",
use_wandb: bool = False,
save_code: bool = False,
log_level: int = logging.INFO,
_set_as_global: bool = False,
):
self.is_interactive = True
self.run_name = run_name
self.config = config or {}
self.full_config = full_config or {}
print(f"[INIT] SimpleLogger initialized for run: {run_name}")
def set_level(self, level: int):

View file

@ -18,6 +18,7 @@ import jax.numpy as jnp
import numpy as np
from experiment_logger.wandb_utils import finish_wandb, init_wandb
from experiment_logger.config_logger import LoggingConfig
# Global storage for the active logger and the proxy singleton
_active_logger: Optional[Any] = None
@ -88,13 +89,9 @@ class UnifiedLogger:
def __init__(
self,
run_name: str,
config: Dict[str, Any],
project_name: str = "PPO-Modularity",
entity: Optional[str] = None,
full_config: Dict[str, Any],
logging_cfg: LoggingConfig,
base_dir: str = "runs",
use_wandb: bool = True,
upload_final_model: bool = False,
upload_checkpoints: bool = False,
save_code: bool = True,
log_level: int = logging.INFO,
):
@ -102,18 +99,16 @@ class UnifiedLogger:
Args:
run_name: Unique name for this run
config: Configuration dictionary with hyperparameters
project_name: WandB project name
entity: WandB entity (team/user name)
full_config: Full configuration dictionary with hyperparameters to be saved
logging_cfg: Structured logging configuration dataclass
base_dir: Base directory for local storage
use_wandb: Whether to use WandB logging
save_code: Whether to save code to WandB
"""
self.run_name = run_name
self.config = config
self.use_wandb = use_wandb
self.upload_final_model = upload_final_model
self.upload_checkpoints = upload_checkpoints
self.full_config = full_config
self.use_wandb = logging_cfg.track
self.upload_final_model = logging_cfg.upload_final_model
self.upload_checkpoints = logging_cfg.upload_checkpoints
self.wandb_available = False
self.wandb_run = None
self.is_interactive = sys.stdout.isatty()
@ -163,7 +158,7 @@ class UnifiedLogger:
# Initialize WandB if requested
if self.use_wandb:
self._init_wandb(project_name, entity, save_code)
self._init_wandb(logging_cfg.wandb_project_name, logging_cfg.wandb_entity, save_code)
# Initialize metrics storage
self.metrics_buffer: List[Dict[str, Any]] = []
@ -211,7 +206,7 @@ class UnifiedLogger:
project=project_name,
entity=entity,
name=self.run_name,
config=self.config,
config=self.full_config,
save_code=save_code,
resume="allow",
)
@ -221,7 +216,7 @@ class UnifiedLogger:
"""Save configuration to disk."""
try:
with open(self.config_file, "w") as f:
yaml.dump(self.config, f, default_flow_style=False, indent=2, sort_keys=False)
yaml.dump(self.full_config, f, default_flow_style=False, indent=2, sort_keys=False)
self.info(f"Config saved to {self.config_file}")
except Exception as e:
self.error(f"Error saving config: {e}")