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=priml.model.swiglu.relu,
        │           norm_momentum=0.1,
        │           image_size=(0, 0),
        │           grid=(0, 0)
        │       ),
        │       blocks_per_stage=2,
        │       activation=priml.model.swiglu.relu,
        │       norm_momentum=0.1,
        │       proj_out=None
        │   ),
        │   optimizer=CompositeOptimizer.Config(
        │       optimizers=[
        │           PartialConfig(
        │               <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=priml.loss.simple_loss.bce_with_logits,
        │       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(priml.math.schedules.constant),
        │   parallelism=NoParallel.Config(device=None),
        │   model_quantization=NoModelQuantization.Config(),
        │   activation_memoization=DefaultActivationStorage.Config(),
        │   compile=PartialConfig(torch.compile, 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(priml.math.schedules.cosine),
        │   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=priml.math.stats.pca_eigh
        ),
        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,
        model_torch_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
        )
    )
