Skip to content

Unexpected assert triggered in variable scaling #798

@gabrieloks

Description

@gabrieloks

What happened?

This variable scaling assert here was triggered in a situation where I would not expect it to be triggered.

What are the steps to reproduce the bug?

The bug can very easily be reproduced by changing the name of any variable in the dataloader config, as is done here:

training:
dataset:
- dataset: ${system.input.dataset}
start: 1999
end: 2022
frequency: ${data.frequency}
- dataset: ${system.input.dataset_land}
start: 1999
end: 2022
frequency: ${data.frequency}
select: [swvl1, swvl2, stl1, stl2, ssrd, strd, sf, tcc, mcc, hcc, lcc, 100u, 100v, ro]
- dataset: ${system.input.dataset_imerg}
start: 1999
end: 2022
frequency: ${data.frequency}
select: [tp]
rename:
tp: imerg
start: 1999
end: 2022
drop: []

and then change the scaling on that variable

training:
scalers:
general_variable:
target: anemoi.training.losses.scalers.GeneralVariableLossScaler
weights:

    imerg: 0.025

The code crashes with:

File "/leonardo/home/userexternal/mgabrie1/code_combined_new/anemoi-core/training/src/anemoi/training/train/train.py", line 201, in model
model = model_task(**kwargs) # GraphForecaster -> pl.LightningModule
^^^^^^^^^^^^^^^^^^^^
File "/leonardo/home/userexternal/mgabrie1/code_combined_new/anemoi-core/training/src/anemoi/training/train/tasks/rollout.py", line 67, in init
super().init(
File "/leonardo/home/userexternal/mgabrie1/code_combined_new/anemoi-core/training/src/anemoi/training/train/tasks/base.py", line 190, in init
self.scalers, self.updating_scalars = create_scalers(
^^^^^^^^^^^^^^^
File "/leonardo/home/userexternal/mgabrie1/code_combined_new/anemoi-core/training/src/anemoi/training/losses/scalers/scalers.py", line 31, in create_scalers
scalers[name] = scaler_builder.get_scaling()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/leonardo/home/userexternal/mgabrie1/code_combined_new/anemoi-core/training/src/anemoi/training/losses/scalers/base_scaler.py", line 87, in get_scaling
scaler_values = self.get_scaling_values()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/leonardo/home/userexternal/mgabrie1/code_combined_new/anemoi-core/training/src/anemoi/training/losses/scalers/variable.py", line 100, in get_scaling_values
self.weights.get(
AssertionError: Variable imerg is not allowed to have a separate scaling besides tp.

Is this behaviour expected or maybe I'm missing something?

Version

recent branch of anemoi core

Platform (OS and architecture)

Linux Env

Relevant log output

Accompanying data

No response

Organisation

ECMWF

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

Status

To be triaged

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions