In three lines

  • After reading that AI weather forecasts had overtaken supercomputer forecasts, I wanted to know if one person could beat the KMA on a tiny budget
  • With no data or GPUs to learn the atmosphere from scratch, the plan was to stand on a public model that already learned the whole planet
  • Comparing candidates on the public WeatherBench 2 scoreboard pointed to Aurora 1.5: hourly steps, and the whole globe fits on one L4

It started with one article

  • A while ago I read that AI had started forecasting the weather better than supercomputer physics models
  • Google’s GraphCast, for one, reported beating the ECMWF physics model on 90% of 1,380 verification targets out to 10 days (Science, 2023)
  • But those results come from big tech labs with hundreds of GPUs
  • So the question was: can one person with limited resources, on a very small budget, beat a national weather service?
  • The whole bill: a Colab Pro subscription at about 10,000 KRW (roughly $7) a month and some Claude tokens
  • Nearly all the code was written together with Claude; my job was mostly setting the rules, doubting the results and shouting “isn’t that cheating?”

Rules first

  • The opponent is the Korea Meteorological Administration (KMA) short-range forecast, 0–48 hours after issuance
  • Scoring uses real observations at all 97 ASOS stations in South Korea
  • Temperature, humidity and wind use mean absolute error (MAE); rain is whether an hour had at least 1 mm, scored with F1
  • Why not accuracy for rain: only about 3% of hours have 1 mm or more
  • Always saying “no rain” scores 97% accuracy and zero skill, so F1 it is
  • One more rule: inputs must be data that was actually public at the KMA issuance time
  • Starting from a reanalysis (ERA5) built days later would be reading an answer sheet from the future

Training from scratch is out

  • Global weather models are trained on decades of reanalysis and thousands of GPU hours
  • My hardware is one L4 on Colab Pro
  • So the big model stays as it is, and the only thing built here is a small head that corrects it for each station

The public scoreboard

Recomputed from the official WeatherBench 2 results for East Asian land only (2022, RMSE against the ECMWF analysis)

Model2 m temp 24 h48 h10 m wind 24 h48 h
HRES (ECMWF physics model)0.6060.8700.5230.723
Aurora0.5740.7610.5010.652
GraphCast1.3141.3750.6380.780
Pangu1.3911.4490.6880.806
GenCast (ensemble mean)0.5510.7320.4710.597
FGN (ensemble mean)0.4840.6400.4080.525

Source: computed from WeatherBench 2 public results

  • FGN tops the table, but an ensemble mean averages many forecasts and smooths errors, so it is not a like-for-like comparison with a single forecast
  • Among single deterministic models Aurora was best and also beat the ECMWF physics model
  • The files had no rain scores, so rain, the hardest part, had to be measured ourselves

Bar chart of 2 m temperature RMSE at 24 and 48 hours over East Asian land, with Aurora lowest among single models

Made by HSL from the WeatherBench 2 table above

Cutting the list

  • FourCastNet 3: strong, but needs about 60 GB of GPU memory; the L4 has 24 GB
  • GraphCast, Pangu: 6-hour steps, while the KMA forecast is hourly
  • AIFS: ECMWF’s operational AI model, with free public output; it became Aurora’s starting point (initial conditions) instead of an opponent
  • Aurora 1.5: open weights, PyTorch, and it can roll forward one hour at a time

Table of why FourCastNet 3, GraphCast and Pangu were ruled out, AIFS became the input and Aurora 1.5 was chosen

Made by HSL: reasons for each candidate and the L4 memory limit

Hourly steps sealed it

  • The KMA forecast gives temperature, humidity, wind and rain for every hour
  • A fair fight needs the same hourly resolution
  • Aurora 1.5 rolls 48 hours as 48 one-hour steps, so it was the pick

Does the planet fit on an L4?

  • The documentation puts Aurora 1.5 on the full 0.25° globe at about 32 GB
  • So the first idea was to feed only the area around Korea
  • That is how the sun ended up rising four hours late (part 3)
  • In the end a memory setting change put the whole globe on the L4: 19.5 GB peak, about six minutes for 48 hours
  • Next: collecting the data and settling into Colab