yingkaisha commited on
Commit
f9b8900
·
1 Parent(s): a54867e

upload sigma level models

Browse files
FuXi-sigma-base/checkpoints/checkpoint.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:938f77598d0d82c647a2cd75b09bb9cc488af0eefd0524011840068e1fee85b0
3
+ size 940
FuXi-sigma-base/checkpoints/model_checkpoint.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:686aba049e2c5a3df80f0d1bc2522af473ccbb1787e7738762e616f4f2060cc1
3
+ size 5970491642
FuXi-sigma-base/configs/model_multi.yml ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # --------------------------------------------------------------------------------------------------------------------- #
2
+ # This yaml file implements 6 hourly FuXi on NSF NCAR HPCs (casper.ucar.edu and derecho.hpc.ucar.edu)
3
+ # Technical details are available in:
4
+ #
5
+ # Sha, Y., J. Schreck, W. Chapman, D. J. Gagne II, 2025: Investigating the contribution of terrain-following
6
+ # coordinates and conservation schemes in AI-driven precipitation forecasts. Submitted to:
7
+ # Geophysical Research Letters. pre-print: https://arxiv.org/abs/2503.00332
8
+ #
9
+ # --------------------------------------------------------------------------------------------------------------------- #
10
+
11
+ save_loc: '/glade/work/ksha/CREDIT_runs/fuxi_mlevel_dry/'
12
+ seed: 1000
13
+
14
+ data:
15
+ # upper-air variables
16
+ variables: ['specific_total_water', 'temperature', 'u_component_of_wind','v_component_of_wind']
17
+ save_loc: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
18
+
19
+ # surface variables
20
+ surface_variables: ['SP', 'VAR_2T', 'VAR_10U', 'VAR_10V']
21
+ save_loc_surface: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
22
+
23
+ # dynamic forcing variables
24
+ dynamic_forcing_variables: ['toa_incident_solar_radiation', 'land_sea_CI_mask']
25
+ save_loc_dynamic_forcing: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
26
+
27
+ # diagnostic variables
28
+ diagnostic_variables: ['evaporation', 'total_precipitation',
29
+ 'surface_net_solar_radiation',
30
+ 'surface_net_thermal_radiation',
31
+ 'surface_sensible_heat_flux',
32
+ 'surface_latent_heat_flux',
33
+ 'top_net_solar_radiation',
34
+ 'top_net_thermal_radiation']
35
+ save_loc_diagnostic: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
36
+
37
+ # static variables
38
+ static_variables: ['z_norm', 'soil_type']
39
+ save_loc_static: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
40
+
41
+ # physics file
42
+ save_loc_physics: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
43
+
44
+ # mean / std path
45
+ mean_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/mean_6h_1979_2019_conserve_1deg.nc'
46
+ std_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/std_residual_6h_1979_2019_conserve_1deg.nc'
47
+
48
+ # train / validation split
49
+ train_years: [1979, 2019]
50
+ valid_years: [2019, 2020]
51
+
52
+ # data workflow
53
+ scaler_type: 'std_new'
54
+
55
+ history_len: 2
56
+ valid_history_len: 2
57
+
58
+ forecast_len: 1 # <----------- forecast_len increases from 1 to 11 for 12 hr to 72 hr multi-steps
59
+ valid_forecast_len: 11
60
+
61
+ one_shot: False
62
+
63
+ # 1 for hourly model
64
+ lead_time_periods: 6
65
+
66
+ # do not use skip_period
67
+ skip_periods: null
68
+
69
+ # compatible with the old 'std'
70
+ static_first: True
71
+
72
+ sst_forcing:
73
+ activate: False
74
+
75
+ trainer:
76
+ type: multi-step
77
+
78
+ mode: fsdp
79
+ cpu_offload: False
80
+ activation_checkpoint: True
81
+
82
+ load_weights: True
83
+ load_optimizer: False
84
+ load_scaler: False
85
+ load_sheduler: False
86
+ num_epoch: 1
87
+
88
+ skip_validation: False
89
+ update_learning_rate: False
90
+
91
+ save_backup_weights: True
92
+ save_best_weights: True
93
+ save_metric_vars: True
94
+
95
+ learning_rate: 3.0e-07
96
+ weight_decay: 3.0e-06
97
+
98
+ train_batch_size: 1
99
+ valid_batch_size: 1
100
+
101
+ batches_per_epoch: 0
102
+ valid_batches_per_epoch: 0
103
+ stopping_patience: 999
104
+
105
+ start_epoch: 0
106
+
107
+ reload_epoch: True
108
+ epochs: &epochs 999
109
+
110
+ use_scheduler: False
111
+
112
+ # Automatic Mixed Precision: False
113
+ amp: False
114
+
115
+ # rescale loss as loss = loss / grad_accum_every
116
+ grad_accum_every: 1
117
+ # gradient clipping
118
+ grad_max_norm: 999.0
119
+
120
+ # number of workers
121
+ thread_workers: 4
122
+ valid_thread_workers: 0
123
+
124
+ model:
125
+ type: "fuxi"
126
+
127
+ frames: 2 # number of input states
128
+ image_height: 181 # number of latitude grids
129
+ image_width: 360 # number of longitude grids
130
+ levels: 18 # number of upper-air variable levels
131
+ channels: 4 # upper-air variable channels
132
+ surface_channels: 4 # surface variable channels
133
+ input_only_channels: 4 # dynamic forcing, forcing, static channels
134
+ output_only_channels: 8 # diagnostic variable channels
135
+
136
+ # patchify layer
137
+ patch_height: 4 # number of latitude grids in each 3D patch
138
+ patch_width: 4 # number of longitude grids in each 3D patch
139
+ frame_patch_size: 2 # number of input states in each 3D patch
140
+
141
+ # hidden layers
142
+ dim: 1536 # dimension (default: 1536)
143
+ num_groups: 32 # number of groups (default: 32)
144
+ num_heads: 8 # number of heads (default: 8)
145
+ window_size: 7 # window size (default: 7)
146
+ depth: 48 # number of swin transformers (default: 48)
147
+
148
+ # use spectral norm
149
+ use_spectral_norm: True
150
+
151
+ # use interpolation to match the output size
152
+ interp: False
153
+
154
+ # map boundary padding
155
+ padding_conf:
156
+ activate: True
157
+ mode: earth
158
+ pad_lat: [21, 22]
159
+ pad_lon: [44, 44]
160
+
161
+ post_conf:
162
+ activate: False
163
+
164
+ loss:
165
+ # the main training loss
166
+ training_loss: "mse"
167
+
168
+ # power loss (x), spectral_loss (x)
169
+ use_power_loss: False
170
+ use_spectral_loss: False
171
+
172
+ # use latitude weighting
173
+ use_latitude_weights: True
174
+ latitude_weights: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
175
+
176
+ # turn-off variable weighting
177
+ use_variable_weights: True
178
+ variable_weights:
179
+ specific_total_water: [1.36577589e-06, 1.19436047e-05, 1.03276589e-04, 4.46097338e-04, 1.26807904e-03, 2.77554864e-03, 5.13295742e-03, 8.70407041e-03, 1.41016958e-02, 4.12818192e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02]
180
+ temperature: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
181
+ u_component_of_wind: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
182
+ v_component_of_wind: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
183
+ SP: 0.13
184
+ VAR_2T: 0.13
185
+ VAR_10U: 0.13
186
+ VAR_10V: 0.13
187
+ surface_latent_heat_flux: 0.065
188
+ surface_net_solar_radiation: 0.065
189
+ evaporation: 0.065
190
+ surface_net_thermal_radiation: 0.065
191
+ toa_incident_solar_radiation: 0.065
192
+ surface_sensible_heat_flux: 0.065
193
+ total_precipitation: 0.065
194
+ top_net_thermal_radiation: 0.065
195
+ top_net_solar_radiation: 0.065
196
+
197
+
FuXi-sigma-base/configs/model_predict.yml ADDED
@@ -0,0 +1,195 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # --------------------------------------------------------------------------------------------------------------------- #
2
+ # This yaml file implements 6 hourly FuXi on NSF NCAR HPCs (casper.ucar.edu and derecho.hpc.ucar.edu)
3
+ # Technical details are available in:
4
+ #
5
+ # Sha, Y., J. Schreck, W. Chapman, D. J. Gagne II, 2025: Investigating the contribution of terrain-following
6
+ # coordinates and conservation schemes in AI-driven precipitation forecasts. Submitted to:
7
+ # Geophysical Research Letters. pre-print: https://arxiv.org/abs/2503.00332
8
+ #
9
+ # --------------------------------------------------------------------------------------------------------------------- #
10
+
11
+ save_loc: '/glade/work/ksha/CREDIT_runs/fuxi_mlevel_dry/'
12
+ seed: 1000
13
+
14
+ data:
15
+ # upper-air variables
16
+ variables: ['specific_total_water', 'temperature', 'u_component_of_wind','v_component_of_wind']
17
+ save_loc: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
18
+
19
+ # surface variables
20
+ surface_variables: ['SP', 'VAR_2T', 'VAR_10U', 'VAR_10V']
21
+ save_loc_surface: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
22
+
23
+ # dynamic forcing variables
24
+ dynamic_forcing_variables: ['toa_incident_solar_radiation', 'land_sea_CI_mask']
25
+ save_loc_dynamic_forcing: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
26
+
27
+ # diagnostic variables
28
+ diagnostic_variables: ['evaporation', 'total_precipitation',
29
+ 'surface_net_solar_radiation',
30
+ 'surface_net_thermal_radiation',
31
+ 'surface_sensible_heat_flux',
32
+ 'surface_latent_heat_flux',
33
+ 'top_net_solar_radiation',
34
+ 'top_net_thermal_radiation']
35
+ save_loc_diagnostic: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
36
+
37
+ # static variables
38
+ static_variables: ['z_norm', 'soil_type']
39
+ save_loc_static: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
40
+
41
+ # physics file
42
+ save_loc_physics: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
43
+
44
+ # mean / std path
45
+ mean_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/mean_6h_1979_2019_conserve_1deg.nc'
46
+ std_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/std_residual_6h_1979_2019_conserve_1deg.nc'
47
+
48
+ # train / validation split
49
+ train_years: [1979, 2019]
50
+ valid_years: [2019, 2020]
51
+
52
+ # data workflow
53
+ scaler_type: 'std_new'
54
+
55
+ history_len: 2
56
+ valid_history_len: 2
57
+
58
+ forecast_len: 0
59
+ valid_forecast_len: 0
60
+
61
+ one_shot: False
62
+
63
+ # 1 for hourly model
64
+ lead_time_periods: 6
65
+
66
+ # do not use skip_period
67
+ skip_periods: null
68
+
69
+ # compatible with the old 'std'
70
+ static_first: True
71
+
72
+ sst_forcing:
73
+ activate: False
74
+
75
+ trainer:
76
+ type: standard
77
+
78
+ mode: fsdp
79
+ cpu_offload: False
80
+ activation_checkpoint: True
81
+
82
+ load_weights: True
83
+ load_optimizer: True
84
+ load_scaler: True
85
+ load_sheduler: True
86
+ num_epoch: 8
87
+
88
+ skip_validation: False
89
+ update_learning_rate: False
90
+
91
+ save_backup_weights: True
92
+ save_best_weights: True
93
+ save_metric_vars: True
94
+
95
+ learning_rate: 1.0e-03
96
+ weight_decay: 3.0e-06
97
+
98
+ train_batch_size: 1
99
+ valid_batch_size: 1
100
+
101
+ batches_per_epoch: 0
102
+ valid_batches_per_epoch: 0
103
+ stopping_patience: 999
104
+
105
+ start_epoch: 0
106
+
107
+ reload_epoch: True
108
+ epochs: &epochs 200
109
+
110
+ use_scheduler: True
111
+ scheduler: {'scheduler_type': 'cosine-annealing', 'T_max': *epochs, 'last_epoch': -1}
112
+
113
+ # Automatic Mixed Precision: False
114
+ amp: False
115
+
116
+ # rescale loss as loss = loss / grad_accum_every
117
+ grad_accum_every: 1
118
+ # gradient clipping
119
+ grad_max_norm: 32.0
120
+
121
+ # number of workers
122
+ thread_workers: 4
123
+ valid_thread_workers: 0
124
+
125
+ model:
126
+ type: "fuxi"
127
+
128
+ frames: 2 # number of input states
129
+ image_height: 181 # number of latitude grids
130
+ image_width: 360 # number of longitude grids
131
+ levels: 18 # number of upper-air variable levels
132
+ channels: 4 # upper-air variable channels
133
+ surface_channels: 4 # surface variable channels
134
+ input_only_channels: 4 # dynamic forcing, forcing, static channels
135
+ output_only_channels: 8 # diagnostic variable channels
136
+
137
+ # patchify layer
138
+ patch_height: 4 # number of latitude grids in each 3D patch
139
+ patch_width: 4 # number of longitude grids in each 3D patch
140
+ frame_patch_size: 2 # number of input states in each 3D patch
141
+
142
+ # hidden layers
143
+ dim: 1536 # dimension (default: 1536)
144
+ num_groups: 32 # number of groups (default: 32)
145
+ num_heads: 8 # number of heads (default: 8)
146
+ window_size: 7 # window size (default: 7)
147
+ depth: 48 # number of swin transformers (default: 48)
148
+
149
+ # use spectral norm
150
+ use_spectral_norm: True
151
+
152
+ # use interpolation to match the output size
153
+ interp: False
154
+
155
+ # map boundary padding
156
+ padding_conf:
157
+ activate: True
158
+ mode: earth
159
+ pad_lat: [21, 22]
160
+ pad_lon: [44, 44]
161
+
162
+ post_conf:
163
+ activate: False
164
+
165
+ loss:
166
+ # the main training loss
167
+ training_loss: "mse"
168
+
169
+ # power loss (x), spectral_loss (x)
170
+ use_power_loss: False
171
+ use_spectral_loss: False
172
+
173
+ # use latitude weighting
174
+ use_latitude_weights: True
175
+ latitude_weights: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
176
+
177
+ # turn-off variable weighting
178
+
179
+ predict:
180
+ forecasts:
181
+ type: "custom" # keep it as "custom"
182
+ start_year: 2020 # year of the first initialization (where rollout will start)
183
+ start_month: 1 # month of the first initialization
184
+ start_day: 1 # day of the first initialization
185
+ start_hours: [0, 12] # hour-of-day for each initialization, 0 for 00Z, 12 for 12Z
186
+ duration: 768 # number of days to initialize, starting from the (year, mon, day) above
187
+ # duration should be divisible by the number of GPUs
188
+ # (e.g., duration: 384 for 365-day rollout using 32 GPUs)
189
+ days: 15 # forecast lead time as days (1 means 24-hour forecast)
190
+
191
+ save_forecast: '/glade/derecho/scratch/ksha/CREDIT/RAW_OUTPUT/fuxi_mlevel_dry2/'
192
+ use_laplace_filter: False
193
+
194
+
195
+
FuXi-sigma-base/configs/model_single.yml ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # --------------------------------------------------------------------------------------------------------------------- #
2
+ # This yaml file implements 6 hourly FuXi on NSF NCAR HPCs (casper.ucar.edu and derecho.hpc.ucar.edu)
3
+ # Technical details are available in:
4
+ #
5
+ # Sha, Y., J. Schreck, W. Chapman, D. J. Gagne II, 2025: Investigating the contribution of terrain-following
6
+ # coordinates and conservation schemes in AI-driven precipitation forecasts. Submitted to:
7
+ # Geophysical Research Letters. pre-print: https://arxiv.org/abs/2503.00332
8
+ #
9
+ # --------------------------------------------------------------------------------------------------------------------- #
10
+
11
+ save_loc: '/glade/work/ksha/CREDIT_runs/fuxi_mlevel_dry/'
12
+ seed: 1000
13
+
14
+ data:
15
+ # upper-air variables
16
+ variables: ['specific_total_water', 'temperature', 'u_component_of_wind','v_component_of_wind']
17
+ save_loc: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
18
+
19
+ # surface variables
20
+ surface_variables: ['SP', 'VAR_2T', 'VAR_10U', 'VAR_10V']
21
+ save_loc_surface: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
22
+
23
+ # dynamic forcing variables
24
+ dynamic_forcing_variables: ['toa_incident_solar_radiation', 'land_sea_CI_mask']
25
+ save_loc_dynamic_forcing: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
26
+
27
+ # diagnostic variables
28
+ diagnostic_variables: ['evaporation', 'total_precipitation',
29
+ 'surface_net_solar_radiation',
30
+ 'surface_net_thermal_radiation',
31
+ 'surface_sensible_heat_flux',
32
+ 'surface_latent_heat_flux',
33
+ 'top_net_solar_radiation',
34
+ 'top_net_thermal_radiation']
35
+ save_loc_diagnostic: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
36
+
37
+ # static variables
38
+ static_variables: ['z_norm', 'soil_type']
39
+ save_loc_static: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
40
+
41
+ # physics file
42
+ save_loc_physics: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
43
+
44
+ # mean / std path
45
+ mean_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/mean_6h_1979_2019_conserve_1deg.nc'
46
+ std_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/std_residual_6h_1979_2019_conserve_1deg.nc'
47
+
48
+ # train / validation split
49
+ train_years: [1979, 2019]
50
+ valid_years: [2019, 2020]
51
+
52
+ # data workflow
53
+ scaler_type: 'std_new'
54
+
55
+ history_len: 2
56
+ valid_history_len: 2
57
+
58
+ forecast_len: 0
59
+ valid_forecast_len: 0
60
+
61
+ one_shot: False
62
+
63
+ # 1 for hourly model
64
+ lead_time_periods: 6
65
+
66
+ # do not use skip_period
67
+ skip_periods: null
68
+
69
+ # compatible with the old 'std'
70
+ static_first: True
71
+
72
+ sst_forcing:
73
+ activate: False
74
+
75
+ trainer:
76
+ type: standard
77
+
78
+ mode: fsdp
79
+ cpu_offload: False
80
+ activation_checkpoint: True
81
+
82
+ load_weights: True
83
+ load_optimizer: True
84
+ load_scaler: True
85
+ load_sheduler: True
86
+ num_epoch: 8
87
+
88
+ skip_validation: False
89
+ update_learning_rate: False
90
+
91
+ save_backup_weights: True
92
+ save_best_weights: True
93
+ save_metric_vars: True
94
+
95
+ learning_rate: 1.0e-03
96
+ weight_decay: 3.0e-06
97
+
98
+ train_batch_size: 1
99
+ valid_batch_size: 1
100
+
101
+ batches_per_epoch: 0
102
+ valid_batches_per_epoch: 0
103
+ stopping_patience: 999
104
+
105
+ start_epoch: 0
106
+
107
+ reload_epoch: True
108
+ epochs: &epochs 70
109
+
110
+ use_scheduler: True
111
+ scheduler: {'scheduler_type': 'cosine-annealing', 'T_max': *epochs, 'last_epoch': -1}
112
+
113
+ # Automatic Mixed Precision: False
114
+ amp: False
115
+
116
+ # rescale loss as loss = loss / grad_accum_every
117
+ grad_accum_every: 1
118
+ # gradient clipping
119
+ grad_max_norm: 32.0
120
+
121
+ # number of workers
122
+ thread_workers: 4
123
+ valid_thread_workers: 0
124
+
125
+ model:
126
+ type: "fuxi"
127
+
128
+ frames: 2 # number of input states
129
+ image_height: 181 # number of latitude grids
130
+ image_width: 360 # number of longitude grids
131
+ levels: 18 # number of upper-air variable levels
132
+ channels: 4 # upper-air variable channels
133
+ surface_channels: 4 # surface variable channels
134
+ input_only_channels: 4 # dynamic forcing, forcing, static channels
135
+ output_only_channels: 8 # diagnostic variable channels
136
+
137
+ # patchify layer
138
+ patch_height: 4 # number of latitude grids in each 3D patch
139
+ patch_width: 4 # number of longitude grids in each 3D patch
140
+ frame_patch_size: 2 # number of input states in each 3D patch
141
+
142
+ # hidden layers
143
+ dim: 1536 # dimension (default: 1536)
144
+ num_groups: 32 # number of groups (default: 32)
145
+ num_heads: 8 # number of heads (default: 8)
146
+ window_size: 7 # window size (default: 7)
147
+ depth: 48 # number of swin transformers (default: 48)
148
+
149
+ # use spectral norm
150
+ use_spectral_norm: True
151
+
152
+ # use interpolation to match the output size
153
+ interp: False
154
+
155
+ # map boundary padding
156
+ padding_conf:
157
+ activate: True
158
+ mode: earth
159
+ pad_lat: [21, 22]
160
+ pad_lon: [44, 44]
161
+
162
+ post_conf:
163
+ activate: False
164
+
165
+ loss:
166
+ # the main training loss
167
+ training_loss: "mse"
168
+
169
+ # power loss (x), spectral_loss (x)
170
+ use_power_loss: False
171
+ use_spectral_loss: False
172
+
173
+ # use latitude weighting
174
+ use_latitude_weights: True
175
+ latitude_weights: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
176
+
177
+ # turn-off variable weighting
178
+ use_variable_weights: True
179
+ variable_weights:
180
+ specific_total_water: [1.36577589e-06, 1.19436047e-05, 1.03276589e-04, 4.46097338e-04, 1.26807904e-03, 2.77554864e-03, 5.13295742e-03, 8.70407041e-03, 1.41016958e-02, 4.12818192e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02]
181
+ temperature: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
182
+ u_component_of_wind: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
183
+ v_component_of_wind: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
184
+ SP: 0.13
185
+ VAR_2T: 0.13
186
+ VAR_10U: 0.13
187
+ VAR_10V: 0.13
188
+ surface_latent_heat_flux: 0.065
189
+ surface_net_solar_radiation: 0.065
190
+ evaporation: 0.065
191
+ surface_net_thermal_radiation: 0.065
192
+ toa_incident_solar_radiation: 0.065
193
+ surface_sensible_heat_flux: 0.065
194
+ total_precipitation: 0.065
195
+ top_net_thermal_radiation: 0.065
196
+ top_net_solar_radiation: 0.065
197
+
FuXi-sigma-physics/checkpoints/checkpoint.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:938f77598d0d82c647a2cd75b09bb9cc488af0eefd0524011840068e1fee85b0
3
+ size 940
FuXi-sigma-physics/checkpoints/model_checkpoint.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:49513fd0779aa460c5e734b0db5191e6ad40c139dd78255a5915279e9facbd06
3
+ size 5970491642
FuXi-sigma-physics/configs/model_multi.yml ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # --------------------------------------------------------------------------------------------------------------------- #
2
+ # This yaml file implements 6 hourly FuXi on NSF NCAR HPCs (casper.ucar.edu and derecho.hpc.ucar.edu)
3
+ # Technical details are available in:
4
+ #
5
+ # Sha, Y., J. Schreck, W. Chapman, D. J. Gagne II, 2025: Investigating the contribution of terrain-following
6
+ # coordinates and conservation schemes in AI-driven precipitation forecasts. Submitted to:
7
+ # Geophysical Research Letters. pre-print: https://arxiv.org/abs/2503.00332
8
+ #
9
+ # --------------------------------------------------------------------------------------------------------------------- #
10
+
11
+ save_loc: '/glade/work/ksha/CREDIT_runs/fuxi_mlevel_physics/'
12
+ seed: 1000
13
+
14
+ data:
15
+ # upper-air variables
16
+ variables: ['specific_total_water', 'temperature', 'u_component_of_wind','v_component_of_wind']
17
+ save_loc: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
18
+
19
+ # surface variables
20
+ surface_variables: ['SP', 'VAR_2T', 'VAR_10U', 'VAR_10V']
21
+ save_loc_surface: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
22
+
23
+ # dynamic forcing variables
24
+ dynamic_forcing_variables: ['toa_incident_solar_radiation', 'land_sea_CI_mask']
25
+ save_loc_dynamic_forcing: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
26
+
27
+ # diagnostic variables
28
+ diagnostic_variables: ['evaporation', 'total_precipitation',
29
+ 'surface_net_solar_radiation',
30
+ 'surface_net_thermal_radiation',
31
+ 'surface_sensible_heat_flux',
32
+ 'surface_latent_heat_flux',
33
+ 'top_net_solar_radiation',
34
+ 'top_net_thermal_radiation']
35
+ save_loc_diagnostic: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
36
+
37
+ # static variables
38
+ static_variables: ['z_norm', 'soil_type']
39
+ save_loc_static: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
40
+
41
+ # physics file
42
+ save_loc_physics: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
43
+
44
+ # mean / std path
45
+ mean_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/mean_6h_1979_2019_conserve_1deg.nc'
46
+ std_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/std_residual_6h_1979_2019_conserve_1deg.nc'
47
+
48
+ # train / validation split
49
+ train_years: [1979, 2019]
50
+ valid_years: [2019, 2020]
51
+
52
+ # data workflow
53
+ scaler_type: 'std_new'
54
+
55
+ history_len: 2
56
+ valid_history_len: 2
57
+
58
+ forecast_len: 1 # <----------- forecast_len increases from 1 to 11 for 12 hr to 72 hr multi-steps
59
+ valid_forecast_len: 11
60
+
61
+ one_shot: False
62
+
63
+ # 1 for hourly model
64
+ lead_time_periods: 6
65
+
66
+ # do not use skip_period
67
+ skip_periods: null
68
+
69
+ # compatible with the old 'std'
70
+ static_first: True
71
+
72
+ sst_forcing:
73
+ activate: False
74
+
75
+ trainer:
76
+ type: multi-step
77
+
78
+ mode: fsdp
79
+ cpu_offload: False
80
+ activation_checkpoint: True
81
+
82
+ load_weights: True
83
+ load_optimizer: False
84
+ load_scaler: False
85
+ load_scheduler: False
86
+ num_epoch: 1
87
+
88
+ skip_validation: False
89
+ update_learning_rate: False
90
+
91
+ save_backup_weights: True
92
+ save_best_weights: True
93
+ save_metric_vars: True
94
+
95
+ learning_rate: 3.0e-07
96
+ weight_decay: 3.0e-06
97
+
98
+ train_batch_size: 1
99
+ valid_batch_size: 1
100
+
101
+ batches_per_epoch: 0
102
+ valid_batches_per_epoch: 0
103
+ stopping_patience: 999
104
+
105
+ start_epoch: 0
106
+
107
+ reload_epoch: True
108
+ epochs: &epochs 999
109
+
110
+ use_scheduler: False
111
+
112
+ # Automatic Mixed Precision: False
113
+ amp: False
114
+
115
+ # rescale loss as loss = loss / grad_accum_every
116
+ grad_accum_every: 1
117
+ # gradient clipping
118
+ grad_max_norm: 999.0
119
+
120
+ # number of workers
121
+ thread_workers: 4
122
+ valid_thread_workers: 0
123
+
124
+ model:
125
+ type: "fuxi"
126
+
127
+ frames: 2 # number of input states
128
+ image_height: 181 # number of latitude grids
129
+ image_width: 360 # number of longitude grids
130
+ levels: 18 # number of upper-air variable levels
131
+ channels: 4 # upper-air variable channels
132
+ surface_channels: 4 # surface variable channels
133
+ input_only_channels: 4 # dynamic forcing, forcing, static channels
134
+ output_only_channels: 8 # diagnostic variable channels
135
+
136
+ # patchify layer
137
+ patch_height: 4 # number of latitude grids in each 3D patch
138
+ patch_width: 4 # number of longitude grids in each 3D patch
139
+ frame_patch_size: 2 # number of input states in each 3D patch
140
+
141
+ # hidden layers
142
+ dim: 1536 # dimension (default: 1536)
143
+ num_groups: 32 # number of groups (default: 32)
144
+ num_heads: 8 # number of heads (default: 8)
145
+ window_size: 7 # window size (default: 7)
146
+ depth: 48 # number of swin transformers (default: 48)
147
+
148
+ # use spectral norm
149
+ use_spectral_norm: True
150
+
151
+ # use interpolation to match the output size
152
+ interp: False
153
+
154
+ # map boundary padding
155
+ padding_conf:
156
+ activate: True
157
+ mode: earth
158
+ pad_lat: [21, 22]
159
+ pad_lon: [44, 44]
160
+
161
+ post_conf:
162
+ activate: True
163
+
164
+ skebs:
165
+ activate: False
166
+
167
+ tracer_fixer:
168
+ activate: True
169
+ denorm: True
170
+ tracer_name: ['specific_total_water', 'total_precipitation']
171
+ tracer_thres: [0, 0]
172
+
173
+ global_mass_fixer:
174
+ activate: True
175
+ activate_outside_model: True
176
+ simple_demo: False
177
+ denorm: True
178
+ grid_type: 'sigma'
179
+ midpoint: True
180
+ fix_level_num: 7
181
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
182
+ surface_pressure_name: ['SP']
183
+ specific_total_water_name: ['specific_total_water']
184
+
185
+ global_water_fixer:
186
+ activate: True
187
+ activate_outside_model: True
188
+ simple_demo: False
189
+ denorm: True
190
+ grid_type: 'sigma'
191
+ midpoint: True
192
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
193
+ surface_pressure_name: ['SP']
194
+ specific_total_water_name: ['specific_total_water']
195
+ precipitation_name: ['total_precipitation']
196
+ evaporation_name: ['evaporation']
197
+
198
+ global_energy_fixer:
199
+ activate: True
200
+ activate_outside_model: True
201
+ simple_demo: False
202
+ denorm: True
203
+ grid_type: 'sigma'
204
+ midpoint: True
205
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
206
+ surface_pressure_name: ['SP']
207
+ air_temperature_name: ['temperature']
208
+ specific_total_water_name: ['specific_total_water']
209
+ u_wind_name: ['u_component_of_wind']
210
+ v_wind_name: ['v_component_of_wind']
211
+ surface_geopotential_name: ['geopotential_at_surface']
212
+ TOA_net_radiation_flux_name: ['top_net_solar_radiation', 'top_net_thermal_radiation']
213
+ surface_net_radiation_flux_name: ['surface_net_solar_radiation', 'surface_net_thermal_radiation']
214
+ surface_energy_flux_name: ['surface_sensible_heat_flux', 'surface_latent_heat_flux',]
215
+
216
+ loss:
217
+ # the main training loss
218
+ training_loss: "mse"
219
+
220
+ # power loss (x), spectral_loss (x)
221
+ use_power_loss: False
222
+ use_spectral_loss: False
223
+
224
+ # use latitude weighting
225
+ use_latitude_weights: True
226
+ latitude_weights: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
227
+
228
+ # turn-off variable weighting
229
+ use_variable_weights: True
230
+ variable_weights:
231
+ specific_total_water: [1.36577589e-06, 1.19436047e-05, 1.03276589e-04, 4.46097338e-04, 1.26807904e-03, 2.77554864e-03, 5.13295742e-03, 8.70407041e-03, 1.41016958e-02, 4.12818192e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02]
232
+ temperature: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
233
+ u_component_of_wind: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
234
+ v_component_of_wind: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
235
+ SP: 0.13
236
+ VAR_2T: 0.13
237
+ VAR_10U: 0.13
238
+ VAR_10V: 0.13
239
+ surface_latent_heat_flux: 0.065
240
+ surface_net_solar_radiation: 0.065
241
+ evaporation: 0.065
242
+ surface_net_thermal_radiation: 0.065
243
+ toa_incident_solar_radiation: 0.065
244
+ surface_sensible_heat_flux: 0.065
245
+ total_precipitation: 0.065
246
+ top_net_thermal_radiation: 0.065
247
+ top_net_solar_radiation: 0.065
248
+
FuXi-sigma-physics/configs/model_predict.yml ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # --------------------------------------------------------------------------------------------------------------------- #
2
+ # This yaml file implements 6 hourly FuXi on NSF NCAR HPCs (casper.ucar.edu and derecho.hpc.ucar.edu)
3
+ # Technical details are available in:
4
+ #
5
+ # Sha, Y., J. Schreck, W. Chapman, D. J. Gagne II, 2025: Investigating the contribution of terrain-following
6
+ # coordinates and conservation schemes in AI-driven precipitation forecasts. Submitted to:
7
+ # Geophysical Research Letters. pre-print: https://arxiv.org/abs/2503.00332
8
+ #
9
+ # --------------------------------------------------------------------------------------------------------------------- #
10
+
11
+ save_loc: '/glade/work/ksha/CREDIT_runs/fuxi_mlevel_physics/'
12
+ seed: 1000
13
+
14
+ data:
15
+ # upper-air variables
16
+ variables: ['specific_total_water', 'temperature', 'u_component_of_wind','v_component_of_wind']
17
+ save_loc: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
18
+
19
+ # surface variables
20
+ surface_variables: ['SP', 'VAR_2T', 'VAR_10U', 'VAR_10V']
21
+ save_loc_surface: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
22
+
23
+ # dynamic forcing variables
24
+ dynamic_forcing_variables: ['toa_incident_solar_radiation', 'land_sea_CI_mask']
25
+ save_loc_dynamic_forcing: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
26
+
27
+ # diagnostic variables
28
+ diagnostic_variables: ['evaporation', 'total_precipitation',
29
+ 'surface_net_solar_radiation',
30
+ 'surface_net_thermal_radiation',
31
+ 'surface_sensible_heat_flux',
32
+ 'surface_latent_heat_flux',
33
+ 'top_net_solar_radiation',
34
+ 'top_net_thermal_radiation']
35
+ save_loc_diagnostic: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
36
+
37
+ # static variables
38
+ static_variables: ['z_norm', 'soil_type']
39
+ save_loc_static: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
40
+
41
+ # physics file
42
+ save_loc_physics: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
43
+
44
+ # mean / std path
45
+ mean_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/mean_6h_1979_2019_conserve_1deg.nc'
46
+ std_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/std_residual_6h_1979_2019_conserve_1deg.nc'
47
+
48
+ # train / validation split
49
+ train_years: [1979, 2019]
50
+ valid_years: [2019, 2020]
51
+
52
+ # data workflow
53
+ scaler_type: 'std_new'
54
+
55
+ history_len: 2
56
+ valid_history_len: 2
57
+
58
+ forecast_len: 0
59
+ valid_forecast_len: 0
60
+
61
+ one_shot: False
62
+
63
+ # 1 for hourly model
64
+ lead_time_periods: 6
65
+
66
+ # do not use skip_period
67
+ skip_periods: null
68
+
69
+ # compatible with the old 'std'
70
+ static_first: True
71
+
72
+ sst_forcing:
73
+ activate: False
74
+
75
+ trainer:
76
+ type: standard
77
+
78
+ mode: fsdp
79
+ cpu_offload: False
80
+ activation_checkpoint: True
81
+
82
+ load_weights: True
83
+ load_optimizer: True
84
+ load_scaler: True
85
+ load_scheduler: True
86
+ num_epoch: 8
87
+
88
+ skip_validation: False
89
+ update_learning_rate: False
90
+
91
+ save_backup_weights: True
92
+ save_best_weights: True
93
+ save_metric_vars: True
94
+
95
+ learning_rate: 1.0e-03
96
+ weight_decay: 3.0e-06
97
+
98
+ train_batch_size: 1
99
+ valid_batch_size: 1
100
+
101
+ batches_per_epoch: 0
102
+ valid_batches_per_epoch: 0
103
+ stopping_patience: 999
104
+
105
+ start_epoch: 0
106
+
107
+ reload_epoch: True
108
+ epochs: &epochs 200
109
+
110
+ use_scheduler: True
111
+ scheduler: {'scheduler_type': 'cosine-annealing', 'T_max': *epochs, 'last_epoch': -1}
112
+
113
+ # Automatic Mixed Precision: False
114
+ amp: False
115
+
116
+ # rescale loss as loss = loss / grad_accum_every
117
+ grad_accum_every: 1
118
+ # gradient clipping
119
+ grad_max_norm: 32.0
120
+
121
+ # number of workers
122
+ thread_workers: 4
123
+ valid_thread_workers: 0
124
+
125
+ model:
126
+ type: "fuxi"
127
+
128
+ frames: 2 # number of input states
129
+ image_height: 181 # number of latitude grids
130
+ image_width: 360 # number of longitude grids
131
+ levels: 18 # number of upper-air variable levels
132
+ channels: 4 # upper-air variable channels
133
+ surface_channels: 4 # surface variable channels
134
+ input_only_channels: 4 # dynamic forcing, forcing, static channels
135
+ output_only_channels: 8 # diagnostic variable channels
136
+
137
+ # patchify layer
138
+ patch_height: 4 # number of latitude grids in each 3D patch
139
+ patch_width: 4 # number of longitude grids in each 3D patch
140
+ frame_patch_size: 2 # number of input states in each 3D patch
141
+
142
+ # hidden layers
143
+ dim: 1536 # dimension (default: 1536)
144
+ num_groups: 32 # number of groups (default: 32)
145
+ num_heads: 8 # number of heads (default: 8)
146
+ window_size: 7 # window size (default: 7)
147
+ depth: 48 # number of swin transformers (default: 48)
148
+
149
+ # use spectral norm
150
+ use_spectral_norm: True
151
+
152
+ # use interpolation to match the output size
153
+ interp: False
154
+
155
+ # map boundary padding
156
+ padding_conf:
157
+ activate: True
158
+ mode: earth
159
+ pad_lat: [21, 22]
160
+ pad_lon: [44, 44]
161
+
162
+ post_conf:
163
+ activate: True
164
+
165
+ skebs:
166
+ activate: False
167
+
168
+ tracer_fixer:
169
+ activate: True
170
+ denorm: True
171
+ tracer_name: ['specific_total_water', 'total_precipitation']
172
+ tracer_thres: [0, 0]
173
+
174
+ global_mass_fixer:
175
+ activate: True
176
+ activate_outside_model: True
177
+ simple_demo: False
178
+ denorm: True
179
+ grid_type: 'sigma'
180
+ midpoint: True
181
+ fix_level_num: 7
182
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
183
+ surface_pressure_name: ['SP']
184
+ specific_total_water_name: ['specific_total_water']
185
+
186
+ global_water_fixer:
187
+ activate: True
188
+ activate_outside_model: True
189
+ simple_demo: False
190
+ denorm: True
191
+ grid_type: 'sigma'
192
+ midpoint: True
193
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
194
+ surface_pressure_name: ['SP']
195
+ specific_total_water_name: ['specific_total_water']
196
+ precipitation_name: ['total_precipitation']
197
+ evaporation_name: ['evaporation']
198
+
199
+ global_energy_fixer:
200
+ activate: True
201
+ activate_outside_model: True
202
+ simple_demo: False
203
+ denorm: True
204
+ grid_type: 'sigma'
205
+ midpoint: True
206
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
207
+ surface_pressure_name: ['SP']
208
+ air_temperature_name: ['temperature']
209
+ specific_total_water_name: ['specific_total_water']
210
+ u_wind_name: ['u_component_of_wind']
211
+ v_wind_name: ['v_component_of_wind']
212
+ surface_geopotential_name: ['geopotential_at_surface']
213
+ TOA_net_radiation_flux_name: ['top_net_solar_radiation', 'top_net_thermal_radiation']
214
+ surface_net_radiation_flux_name: ['surface_net_solar_radiation', 'surface_net_thermal_radiation']
215
+ surface_energy_flux_name: ['surface_sensible_heat_flux', 'surface_latent_heat_flux',]
216
+
217
+ loss:
218
+ # the main training loss
219
+ training_loss: "mse"
220
+
221
+ # power loss (x), spectral_loss (x)
222
+ use_power_loss: False
223
+ use_spectral_loss: False
224
+
225
+ # use latitude weighting
226
+ use_latitude_weights: True
227
+ latitude_weights: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
228
+
229
+ predict:
230
+ forecasts:
231
+ type: "custom" # keep it as "custom"
232
+ start_year: 2020 # year of the first initialization (where rollout will start)
233
+ start_month: 1 # month of the first initialization
234
+ start_day: 1 # day of the first initialization
235
+ start_hours: [0, 12] # hour-of-day for each initialization, 0 for 00Z, 12 for 12Z
236
+ duration: 768 # number of days to initialize, starting from the (year, mon, day) above
237
+ # duration should be divisible by the number of GPUs
238
+ # (e.g., duration: 384 for 365-day rollout using 32 GPUs)
239
+ days: 15 # forecast lead time as days (1 means 24-hour forecast)
240
+
241
+ save_forecast: '/glade/derecho/scratch/ksha/CREDIT/RAW_OUTPUT/fuxi_mlevel_physics2/'
242
+ use_laplace_filter: False
243
+
FuXi-sigma-physics/configs/model_single.yml ADDED
@@ -0,0 +1,249 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # --------------------------------------------------------------------------------------------------------------------- #
2
+ # This yaml file implements 6 hourly FuXi on NSF NCAR HPCs (casper.ucar.edu and derecho.hpc.ucar.edu)
3
+ # Technical details are available in:
4
+ #
5
+ # Sha, Y., J. Schreck, W. Chapman, D. J. Gagne II, 2025: Investigating the contribution of terrain-following
6
+ # coordinates and conservation schemes in AI-driven precipitation forecasts. Submitted to:
7
+ # Geophysical Research Letters. pre-print: https://arxiv.org/abs/2503.00332
8
+ #
9
+ # --------------------------------------------------------------------------------------------------------------------- #
10
+
11
+ save_loc: '/glade/work/ksha/CREDIT_runs/fuxi_mlevel_physics/'
12
+ seed: 1000
13
+
14
+ data:
15
+ # upper-air variables
16
+ variables: ['specific_total_water', 'temperature', 'u_component_of_wind','v_component_of_wind']
17
+ save_loc: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
18
+
19
+ # surface variables
20
+ surface_variables: ['SP', 'VAR_2T', 'VAR_10U', 'VAR_10V']
21
+ save_loc_surface: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
22
+
23
+ # dynamic forcing variables
24
+ dynamic_forcing_variables: ['toa_incident_solar_radiation', 'land_sea_CI_mask']
25
+ save_loc_dynamic_forcing: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
26
+
27
+ # diagnostic variables
28
+ diagnostic_variables: ['evaporation', 'total_precipitation',
29
+ 'surface_net_solar_radiation',
30
+ 'surface_net_thermal_radiation',
31
+ 'surface_sensible_heat_flux',
32
+ 'surface_latent_heat_flux',
33
+ 'top_net_solar_radiation',
34
+ 'top_net_thermal_radiation']
35
+ save_loc_diagnostic: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/all_in_one/ERA5_mlevel_1deg_6h_subset_*_conserve.zarr'
36
+
37
+ # static variables
38
+ static_variables: ['z_norm', 'soil_type']
39
+ save_loc_static: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
40
+
41
+ # physics file
42
+ save_loc_physics: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
43
+
44
+ # mean / std path
45
+ mean_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/mean_6h_1979_2019_conserve_1deg.nc'
46
+ std_path: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/mean_std/std_residual_6h_1979_2019_conserve_1deg.nc'
47
+
48
+ # train / validation split
49
+ train_years: [1979, 2019]
50
+ valid_years: [2019, 2020]
51
+
52
+ # data workflow
53
+ scaler_type: 'std_new'
54
+
55
+ history_len: 2
56
+ valid_history_len: 2
57
+
58
+ forecast_len: 0
59
+ valid_forecast_len: 0
60
+
61
+ one_shot: False
62
+
63
+ # 1 for hourly model
64
+ lead_time_periods: 6
65
+
66
+ # do not use skip_period
67
+ skip_periods: null
68
+
69
+ # compatible with the old 'std'
70
+ static_first: True
71
+
72
+ sst_forcing:
73
+ activate: False
74
+
75
+ trainer:
76
+ type: standard
77
+
78
+ mode: fsdp
79
+ cpu_offload: False
80
+ activation_checkpoint: True
81
+
82
+ load_weights: True
83
+ load_optimizer: False
84
+ load_scaler: False
85
+ load_scheduler: False
86
+ num_epoch: 8
87
+
88
+ skip_validation: False
89
+ update_learning_rate: False
90
+
91
+ save_backup_weights: True
92
+ save_best_weights: True
93
+ save_metric_vars: True
94
+
95
+ learning_rate: 1.0e-03
96
+ weight_decay: 3.0e-06
97
+
98
+ train_batch_size: 1
99
+ valid_batch_size: 1
100
+
101
+ batches_per_epoch: 0
102
+ valid_batches_per_epoch: 0
103
+ stopping_patience: 999
104
+
105
+ start_epoch: 0
106
+
107
+ reload_epoch: True
108
+ epochs: &epochs 70
109
+
110
+ use_scheduler: True
111
+ scheduler: {'scheduler_type': 'cosine-annealing', 'T_max': *epochs, 'last_epoch': -1}
112
+
113
+ # Automatic Mixed Precision: False
114
+ amp: False
115
+
116
+ # rescale loss as loss = loss / grad_accum_every
117
+ grad_accum_every: 1
118
+ # gradient clipping
119
+ grad_max_norm: 32.0
120
+
121
+ # number of workers
122
+ thread_workers: 4
123
+ valid_thread_workers: 0
124
+
125
+ model:
126
+ type: "fuxi"
127
+
128
+ frames: 2 # number of input states
129
+ image_height: 181 # number of latitude grids
130
+ image_width: 360 # number of longitude grids
131
+ levels: 18 # number of upper-air variable levels
132
+ channels: 4 # upper-air variable channels
133
+ surface_channels: 4 # surface variable channels
134
+ input_only_channels: 4 # dynamic forcing, forcing, static channels
135
+ output_only_channels: 8 # diagnostic variable channels
136
+
137
+ # patchify layer
138
+ patch_height: 4 # number of latitude grids in each 3D patch
139
+ patch_width: 4 # number of longitude grids in each 3D patch
140
+ frame_patch_size: 2 # number of input states in each 3D patch
141
+
142
+ # hidden layers
143
+ dim: 1536 # dimension (default: 1536)
144
+ num_groups: 32 # number of groups (default: 32)
145
+ num_heads: 8 # number of heads (default: 8)
146
+ window_size: 7 # window size (default: 7)
147
+ depth: 48 # number of swin transformers (default: 48)
148
+
149
+ # use spectral norm
150
+ use_spectral_norm: True
151
+
152
+ # use interpolation to match the output size
153
+ interp: False
154
+
155
+ # map boundary padding
156
+ padding_conf:
157
+ activate: True
158
+ mode: earth
159
+ pad_lat: [21, 22]
160
+ pad_lon: [44, 44]
161
+
162
+ post_conf:
163
+ activate: True
164
+
165
+ skebs:
166
+ activate: False
167
+
168
+ tracer_fixer:
169
+ activate: True
170
+ denorm: True
171
+ tracer_name: ['specific_total_water', 'total_precipitation']
172
+ tracer_thres: [0, 0]
173
+
174
+ global_mass_fixer:
175
+ activate: True
176
+ activate_outside_model: False
177
+ simple_demo: False
178
+ denorm: True
179
+ grid_type: 'sigma'
180
+ midpoint: True
181
+ fix_level_num: 7
182
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
183
+ surface_pressure_name: ['SP']
184
+ specific_total_water_name: ['specific_total_water']
185
+
186
+ global_water_fixer:
187
+ activate: True
188
+ activate_outside_model: False
189
+ simple_demo: False
190
+ denorm: True
191
+ grid_type: 'sigma'
192
+ midpoint: True
193
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
194
+ surface_pressure_name: ['SP']
195
+ specific_total_water_name: ['specific_total_water']
196
+ precipitation_name: ['total_precipitation']
197
+ evaporation_name: ['evaporation']
198
+
199
+ global_energy_fixer:
200
+ activate: True
201
+ activate_outside_model: False
202
+ simple_demo: False
203
+ denorm: True
204
+ grid_type: 'sigma'
205
+ midpoint: True
206
+ lon_lat_level_name: ['lon2d', 'lat2d', 'coef_a', 'coef_b']
207
+ surface_pressure_name: ['SP']
208
+ air_temperature_name: ['temperature']
209
+ specific_total_water_name: ['specific_total_water']
210
+ u_wind_name: ['u_component_of_wind']
211
+ v_wind_name: ['v_component_of_wind']
212
+ surface_geopotential_name: ['geopotential_at_surface']
213
+ TOA_net_radiation_flux_name: ['top_net_solar_radiation', 'top_net_thermal_radiation']
214
+ surface_net_radiation_flux_name: ['surface_net_solar_radiation', 'surface_net_thermal_radiation']
215
+ surface_energy_flux_name: ['surface_sensible_heat_flux', 'surface_latent_heat_flux',]
216
+
217
+ loss:
218
+ # the main training loss
219
+ training_loss: "mse"
220
+
221
+ # power loss (x), spectral_loss (x)
222
+ use_power_loss: False
223
+ use_spectral_loss: False
224
+
225
+ # use latitude weighting
226
+ use_latitude_weights: True
227
+ latitude_weights: '/glade/derecho/scratch/ksha/CREDIT_data/ERA5_mlevel_1deg/static/ERA5_mlevel_1deg_static_subset.zarr'
228
+
229
+ # turn-off variable weighting
230
+ use_variable_weights: True
231
+ variable_weights:
232
+ specific_total_water: [1.36577589e-06, 1.19436047e-05, 1.03276589e-04, 4.46097338e-04, 1.26807904e-03, 2.77554864e-03, 5.13295742e-03, 8.70407041e-03, 1.41016958e-02, 4.12818192e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02, 6.84619425e-02]
233
+ temperature: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
234
+ u_component_of_wind: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
235
+ v_component_of_wind: [1.36577589e-06, 2.38872094e-05, 2.06553177e-04, 8.92194675e-04, 2.53615808e-03, 5.55109728e-03, 1.02659148e-02, 1.74081408e-02, 2.82033917e-02, 8.25636383e-02, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01, 1.36923885e-01]
236
+ SP: 0.13
237
+ VAR_2T: 0.13
238
+ VAR_10U: 0.13
239
+ VAR_10V: 0.13
240
+ surface_latent_heat_flux: 0.065
241
+ surface_net_solar_radiation: 0.065
242
+ evaporation: 0.065
243
+ surface_net_thermal_radiation: 0.065
244
+ toa_incident_solar_radiation: 0.065
245
+ surface_sensible_heat_flux: 0.065
246
+ total_precipitation: 0.065
247
+ top_net_thermal_radiation: 0.065
248
+ top_net_solar_radiation: 0.065
249
+
FuXi-sigma-physics/mean_std/mean_6h_1979_2019_conserve_1deg.nc ADDED
Binary file (17.1 kB). View file
 
FuXi-sigma-physics/mean_std/std_residual_6h_1979_2019_conserve_1deg.nc ADDED
Binary file (15.8 kB). View file