NeuralGCM / conf /config.yaml
yzt15806542928's picture
Upload folder using huggingface_hub
f4a39ee verified
Raw
History Blame Contribute Delete
18.5 kB
project:
name: neuralgcm_develop
task: earth_system_forecasting
seed: 20260904
paths:
project_root: .
# Upstream source is supplied by the external neuralgcm package.
official_source_dir: null
virtual_era5_dir: data
checkpoint_dir: data/checkpoint
result_dir: results
metadata_dir: metadata
model:
# Native NeuralGCM pressure-level input contract.
variant: weather_forecast
grid_degrees: 0.7
# Gaussian grid shape in [longitude, latitude] order (the model API reports
# the same grid as (latitude, longitude) when printing sizes).
grid_shape: [512, 256]
profiles:
weather_forecast:
description: "未来2至15天天气预报"
official_reference: models_v1_deterministic_0_7_deg.pkl
grid_degrees: 0.7
grid_shape: [512, 256]
climate_scale:
description: "气候尺度模拟"
official_reference: models_v1_deterministic_1_4_deg.pkl
grid_degrees: 1.4
grid_shape: [256, 128]
forecast_2_8_deg:
description: "2.8度天气预报"
official_reference: models_v1_deterministic_2_8_deg.pkl
grid_degrees: 2.8
grid_shape: [128, 64]
stochastic_1_4_deg:
description: "1.4度随机预报"
official_reference: models_v1_stochastic_1_4_deg.pkl
grid_degrees: 1.4
grid_shape: [256, 128]
pressure_levels_hpa: [1, 2, 3, 5, 7, 10, 20, 30, 50, 70, 100, 125, 150, 175, 200, 225, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 775, 800, 825, 850, 875, 900, 925, 950, 975, 1000]
input_variables: [geopotential, specific_humidity, temperature, u_component_of_wind, v_component_of_wind]
optional_input_variables: [specific_cloud_ice_water_content, specific_cloud_liquid_water_content]
forcing_variables: [sea_ice_cover, sea_surface_temperature]
official_checkpoint: null
load_pretrained: false
data:
dataset_class: onescience.datapipes.climate.ERA5Dataset
data_dir: data
# Optional auxiliary static fields generated by fake_data.py or supplied by
# a real ERA5 preprocessing job. Dynamic channels remain in data/*.h5.
static_file: data/static.nc
# Exact Gaussian-grid static fields extracted from the four official
# checkpoints by scripts/prepare_static_data.py. These take precedence over
# the source-grid synthetic fallback above.
static_files:
weather_forecast: data/static/weather_forecast.nc
climate_scale: data/static/climate_scale.nc
forecast_2_8_deg: data/static/forecast_2_8_deg.nc
stochastic_1_4_deg: data/static/stochastic_1_4_deg.nc
field_key: fields
time_step_hours: 6
input_steps: 1
# Official training consumes a time trajectory. Increase for production
# rollouts; 1 is retained for the minimal data validation command.
output_steps: 1
normalize: false
batch_size: 1
num_workers: 0
train_years: [1999]
val_years: [2000]
test_years: [2001]
virtual:
# Memory-conscious default: one initial frame + eight future 6-hour
# frames. Use --forecast-steps 60 for the full official 15-day horizon.
timesteps_per_year: 9
forecast_steps: 8
forecast_horizon_days: 2
height: 721
width: 1440
seed: 20260904
# Exact flattened fields order used by fake_data.py and ERA5Dataset.
channel_order: &channel_order
- geopotential_1
- geopotential_2
- geopotential_3
- geopotential_5
- geopotential_7
- geopotential_10
- geopotential_20
- geopotential_30
- geopotential_50
- geopotential_70
- geopotential_100
- geopotential_125
- geopotential_150
- geopotential_175
- geopotential_200
- geopotential_225
- geopotential_250
- geopotential_300
- geopotential_350
- geopotential_400
- geopotential_450
- geopotential_500
- geopotential_550
- geopotential_600
- geopotential_650
- geopotential_700
- geopotential_750
- geopotential_775
- geopotential_800
- geopotential_825
- geopotential_850
- geopotential_875
- geopotential_900
- geopotential_925
- geopotential_950
- geopotential_975
- geopotential_1000
- specific_humidity_1
- specific_humidity_2
- specific_humidity_3
- specific_humidity_5
- specific_humidity_7
- specific_humidity_10
- specific_humidity_20
- specific_humidity_30
- specific_humidity_50
- specific_humidity_70
- specific_humidity_100
- specific_humidity_125
- specific_humidity_150
- specific_humidity_175
- specific_humidity_200
- specific_humidity_225
- specific_humidity_250
- specific_humidity_300
- specific_humidity_350
- specific_humidity_400
- specific_humidity_450
- specific_humidity_500
- specific_humidity_550
- specific_humidity_600
- specific_humidity_650
- specific_humidity_700
- specific_humidity_750
- specific_humidity_775
- specific_humidity_800
- specific_humidity_825
- specific_humidity_850
- specific_humidity_875
- specific_humidity_900
- specific_humidity_925
- specific_humidity_950
- specific_humidity_975
- specific_humidity_1000
- temperature_1
- temperature_2
- temperature_3
- temperature_5
- temperature_7
- temperature_10
- temperature_20
- temperature_30
- temperature_50
- temperature_70
- temperature_100
- temperature_125
- temperature_150
- temperature_175
- temperature_200
- temperature_225
- temperature_250
- temperature_300
- temperature_350
- temperature_400
- temperature_450
- temperature_500
- temperature_550
- temperature_600
- temperature_650
- temperature_700
- temperature_750
- temperature_775
- temperature_800
- temperature_825
- temperature_850
- temperature_875
- temperature_900
- temperature_925
- temperature_950
- temperature_975
- temperature_1000
- u_component_of_wind_1
- u_component_of_wind_2
- u_component_of_wind_3
- u_component_of_wind_5
- u_component_of_wind_7
- u_component_of_wind_10
- u_component_of_wind_20
- u_component_of_wind_30
- u_component_of_wind_50
- u_component_of_wind_70
- u_component_of_wind_100
- u_component_of_wind_125
- u_component_of_wind_150
- u_component_of_wind_175
- u_component_of_wind_200
- u_component_of_wind_225
- u_component_of_wind_250
- u_component_of_wind_300
- u_component_of_wind_350
- u_component_of_wind_400
- u_component_of_wind_450
- u_component_of_wind_500
- u_component_of_wind_550
- u_component_of_wind_600
- u_component_of_wind_650
- u_component_of_wind_700
- u_component_of_wind_750
- u_component_of_wind_775
- u_component_of_wind_800
- u_component_of_wind_825
- u_component_of_wind_850
- u_component_of_wind_875
- u_component_of_wind_900
- u_component_of_wind_925
- u_component_of_wind_950
- u_component_of_wind_975
- u_component_of_wind_1000
- v_component_of_wind_1
- v_component_of_wind_2
- v_component_of_wind_3
- v_component_of_wind_5
- v_component_of_wind_7
- v_component_of_wind_10
- v_component_of_wind_20
- v_component_of_wind_30
- v_component_of_wind_50
- v_component_of_wind_70
- v_component_of_wind_100
- v_component_of_wind_125
- v_component_of_wind_150
- v_component_of_wind_175
- v_component_of_wind_200
- v_component_of_wind_225
- v_component_of_wind_250
- v_component_of_wind_300
- v_component_of_wind_350
- v_component_of_wind_400
- v_component_of_wind_450
- v_component_of_wind_500
- v_component_of_wind_550
- v_component_of_wind_600
- v_component_of_wind_650
- v_component_of_wind_700
- v_component_of_wind_750
- v_component_of_wind_775
- v_component_of_wind_800
- v_component_of_wind_825
- v_component_of_wind_850
- v_component_of_wind_875
- v_component_of_wind_900
- v_component_of_wind_925
- v_component_of_wind_950
- v_component_of_wind_975
- v_component_of_wind_1000
- specific_cloud_ice_water_content_1
- specific_cloud_ice_water_content_2
- specific_cloud_ice_water_content_3
- specific_cloud_ice_water_content_5
- specific_cloud_ice_water_content_7
- specific_cloud_ice_water_content_10
- specific_cloud_ice_water_content_20
- specific_cloud_ice_water_content_30
- specific_cloud_ice_water_content_50
- specific_cloud_ice_water_content_70
- specific_cloud_ice_water_content_100
- specific_cloud_ice_water_content_125
- specific_cloud_ice_water_content_150
- specific_cloud_ice_water_content_175
- specific_cloud_ice_water_content_200
- specific_cloud_ice_water_content_225
- specific_cloud_ice_water_content_250
- specific_cloud_ice_water_content_300
- specific_cloud_ice_water_content_350
- specific_cloud_ice_water_content_400
- specific_cloud_ice_water_content_450
- specific_cloud_ice_water_content_500
- specific_cloud_ice_water_content_550
- specific_cloud_ice_water_content_600
- specific_cloud_ice_water_content_650
- specific_cloud_ice_water_content_700
- specific_cloud_ice_water_content_750
- specific_cloud_ice_water_content_775
- specific_cloud_ice_water_content_800
- specific_cloud_ice_water_content_825
- specific_cloud_ice_water_content_850
- specific_cloud_ice_water_content_875
- specific_cloud_ice_water_content_900
- specific_cloud_ice_water_content_925
- specific_cloud_ice_water_content_950
- specific_cloud_ice_water_content_975
- specific_cloud_ice_water_content_1000
- specific_cloud_liquid_water_content_1
- specific_cloud_liquid_water_content_2
- specific_cloud_liquid_water_content_3
- specific_cloud_liquid_water_content_5
- specific_cloud_liquid_water_content_7
- specific_cloud_liquid_water_content_10
- specific_cloud_liquid_water_content_20
- specific_cloud_liquid_water_content_30
- specific_cloud_liquid_water_content_50
- specific_cloud_liquid_water_content_70
- specific_cloud_liquid_water_content_100
- specific_cloud_liquid_water_content_125
- specific_cloud_liquid_water_content_150
- specific_cloud_liquid_water_content_175
- specific_cloud_liquid_water_content_200
- specific_cloud_liquid_water_content_225
- specific_cloud_liquid_water_content_250
- specific_cloud_liquid_water_content_300
- specific_cloud_liquid_water_content_350
- specific_cloud_liquid_water_content_400
- specific_cloud_liquid_water_content_450
- specific_cloud_liquid_water_content_500
- specific_cloud_liquid_water_content_550
- specific_cloud_liquid_water_content_600
- specific_cloud_liquid_water_content_650
- specific_cloud_liquid_water_content_700
- specific_cloud_liquid_water_content_750
- specific_cloud_liquid_water_content_775
- specific_cloud_liquid_water_content_800
- specific_cloud_liquid_water_content_825
- specific_cloud_liquid_water_content_850
- specific_cloud_liquid_water_content_875
- specific_cloud_liquid_water_content_900
- specific_cloud_liquid_water_content_925
- specific_cloud_liquid_water_content_950
- specific_cloud_liquid_water_content_975
- specific_cloud_liquid_water_content_1000
- sea_ice_cover
- sea_surface_temperature
training:
mode: weather_forecast
max_steps: 3
trajectory_length: 2
# Global batch size. For --devices N it is rounded up to a multiple of N;
# each replica then receives distinct trajectories.
samples_per_step: 1
# Number of local JAX devices for optional synchronous data parallelism.
devices: 1
shuffle: true
drop_last: true
# OneScience ERA5Dataset samples are prefetched on host threads while the
# current DCU step runs. Keep the queue shallow for full 721x1440 fields.
data_num_workers: 2
prefetch_batches: 1
# Full params/EMA/optimizer/reader state is always saved on clean exit. Set a
# positive interval for periodic resumable checkpoints during long runs.
checkpoint_interval: 0
learning_rate: 0.0001
optimizer:
name: adam
schedule: constant
b1: 0.9
b2: 0.95
eps: 1.0e-6
# Optional piecewise constant schedule. Empty boundaries use base LR.
rates: []
boundaries: []
# Public Experiment tracks an EMA for evaluation/checkpointing. Set to 0 to
# disable; otherwise this is the effective average window in optimizer steps.
ema_num_steps: 1000
rollout_schedule: []
# Public NeuralGCM uses transformed trajectory losses. The private job loss
# bindings and complete normalization tables are unavailable, so every
# published coefficient and every auditable fallback remain explicit here.
gradient_clip_norm: 1.0
loss:
backend: official
# Supplementary G.4 deterministic objective coefficients:
# 20*data MSE + 0.1*data spectrum MSE + 1*model MSE
# + 0.1*model spectrum MSE + 2*batch spectral bias MSE.
data_weight: 20.0
data_spectrum_weight: 0.1
model_weight: 1.0
model_spectrum_weight: 0.1
bias_weight: 2.0
accuracy_time_scale_hours: 24.0
spectral_time_scale_hours: 40.0
spectral_cutoff_by_mode:
weather_forecast: 120
climate_scale: 80
forecast_2_8_deg: 42
# Optional exact PerVariableRescaling weights. Each value multiplies the
# squared error. When null, factor/scale below multiplies the error.
variable_weights: null
# The paper uses ERA5 24-hour difference standard deviations, but does not
# publish the complete numerical tables. These auditable fallbacks keep
# physical variables balanced; replace them with statistics calculated
# from the exact ERA5 training vintage for a precision reproduction.
time_rescaling: legacy
spectral_weight: 0.0
variable_scales:
z: 10000.0
t: 30.0
u: 30.0
v: 30.0
specific_humidity: 0.01
specific_cloud_ice_water_content: 1.0e-5
specific_cloud_liquid_water_content: 2.0e-5
divergence: 0.1
vorticity: 0.1
log_surface_pressure: 0.1
default: 1.0
# Additional balancing factors stated explicitly in Supplementary G.3.
variable_factors:
z: 2.0
specific_humidity: 0.66
log_surface_pressure: 5.0
specific_cloud_ice_water_content: 0.05
specific_cloud_liquid_water_content: 0.05
default: 1.0
# Order 12 is exact. Absolute half-power cutoffs below are digitized from
# Supplementary Fig. 8 because the underlying numeric table was not
# released. Interpolation is performed at the configured output times.
predictability_filter:
enabled: true
order: 12
lead_hours: [0, 6, 12, 24, 36, 48, 60, 72]
cutoffs:
temperature: [80, 120, 120, 95, 45, 35, 30, 25]
wind: [80, 120, 115, 82, 48, 36, 29, 24]
moisture: [80, 120, 110, 52, 34, 28, 24, 21]
divergence: [80, 120, 105, 43, 24, 19, 16, 14]
default: [80, 120, 115, 82, 48, 36, 29, 24]
# Optional multiplicative weights for pressure levels, ordered as the
# configured ERA5 pressure-level list. Empty means uniform weighting.
level_weights: []
# Long-run reproduction settings inferred from the public paper description
# and released training pseudocode. The paper's private job bindings are not
# available, so these are explicit project settings rather than exact claims.
# They are enabled only by --paper-defaults; CLI values remain highest priority.
profiles:
weather_forecast:
max_steps: 25000
learning_rate: 0.001
optimizer: &paper_optimizer
schedule: neuralgcm
warmup_steps: 2000
decay_start: 15000
decay_steps: 10000
decay_rate: 0.5
rollout_schedule:
- {trajectory_length: 2, until_step: 0} # 6 h
- {trajectory_length: 3, until_step: 500} # 12 h
- {trajectory_length: 4, until_step: 2000} # 18 h
- {trajectory_length: 5, until_step: 4500} # 24 h
- {trajectory_length: 7, until_step: 8000} # 36 h
- {trajectory_length: 9, until_step: 12500} # 48 h
- {trajectory_length: 11, until_step: 18000} # 60 h
climate_scale:
max_steps: 26000
learning_rate: 0.002
optimizer: *paper_optimizer
rollout_schedule: &coarse_rollout_schedule
- {trajectory_length: 3, until_step: 0} # 12 h
- {trajectory_length: 5, until_step: 2000} # 24 h
- {trajectory_length: 7, until_step: 5656} # 36 h
- {trajectory_length: 9, until_step: 10392} # 48 h
- {trajectory_length: 11, until_step: 16000} # 60 h
- {trajectory_length: 13, until_step: 22360} # 72 h
forecast_2_8_deg:
max_steps: 38000
learning_rate: 0.002
optimizer: *paper_optimizer
rollout_schedule: *coarse_rollout_schedule
stochastic_1_4_deg:
max_steps: 43000
learning_rate: 0.001
ensemble_size: 2
optimizer: *paper_optimizer
rollout_schedule:
- {trajectory_length: 2, until_step: 0} # 6 h
- {trajectory_length: 3, until_step: 500} # 12 h
- {trajectory_length: 4, until_step: 2000} # 18 h
- {trajectory_length: 5, until_step: 4500} # 24 h
- {trajectory_length: 7, until_step: 8000} # 36 h
- {trajectory_length: 9, until_step: 12500} # 48 h
- {trajectory_length: 11, until_step: 18000} # 60 h
- {trajectory_length: 13, until_step: 24500} # 72 h
- {trajectory_length: 17, until_step: 32000} # 96 h
- {trajectory_length: 21, until_step: 40500} # 120 h
loss:
backend: crps
variable_weights: null
variable_scale: 1.0
nodal_time_scale_hours: 24.0
spectral_time_scale_hours: 40.0
spectral_max_wavenumber: 80
checkpoint: null
gin_config: null
train_dataset: null
eval_dataset: null
inference:
mode: weather_forecast
# Used by stochastic profiles; deterministic checkpoints ignore the key.
seed: 20260904
# Memory-conscious default: eight 6-hour outputs reach forecast day 2.
# Set --steps 60 to exercise the model's full 15-day capability.
prediction_steps: 8
output_interval_hours: 6
# An official-format local model_bak.pkl takes precedence when present;
# otherwise inference selects the profile's bundled checkpoint.
checkpoint: data/checkpoint/model_bak.pkl
output: results/predictions.nc
runtime:
platform: auto
dcu_device: 0