Skip to content

2026.8.0

Latest

Choose a tag to compare

@elynnwu elynnwu released this 10 Aug 19:20
· 8 commits to main since this release
78ea64f

What's Changed

Configuration

  • Inference and one-step aggregators moved from boolean flags to typed, hierarchical metric configuration — each metric is a named field with its own config and enabled/strict flags, and defaults are explicit rather than inferred at build time (#1126, #1150, #1154)
  • Training now takes lists of weighted inference and validation entries, each with its own loader, aggregator, epoch schedule, name, and weight. Weighted sums drive checkpoint selection and LR scheduling (#1128, #1149)

Stepper State

A new per-sample StepperState carried on BatchData enables several capabilities at once:

  • Global dry-air mass can be pinned to its initial-condition value, a stronger constraint than per-step conserve_dry_air (#1225)
  • Seedable random state makes stochastic inference reproducible and independent of forward_steps_in_memory, with a seed option on both inference entrypoints (#1330)
  • State is threaded through CoupledStepper and serialized across segmented-inference restarts (#1367, #1341)

Models and Training

  • Swin Transformer backbone added as a drop-in SFNO alternative (#1248); HEALPix UNet modernized (#1156)
  • Correctors report their per-step effect as delta = corrected - network_output, carried through to prediction output with an opt-in step-diagnostics netCDF writer (#1321, #1335)
  • Variable masking allows training across heterogeneous data sources with different available variables (#1160, #1329)
  • Gradient clipping, per-channel loss reporting, and loud NaN failures at the network input boundary (#1265, #1159, #1297)
  • Coupled models can now use the prognostic prescriber, enable-able at inference via overrides (#1030)

Diagnostics

Environment

  • Shared conda environment, Docker image, and CI updated to Python 3.12 and torch 2.10. Minimum required dependency versions are unchanged (#1402)

Breaking Changes

Existing training YAML will need updating:

  • TrainConfig.inference and additional_inference are replaced by a single inference: list[InlineInferenceConfig]; AdditionalInferenceConfig is removed (#1128, #1133)
  • validation_loader and validation_aggregator are replaced by validation in both fme.ace and fme.coupled (#1149)
  • Coupled LossContributionsConfig is removed; its fields move onto ComponentTrainingConfig (#1158)
  • fme.core.masking renamed to fme.core.spatial_masking, with corresponding class renames. Serialization keys and the input_masking YAML key are preserved (#1180)

Behavior changes that do not raise an error:

  • Default almost_fair_crps_alpha changed from 0.95 to 1.0, i.e. fair CRPS is now the default (#1139)
  • Segmented run subdirectories are labeled by start date rather than segment number (#1382)
  • Shuffled data loading uses a different RNG, so batch sequences differ for the same seed (#1095)
  • mse_fractional_components validation metric removed in favor of true per-channel loss (#1380)
  • n_ensemble_per_ic > 1 is now rejected in segmented inference (#1300)

Full Changelog: v2026.5.1...v2026.8.0