Skip to content

callback_factory

callback_factory

Builders for the training callback stack.

build_training_callbacks

build_training_callbacks(experiment_config, training_config, output_dir, has_validation)

Build the workspace's training callback stack.

Parameters:

Name Type Description Default
experiment_config ExperimentConfig

Experiment settings (checkpointing cadence).

required
training_config TrainingConfig

Training settings (EMA, SWA, stages, LR control).

required
output_dir Path

Directory receiving checkpoints.

required
has_validation bool

Whether a validation loader exists.

required

Returns:

Type Description
list[Callback]

Callbacks in registration order; ordering matters for callbacks that

list[Callback]

read state set by earlier ones (e.g. training stages before prior

list[Callback]

target standardization).

Source code in src/versatil/training/callback_factory.py
def build_training_callbacks(
    experiment_config: ExperimentConfig,
    training_config: TrainingConfig,
    output_dir: Path,
    has_validation: bool,
) -> list[Callback]:
    """Build the workspace's training callback stack.

    Args:
        experiment_config: Experiment settings (checkpointing cadence).
        training_config: Training settings (EMA, SWA, stages, LR control).
        output_dir: Directory receiving checkpoints.
        has_validation: Whether a validation loader exists.

    Returns:
        Callbacks in registration order; ordering matters for callbacks that
        read state set by earlier ones (e.g. training stages before prior
        target standardization).
    """
    callbacks: list[Callback] = [TQDMProgressBar(refresh_rate=1)]
    callbacks.extend(_build_ema_callbacks(training_config=training_config))
    callbacks.extend(
        _build_checkpoint_callbacks(
            experiment_config=experiment_config,
            output_dir=output_dir,
            has_validation=has_validation,
        )
    )
    callbacks.extend(
        _build_early_stopping_callbacks(
            training_config=training_config, has_validation=has_validation
        )
    )
    callbacks.append(GradientNormCallback(log_every_n_steps=50))
    callbacks.append(LearningRateMonitor(logging_interval="step"))
    callbacks.extend(_build_swa_callbacks(training_config=training_config))
    callbacks.extend(
        _build_stage_callbacks(
            training_config=training_config, has_validation=has_validation
        )
    )
    return callbacks