Cifar10TrainLoop(
                study_name='cifar10',
                experiment_name='exp000',
                base_dir='/opt/scratch',
                working_dir=PosixPath('/opt/scratch/runs/cifar10/exp000'),
                doc='',
                step=Cifar10TrainStep.Config(
                │       model=ResNet.Config(
                │               channels_in=3,
                │               channels_out=10,
                │               image_size=(32, 32),
                │               channels_hidden=(64, 128, 256),
                │               block=ResidualBlock.Config(
                │                       channels_in=-1,
                │                       channels_out=-1,
                │                       stride=1,
                │                       activation=<function priml.model.swiglu.relu at 0xdefacedeface>,
                │                       norm_momentum=0.1,
                │                       image_size=(0, 0),
                │                       grid=(0, 0)
                │               ),
                │               blocks_per_stage=2,
                │               activation=<function priml.model.swiglu.relu at 0xdefacedeface>,
                │               norm_momentum=0.1,
                │               proj_out=None
                │       ),
                │       optimizer=CompositeOptimizer.Config(
                │               optimizers=[
                │                       PartialConfig(<class 'functools.partial'>, <class 'torch.optim.adamw.AdamW'>, lr=0.001, betas=(0.9, 0.999), weight_decay=0.05)
                │               ],
                │               select=[],
                │               require_total=True,
                │               drop_empty=False
                │       ),
                │       loss=SimpleLoss.Config(
                │               loss_fn=<function priml.loss.simple_loss.bce_with_logits at 0xdefacedeface>,
                │               target_key='label',
                │               kwargs={'reduction': 'none'},
                │               channels_out=-1
                │       ),
                │       accumulate_grad_batches=1,
                │       drop_partial_accumulation_on_epoch_end=True,
                │       train_budget_steps=inf,
                │       train_budget_sec=inf,
                │       train_budget_epochs=inf,
                │       lr_schedule=PartialConfig(<class 'functools.partial'>, <function priml.math.schedules.constant at 0xdefacedeface>),
                │       parallelism=NoParallel.Config(device=None),
                │       model_quantization=NoModelQuantization.Config(),
                │       activation_memoization=DefaultActivationStorage.Config(),
                │       compile=PartialConfig(<class 'functools.partial'>, <function torch.compile at 0xdefacedeface>, fullgraph=True),
                │       ema=NoEMA.Config(),
                │       gradient_clip_norm=inf,
                │       skip_step_on_nonfinite_grad=False,
                │       device_init='eager',
                │       dtype_autocast=None,
                │       autocast_cache_enabled=False,
                │       total_train_steps=2_910,
                │       schedule=PartialConfig(<class 'functools.partial'>, <function priml.math.schedules.cosine at 0xdefacedeface>),
                │       warmup_fraction=0.02,
                │       label_smoothing=0.1,
                │       translate_pad=4,
                │       cutout_size=0,
                │       derandomized_flip=False,
                │       use_tta=False,
                │       whiten_num_images=5_000,
                │       whiten_cache_path='',
                │       whiten_decompose=<function priml.math.stats.pca_eigh at 0xdefacedeface>
                ),
                dataset=Cifar10Data.Config(
                        base_dir='/opt/scratch',
                        working_dir=PosixPath('/opt/scratch/datasets/cifar10'),
                        batch_size=512,
                        eval_batch_size=1_000,
                        drop_last=False,
                        device=None,
                        dtype=torch.float32
                ),
                metrics_train={},
                metrics_eval={'accuracy': TopK.Config(k_values=[1])},
                checkpointer=Checkpointer.Config(
                        base_dir=PosixPath('/opt/scratch/runs/cifar10/exp000'),
                        working_dir=PosixPath('/opt/scratch/runs/cifar10/exp000/checkpoints'),
                        filename='step_{step:08d}.pt',
                        save_every=1_000,
                        keep_last_n=-1,
                        keep_every=0,
                        storer=SyncLocalStateDictStorer.Config(),
                        resume=True,
                        resume_step=-1,
                        allow_checkpoint_overwrite=False,
                        best_metric='',
                        best_mode='max'
                ),
                profiler=None,
                phase_timer=PhaseTimer.Config(
                        enabled=False,
                        torch_profile=False,
                        base_dir=PosixPath('/opt/scratch/runs/cifar10/exp000'),
                        working_dir=PosixPath('/opt/scratch/runs/cifar10/exp000/profiling'),
                        heartbeat_interval_sec=20.0,
                        fault_dump_interval_sec=40.0,
                        cuda_events=False
                ),
                tracker=None,
                max_steps=2_910,
                max_epochs=inf,
                max_time=inf,
                max_time_kind='wall',
                max_eval_time=inf,
                eval_stop_on_time_limit=False,
                num_steps_eval=97,
                num_steps_log=10,
                early_train_log_steps=100,
                eval_every_epoch=True,
                eval_extras_every_eval=False,
                eval_warmup_batches=0,
                eval_only=False,
                restore_rng_state=True,
                seed=None,
                num_steps_garbage_collect=inf,
                mesh_dim_model_seed='pp',
                mesh_dim_data_seed='dp',
                runtime=SingleProcess.Config(
                        device=None,
                        deterministic=False,
                        float32_matmul_precision=None
                )
        )
