[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2433":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},2433,"keisler-2022","rkeisler\u002Fkeisler-2022","rkeisler","Graph neural network weather forecasting, from Keisler 2022","https:\u002F\u002Frkeisler.github.io\u002Fgraph_weather",null,"Python",164,25,5,0,1,13,4.24,"MIT License",false,"main",[],"2026-06-12 02:00:41","# keisler-2022\nThis repo contains code to run the machine learning weather model described in [Forecasting Global Weather with Graph Neural Networks (Keisler 2022)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2202.07575).\n\nThe model uses a three-stage graph neural network: an **Encoder** maps ERA5 lat\u002Flon fields onto an H3 hexagonal mesh, a **Processor** runs 9 rounds of message passing on the mesh, and a **Decoder** maps back to lat\u002Flon to produce a 6-hour forecast update. Autoregressive rollout produces multi-day forecasts.\n\n## Installation\n\nPrerequisites: Python 3.10+ and `uv` installed.\n\n```bash\ngit clone git@github.com:rkeisler\u002Fkeisler-2022.git\ncd keisler-2022\n\n# CPU-only (default)\nuv sync\n\n# GPU with CUDA 12\nuv sync --extra cuda12\n\n# Optional: run tests\nuv run pytest\n```\n\n## Running Forecasts\n\nA 10-day forecast should take about one minute total (load initial conditions, run forecast, save output) on a GPU machine. It will take a bit longer on a CPU machine, e.g. 2 minutes on a 8-vCPU machine.\n\nThe model can be initialized from two data sources:\n\n**ERA5 reanalysis** (via [Google ARCO](https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Farco-era5)) — historical dates, good for evaluation:\n\n```bash\nuv run forecast.py --init 2020-01-01T00 --steps 40\n```\n\n**ECMWF IFS analysis** (via [ECMWF Open Data](https:\u002F\u002Fwww.ecmwf.int\u002Fen\u002Fforecasts\u002Fdatasets\u002Fopen-data) on AWS) — recent dates, good for near real-time forecasting:\n\n```bash\nuv run --extra opendata forecast.py --init 2026-02-15T00 --steps 20 --input opendata\n```\n\nUse `--help` to see all available options:\n\n```bash\nuv run forecast.py --help\n```\n\n## GPU Setup\n\n```bash\nuv sync --extra cuda12\n```\n\nVerify GPU access:\n\n```bash\nuv run python -c \"import jax; print('Devices:', jax.devices())\"\n```\n\nYou should see `[CudaDevice(id=0)]` instead of `[CpuDevice(id=0)]`.\n\n**Troubleshooting:** If JAX falls back to CPU, make sure `LD_LIBRARY_PATH` is **not set**.\nA pre-existing `LD_LIBRARY_PATH` can cause JAX to find incompatible system CUDA libraries instead of its own pip-bundled versions. To fix, run this command or put it in your `.bashrc`:\n\n```bash\nunset LD_LIBRARY_PATH\n```\n\nSee the [JAX installation docs](https:\u002F\u002Fdocs.jax.dev\u002Fen\u002Flatest\u002Finstallation.html#pip-installation-nvidia-gpu-cuda-installed-via-pip-easier) for more details.\n\n\n## Scripts\n\nThe `scripts\u002F` directory contains example analysis and visualization scripts.\n\n### `01_evaluation.py` — ERA5 Evaluation\n\nRuns a forecast initialized from ERA5 reanalysis, computes area-weighted RMSE at each 6-hour lead time, and produces a figure of specific humidity at 850 hPa comparing ERA5 truth vs. model forecast.\n\n```bash\nuv run --extra scripts scripts\u002F01_evaluation.py --init 2020-01-01T00 --steps 12\n```\n\n\u003Cimg width=\"500\" alt=\"era5_eval_q850\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fcad2e38f-62e0-4b36-af91-e57cd4669866\" \u002F>\n\n### `02_sensitivity.py` — Forecast Sensitivity Maps\n\nComputes `d(forecast)\u002Fd(initial_conditions)` using JAX autodiff for a chosen target location, field, and lead time, then visualizes the sensitivity maps.\n\n```bash\nuv run --extra scripts scripts\u002F02_sensitivity.py --init 2026-01-03T00 --steps 12\n```\n\n\u003Cimg width=\"500\" alt=\"sensitivity_3day\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fb0451725-e84d-40cc-949b-279a8f54e48f\" \u002F>\n\n### `03_hurricane.py` — Hurricane Sandy Tracking\n\nRuns an 8-day forecast initialized from ERA5 at 2012-10-23T00 (2012 was a test-set year), tracks Hurricane Sandy's center via the Z1000 minimum, and compares the predicted track against the actual track.\n\n```bash\nuv run --extra scripts scripts\u002F03_hurricane.py\n```\n\n\u003Cimg width=\"500\" alt=\"hurricane\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc19b13b9-3844-4709-8d96-f32fadd6c76f\" \u002F>\n\n\n","该项目通过图神经网络技术实现天气预报，基于Keisler 2022年的研究。其核心功能包括一个三阶段的图神经网络模型：编码器将ERA5纬度\u002F经度数据映射到H3六边形网格上，处理器在网格上进行9轮消息传递，解码器再将结果映射回纬度\u002F经度以生成6小时的天气更新预测，并可通过自回归方式扩展为多日预报。该模型支持使用ERA5再分析数据或ECMWF IFS分析数据作为初始条件，适用于历史天气评估和近实时天气预报场景。项目采用Python语言编写，提供了详细的安装与运行指南，支持CPU及GPU环境下的部署。",2,"2026-06-11 02:49:55","CREATED_QUERY"]