AIFS_Single_v1 / conf /config.yaml
yzt15806542928's picture
Upload folder using huggingface_hub
b1411c4 verified
Raw
History Blame Contribute Delete
10.3 kB
# =============================================================================
# AIFS v1.1 β€” Configuration
# =============================================================================
# ═════════════════════════════════════════════════════════════════════════════
# Data (most frequently modified)
# ═════════════════════════════════════════════════════════════════════════════
data:
data_dir: "./fake_era5" # ERA5 H5 root (contains data/{year}.h5)
# data_dir: "/work2/share/sugonhpcapp01/ERA5"
train_years: # training set
- 2005
- 2006
val_years: # validation set
- 2007
test_years: # test / inference set
- 2008
test_lead_time: 24 # hours (240 = 10 days, official default)
fake_data_nt: 60 # timesteps per fake-data year
# ═════════════════════════════════════════════════════════════════════════════
# Hardware
# ═════════════════════════════════════════════════════════════════════════════
hardware:
device: "dcu"
device_ids: "0"
# ═════════════════════════════════════════════════════════════════════════════
# Checkpoint
# ═════════════════════════════════════════════════════════════════════════════
checkpoint:
pretrained: "./weights/model_bak.ckpt" # official AIFS v1.1 checkpoint (relative to aifs_v11/)
output_dir: "./weights"
# ═════════════════════════════════════════════════════════════════════════════
# Model (model/aifs.py β€” onescience-style wrapper)
# ═════════════════════════════════════════════════════════════════════════════
model:
module: "model.aifs.AIFS" # Python import path
description: >-
Wraps AnemoiModelEncProcDec (encoder-processor-decoder GNN) loaded from
the pretrained checkpoint. Exposes input/output variable ordering,
N320 grid coordinates, and node weights via public properties.
# ═════════════════════════════════════════════════════════════════════════════
# Output
# ═════════════════════════════════════════════════════════════════════════════
output:
inference_dir: "./output"
plot_dir: "./plots"
# ═════════════════════════════════════════════════════════════════════════════
# Training (config_pretraining.yaml)
# ═════════════════════════════════════════════════════════════════════════════
training:
batch_size: 1
from_scratch: true # true: random weights (like FengWu/Fuxi); false: load pretrained
accum_grad_batches: 1
max_steps: 5
warmup_steps: 0
peak_lr: 3.125e-5
min_lr: 3.0e-7
precision: "16-mixed"
amp_dtype: "float16" # "float16" or "bfloat16" (DCU may need bfloat16)
gradient_clip_val: 32.0
gradient_clip_algorithm: "value"
multistep_input: 2
seed: 42
optimizer:
betas: [0.9, 0.95]
weight_decay: 0.01 # official AdamW weight_decay
lr_schedule:
type: "cosine"
warmup: 1000
iterations: 260000
log_interval: 100
val_interval: 500
save_interval: 5000
# ═════════════════════════════════════════════════════════════════════════════
# Normalizer (config_pretraining.yaml data.normalizer)
# ═════════════════════════════════════════════════════════════════════════════
normalizer:
default: "mean-std"
statistics_path: "weights/era5_stats.npz" # auto-computed if missing; set "" for identity (fake data)
remap:
cp: "tp"
sf: "tp"
std:
- tp
- cp
- sf
- ro
- tcw
- ssrd
- q_50
- q_100
- q_150
- q_200
- q_250
- q_300
- q_400
- q_500
- q_600
- q_700
- q_850
- q_925
- q_1000
max:
- sdor
- slor
- z
none:
- cos_latitude
- cos_longitude
- sin_latitude
- sin_longitude
- cos_julian_day
- cos_local_time
- sin_julian_day
- sin_local_time
- insolation
- lsm
- tcc
- mcc
- hcc
- lcc
- swvl1
- swvl2
# ═════════════════════════════════════════════════════════════════════════════
# Loss scaling (config_pretraining.yaml training.variable_loss_scaling)
# ═════════════════════════════════════════════════════════════════════════════
loss_scaling:
default: 1
pl:
q: 0.6
t: 6
u: 0.8
v: 0.5
w: 0.001
z: 12
sfc:
sp: 10
10u: 0.5
10v: 0.5
100u: 0.1
100v: 0.1
2d: 0.5
tp: 0.025
cp: 0.0025
ro: 0.0025
sf: 0.025
tcc: 0.1
mcc: 0.1
lcc: 0.1
hcc: 0.1
swvl2: 2
swvl1: 1
stl2: 10
stl1: 1
ssrd: 0.05
strd: 0.1
pressure_level_scaler:
minimum: 0.2
slope: 0.001
# ═════════════════════════════════════════════════════════════════════════════
# AIFS variable definitions (immutable β€” from official checkpoint)
# ═════════════════════════════════════════════════════════════════════════════
aifs_variables:
surface:
- 10u
- 10v
- 2d
- 2t
- msl
- skt
- sp
- tcw
- lsm
- z
- slor
- sdor
soil:
- stl1
- stl2
- swvl1
- swvl2
pressure_level:
- z
- t
- u
- v
- w
- q
pressure_levels:
- 50
- 100
- 150
- 200
- 250
- 300
- 400
- 500
- 600
- 700
- 850
- 925
- 1000
diagnostic:
- tp
- cp
- sf
- tcc
- hcc
- lcc
- mcc
- ro
- ssrd
- strd
- 100u
- 100v
computed_forcing:
- cos_latitude
- cos_longitude
- sin_latitude
- sin_longitude
- cos_julian_day
- cos_local_time
- sin_julian_day
- sin_local_time
- insolation
# ═════════════════════════════════════════════════════════════════════════════
# ERA5 H5 β†’ AIFS variable-name mapping
# ═════════════════════════════════════════════════════════════════════════════
# Keys = canonical AIFS names (DO NOT CHANGE).
# Values = ERA5 H5 variable names (update to match your H5).
era5_mapping:
surface:
10u: "10m_u_component_of_wind"
10v: "10m_v_component_of_wind"
2d: "2m_dewpoint_temperature"
2t: "2m_temperature"
msl: "mean_sea_level_pressure"
skt: "skin_temperature"
sp: "surface_pressure"
tcw: "total_column_water"
lsm: "land_sea_mask"
z: "geopotential"
slor: "slope_of_sub_gridscale_orography"
sdor: "standard_deviation_of_orography"
soil:
stl1: "soil_temperature_level_1"
stl2: "soil_temperature_level_2"
swvl1: "volumetric_soil_water_layer_1"
swvl2: "volumetric_soil_water_layer_2"
pressure_level:
z: "geopotential_{level}"
t: "temperature_{level}"
u: "u_component_of_wind_{level}"
v: "v_component_of_wind_{level}"
w: "vertical_velocity_{level}"
q: "specific_humidity_{level}"
diagnostic:
tp: "total_precipitation"
cp: "convective_precipitation"
sf: "snowfall_water_equivalent"
tcc: "total_cloud_cover"
hcc: "high_cloud_cover"
lcc: "low_cloud_cover"
mcc: "medium_cloud_cover"
ro: "runoff"
ssrd: "surface_solar_radiation_downwards"
strd: "surface_thermal_radiation_downwards"
100u: "100m_u_component_of_wind"
100v: "100m_v_component_of_wind"
fuzzy_fixes:
surface_solar_radiation_downwards: "surface_solar_radiation"
total_column_water_vapour: "total_column_water"