Skip to content

v2026.10.0

Latest

Choose a tag to compare

@brianhenn brianhenn released this 20 Oct 20:48
· 10 commits to main since this release
8935f50

⚠️ Changes to Existing Model Inference

  • Inference entrypoints load EMA weights by default when the checkpoint holds EMA parameters, as ckpt.tar does. best_ckpt.tar, best_inference_ckpt.tar and ema_ckpt_*.tar already hold EMA weights and are unaffected. Set use_ema_if_available: false for the previous behavior (#1531)
  • Ocean checkpoints using ocean_heat_content_correction produce different rollouts. The corrector now weights heat content by sea_surface_fraction, and frozen precipitation is no longer counted twice in the precipitation heat flux (#1571, #1570)

Breaking Changes

  • engine: h5netcdf has been removed; use netcdf4 (#1540)
  • The deprecated, unused fields on NoiseConditionedSFNOBuilder have been removed. Existing YAML and checkpoints still load (#1500)
  • Step configs' output_names, input_names, next_step_input_names and prognostic_names return frozenset[str] (#1466)

Other behavior changes that do not raise an error:

  • With checkpointing >= 1, the conditional SFNO's input encoder previously received no gradients and stayed at its random initialization. It now trains (#1493)
  • An inline inference entry's epochs slice is resolved against training epochs 1..max_epochs, with epoch 0 added when evaluate_before_training is set. This can change which epochs coupled configs evaluate (#1409)
  • input_dropout no longer masks non-optimized rollout steps (#1450)
  • Nino3.4 power scalars (*_nino34_index_power_2_5yr, *_1_16yr) are rescaled and can't be compared with earlier runs (#1494)

What's Changed

Inference

  • stepper_override.corrector replaces a checkpoint's corrector at inference time, in both standalone and coupled runs (#1441)
  • Monthly-mean output can be written as zarr (time_coarsen: {method: monthly_mean}, format: {name: zarr}) (#1472)
  • Coupled inference adds segmented runs (--segments) that resume after preemption, and a seed option (#1368, #1440)

Training

  • TrainStepperConfig.pushforward_steps runs the first N rollout steps without gradients (#1551)
  • stepper_training.corrector_loss adds opt-in pre-corrector optimization and a penalty on correction magnitude (#1426)
  • residual_prediction accepts a ResidualPredictionConfig that picks which prognostic variables are predicted as residuals and can normalize them by tendency statistics. true/false still work (#1487)
  • Also new: an "L1" loss type (#1478), SecondaryDecoderConfig.include_input_step (#1437), and Samudra noise conditioning and lat_pad: pole (#1464, #1566)
  • On preemption, multi-GPU jobs stop without faulting the node, and they still save a restart checkpoint when not model-parallel (#1425, #1438)

Ocean

  • New ocean corrector options: salt content correction, zos global-mean correction, and a "prescribed_open_ocean" method for the hfds correction (#1533, #1564, #1501)

Downscaling

  • Video PMD: an endpoint-conditioned video diffusion model, with fme.downscaling.video_train and fme.downscaling.video_inference entrypoints (#1413, #1415, #1416)

Performance and Environment

  • Zarr data loading from a networked filesystem is 2.5–6x faster with the zarrs codec pipeline (#1421, #1422). The zarr writer is 3.6x faster to cloud object storage and about 8x faster to a networked filesystem (#1486, #1534)
  • zarrs>=0.2.3 is a new dependency, the minimum zarr is now 3.1, and h5netcdf/h5py have been dropped

Fixes

  • Multi-GPU per-channel loss logging (#1466), zarr inference with zero data workers (#1524), a multi-GPU ENSO aggregator deadlock (#1490), and NaN best_inference_error logging (#1442)

Full Changelog: v2026.8.0...v2026.10.0