Skip to content

Reference configuration

The full default configuration composed from cryocast/config/base.yaml and all its sub-configs. This is the configuration used when you run any command without overrides.

Note

Interpolation markers such as ${base_path} are left unresolved so you can see exactly which keys reference shared values. Set base_path in your local config file to point to your data directory.

Named model configs

The model section below shows the default (quick_test). Alternative model configs live in cryocast/config/model/ and can be selected with:

uv run cryocast <command> --config-name my_config  # where my_config inherits base and overrides /model

Full config

data:
  datasets:
    samp-floatsouth-argo-25p0km-2020-2024-24h-v3:
      name: samp-floatsouth-argo-25p0km-2020-2024-24h-v3
      group_as: float-argo
      description: ARGO float data for southern hemisphere
      attribution: ARGO
      licence: CC-BY-4.0
      dates:
        start: '2020-01-01T12:00:00'
        end: '2024-07-31T12:00:00'
        frequency: 24h
        missing:
        - start: '2022-01-01T12:00:00'
          end: '2022-06-30T12:00:00'
        - start: '2022-08-01T12:00:00'
          end: '2022-12-31T12:00:00'
        - start: '2023-02-01T12:00:00'
          end: '2023-12-31T12:00:00'
        - start: '2024-02-01T12:00:00'
          end: '2024-06-30T12:00:00'
      statistics:
        end: '2021-12-31T12:00:00'
      input:
        pipe:
        - argo:
            area: 0/-180/-90/180
            crs: EPSG:6932
            param:
            - TEMP
            - PSAL
            resolution: 25p0km
            shape:
            - 432
            - 432
        - nan-to-num:
            variables:
            - TEMP
            - PSAL
            replace_with: 99
        - set-geography:
            crs: ${...0.argo.crs}
            resolution: ${...0.argo.resolution}
    samp-sicsouth-osisaf-25p0km-2020-2024-24h-v1:
      name: samp-sicsouth-osisaf-25p0km-2020-2024-24h-v1
      group_as: sic-osisaf
      description: Sea ice concentration from SMMR/SSMI/SSMIS + AMSR-E/AMSR2 + AMSR2
        for southern hemisphere
      attribution: EUMETSAT/OSISAF
      licence: CC-BY-4.0
      dates:
        start: '2020-01-01T12:00:00'
        end: '2024-07-31T12:00:00'
        frequency: 24h
        missing:
        - start: '2022-01-01T12:00:00'
          end: '2022-06-30T12:00:00'
        - start: '2022-08-01T12:00:00'
          end: '2022-12-31T12:00:00'
        - start: '2023-02-01T12:00:00'
          end: '2023-12-31T12:00:00'
        - start: '2024-02-01T12:00:00'
          end: '2024-06-30T12:00:00'
      postprocessors:
        mask_generator:
          _target_: cryocast.ingestion.postprocessors.StatusFlagMaskGenerator
      statistics:
        end: '2021-12-31T12:00:00'
      input:
        pipe:
        - concat:
          - dates:
              start: '2012-07-24T12:00:00'
              end: '2020-12-31T12:00:00'
              frequency: 24h
            ftp:
              url: ftp://osisaf.met.no/reprocessed/ice/conc_amsr/v3p0/{date:strftime(%Y)}/{date:strftime(%m)}/ice_conc_sh_ease2-250_cdr-v3p0-amsr_{date:strftime(%Y%m%d)}1200.nc
          - dates:
              start: '2021-01-01T12:00:00'
              end: '2025-12-31T12:00:00'
              frequency: 24h
            ftp:
              url: ftp://osisaf.met.no/reprocessed/ice/conc-cont-reproc-amsr/v3p0/{date:strftime(%Y)}/{date:strftime(%m)}/ice_conc_sh_ease2-250_icdr-v3p0-amsr_{date:strftime(%Y%m%d)}1200.nc
        - drop:
            param:
            - algorithm_standard_uncertainty
            - raw_ice_conc_values
            - smearing_standard_uncertainty
        - rescale:
            scale: 0.01
            offset: 0.0
            param: ice_conc
        - rescale:
            scale: 0.01
            offset: 0.0
            param: total_standard_uncertainty
        - nan-to-num:
            variables:
            - ice_conc
            - total_standard_uncertainty
            replace_with: 0.0
        - set-geography:
            crs: EPSG:6932
            resolution: 25p0km
    samp-weathersouth-era5-25p0km-2020-2024-24h-v4:
      name: samp-weathersouth-era5-25p0km-2020-2024-24h-v4
      group_as: era5
      description: Weather from ERA5 for partial southern hemisphere
      attribution: ECMWF/C3S
      licence: CC-BY-4.0
      dates:
        start: '2020-01-01T12:00:00'
        end: '2024-07-31T12:00:00'
        frequency: 24h
        missing:
        - start: '2022-01-01T12:00:00'
          end: '2022-06-30T12:00:00'
        - start: '2022-08-01T12:00:00'
          end: '2022-12-31T12:00:00'
        - start: '2023-02-01T12:00:00'
          end: '2023-12-31T12:00:00'
        - start: '2024-02-01T12:00:00'
          end: '2024-06-30T12:00:00'
      statistics:
        end: '2021-12-31T12:00:00'
      input:
        pipe:
        - join:
          - mars:
              use_cdsapi_dataset: reanalysis-era5-complete
              area: -15/-180/-90/180
              grid: 0.25 / 0.25
              levtype: sfc
              param:
              - 2t
              - sp
              - 10u
              - 10v
              - msl
          - mars:
              use_cdsapi_dataset: reanalysis-era5-complete
              area: -15/-180/-90/180
              grid: 0.25 / 0.25
              level:
              - 10
              - 250
              - 500
              - 1000
              levtype: pl
              param:
              - z
              - t
              - q
              - u
              - v
          - forcings:
              param:
              - cos_julian_day
              - insolation
              - sin_julian_day
              template: \${input.pipe.0.join.0.mars}
        - reproject:
            crs: EPSG:6932
            resolution: 25p0km
            shape:
            - 432
            - 432
  split:
    predict:
    - start: null
      end: null
    test:
    - start: '2024-01-01'
      end: '2024-01-31'
    - start: '2024-07-01'
      end: '2024-07-31'
    train:
    - start: '2020-01-01'
      end: '2021-12-31'
    validate:
    - start: '2022-07-01'
      end: '2022-07-31'
    - start: '2023-01-01'
      end: '2023-01-31'
evaluate:
  callbacks:
    activation_saver:
      _target_: cryocast.callbacks.ActivationSaver
      layer_paths: []
      output_dir: ${base_path}/evaluation/activations/
    media_logging:
      _target_: cryocast.callbacks.MediaLoggingCallback
      frequency:
        number: 3
      make_input_plots: false
      make_static_plots: true
      make_video_plots: true
      model_name: ${model.name}
      plot_spec:
        include_ice_edge: true
    metric_summary:
      _target_: cryocast.callbacks.MetricSummaryCallback
    prediction_writer:
      _target_: cryocast.callbacks.PredictionWriter
      enabled: false
  trainer: ${train.trainer}
loss:
  _target_: cryocast.losses.amse_loss.AMSELoss
  mode: hybrid
  spectral_weight: 0.1
  delta: 0.5
  merge_bins_below: 4
  eps: 1.0e-12
  wavenumber_weight: null
  lead_time_exponent: null
model:
  _target_: cryocast.models.EncodeProcessDecode
  name: quick-test
  encoders:
    latent_space:
    - 128
    - 128
    era5:
      _target_: cryocast.models.encoders.NaiveLinearEncoder
    float-argo:
      _target_: cryocast.models.encoders.NaiveLinearEncoder
    sic-osisaf:
      _target_: cryocast.models.encoders.NaiveLinearEncoder
    sic-ssmis:
      _target_: cryocast.models.encoders.NaiveLinearEncoder
  processor:
    _target_: cryocast.models.processors.UNetProcessor
    norm_type: groupnorm
    start_out_channels: 64
  decoder:
    _target_: cryocast.models.decoders.NaiveLinearDecoder
    mask_type: active
    restrict_range: sigmoid
    skip_connection:
      method: none
random:
  seed: null
  fully_deterministic: false
reporting:
  loggers:
    wandb:
      _target_: lightning.pytorch.loggers.wandb.WandbLogger
      entity: turing-seaice
      log_model: false
      name: null
      offline: false
      save_dir: ${base_path}/training/
  metrics:
  - name: accuracy
    _target_: cryocast.metrics.IceNetAccuracyPerForecastDay
  - name: centroid_error
    _target_: cryocast.metrics.CentroidErrorPerForecastDay
  - name: diiee
    _target_: cryocast.metrics.DistanceAveragedIceEdgeErrorPerForecastDay
  - name: fss_neighbourhood_size_1
    _target_: cryocast.metrics.FractionalSkillScorePerForecastDay
    neighbourhood_size: 1
  - name: fss_neighbourhood_size_15
    _target_: cryocast.metrics.FractionalSkillScorePerForecastDay
    neighbourhood_size: 15
  - name: fss_neighbourhood_size_5
    _target_: cryocast.metrics.FractionalSkillScorePerForecastDay
    neighbourhood_size: 5
  - name: iiee
    _target_: cryocast.metrics.IntegratedIceEdgeErrorPerForecastDay
  - name: mae
    _target_: cryocast.metrics.MAEPerForecastDay
  - name: rmse
    _target_: cryocast.metrics.RMSEPerForecastDay
  - name: sieerror
    _target_: cryocast.metrics.SeaIceExtentErrorPerForecastDay
  - name: spatial_mean_ground_truth
    _target_: cryocast.metrics.SpatialMeanGroundTruthPerForecastDay
  - name: spatial_mean_prediction
    _target_: cryocast.metrics.SpatialMeanPredictionPerForecastDay
  - name: ssim
    _target_: cryocast.metrics.SSIMPerForecastDay
train:
  callbacks:
    best_checkpoint:
      _target_: lightning.pytorch.callbacks.ModelCheckpoint
      monitor: validation_loss
      mode: min
      save_top_k: 1
      save_last: true
    early_stopping:
      _target_: lightning.pytorch.callbacks.EarlyStopping
      monitor: validation_loss
      mode: min
      patience: 10
    ema_weight_averaging:
      _target_: cryocast.callbacks.EMAWeightAveragingCallback
      decay_rate: 0.999
      every_n_epochs: 1
      every_n_steps: 100
    learning_rate:
      _target_: lightning.pytorch.callbacks.LearningRateMonitor
    media_logging:
      _target_: cryocast.callbacks.MediaLoggingCallback
      frequency:
        number: 3
      make_input_plots: false
      make_static_plots: true
      make_video_plots: false
      model_name: ${model.name}
      plot_spec:
        dpi: 72
    metric_summary:
      _target_: cryocast.callbacks.MetricSummaryCallback
  lr_scheduler:
    frequency: 1
    interval: epoch
    name: learning-rate
  multistage:
    finetune:
      optimizer:
        lr: 0.0005
  optimizer:
    _target_: torch.optim.AdamW
    lr: 0.005
    weight_decay: 0.01
  scheduler:
    _target_: torch.optim.lr_scheduler.CosineAnnealingLR
    eta_min: 1.0e-06
    T_max: ${..trainer.max_epochs}
  trainer:
    _target_: lightning.pytorch.trainer.trainer.Trainer
    accelerator: auto
    devices: auto
    gradient_clip_val: 1.0
    log_every_n_steps: 50
    max_epochs: 50
    strategy: auto
base_path: ../base
variables:
  input:
    era5:
    - 10u
    - 10v
    - 2t
    - cos_julian_day
    - insolation
    - msl
    - q_10
    - q_1000
    - q_250
    - q_500
    - sin_julian_day
    - sp
    - t_10
    - t_1000
    - t_250
    - t_500
    - u_10
    - u_1000
    - u_250
    - u_500
    - v_10
    - v_1000
    - v_250
    - v_500
    - z_10
    - z_1000
    - z_250
    - z_500
    float-argo:
    - PSAL
    - TEMP
    sic-osisaf:
    - ice_conc
    - status_flag
    - total_standard_uncertainty
  target:
    sic-osisaf:
    - ice_conc
window:
  batch_size: 4
  n_forecast_steps: 3
  n_history_steps: 2