File size: 5,684 Bytes
73d9e73 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | ---
license: other
language:
- en
- zh
tags:
- OneScience
- Earth Science
- Weather Forecasting
- Spherical Neural Operators
- ERA5
frameworks: PyTorch
datasets:
- OneScience/ERA5
---
<p align="center">
<strong><span style="font-size: 30px;">Spherical Fourier Neural Operator</span></strong>
</p>
# Model Overview
SFNO learns dynamical system evolution on the sphere using spherical harmonic transforms, and can be applied to global weather forecasting and spherical shallow-water equation prediction.
Paper: *Spherical Fourier Neural Operators: Learning Stable Dynamics on the Sphere*
https://proceedings.mlr.press/v202/bonev23a.html
# Model Description
This model package invokes NVIDIA's official `torch-harmonics` linear SFNO implementation and supports SHT on fake spherical fields, one parameter update step, checkpoint recovery, and short-term autoregressive rollout. It is an operator-level smoke package, not a reproduction of the paper's SWE/ERA5 experiments.
# Use Cases
| Scenario | Description |
| :---: | :--- |
| Spherical Operator Research | Verify SHT, spectral filtering, and inverse SHT. |
| Local Rapid Verification | Run through training and inference with fake spherical data. |
| ERA5 Weather Forecasting | Subsequently interface with 26- or 73-channel ERA5 data. |
# Usage
## 1. OneCode
[Click to experience intelligent one-click AI4S programming](https://web-2069360198568017922-iaaj.ksai.scnet.cn:58043/home)
## 2. Manual Installation & Usage
**Hardware Requirements**
- CPU can run the current small configuration.
- GPU is recommended for full ERA5 training.
### Download the Model Package
```bash
hf download --model OneScience-Group/SFNO --local-dir ./SFNO
cd SFNO
```
### Set Up the Runtime Environment
**DCU Environment**
```bash
conda create -n onescience311 python=3.11 -y
conda activate onescience311
pip install onescience[earth-dcu] -i http://mirrors.onescience.ai:3141/pypi/simple/ --trusted-host mirrors.onescience.ai
pip install torch-harmonics==0.8.0
```
**GPU Environment**
```bash
conda create -n onescience311 python=3.11 -y libstdcxx-ng=12 libgcc-ng=12 gcc_linux-64=12 gxx_linux-64=12
conda activate onescience311
pip install onescience[earth-gpu] -i http://mirrors.onescience.ai:3141/pypi/simple/ --trusted-host mirrors.onescience.ai
pip install torch-harmonics==0.8.0
```
This directory also retains `torch-harmonics==0.8.0` under `.deps/`.
### Data
The current scripts generate low-order smooth fake spherical fields in memory and split consecutive time frames into `T-1` input/target pairs; no external data download is required.
### Training
```bash
python scripts/train.py
```
Training now performs multi-epoch pair Dataset training, time-sequential validation split, learning rate scheduling, and early stopping:
```bash
python scripts/train.py --epochs 10
python scripts/train.py --resume weight/training/latest.pth --epochs 20
```
### Inference
```bash
python scripts/inference.py
```
Output files:
```text
weight/model.pth
weight/training/latest.pth
weight/training/best.pth
weight/training/history.json
result/prediction.pt
result/target.pt
result/inference.json
```
### Result Inspection
```bash
python scripts/result.py
```
The current test only verifies that the model executes. Randomly-initialized rollouts do not represent the paper's long-term stability results.
The result script generates `result/metrics.json` and `result/comparison.png`. The current RMSE does not incorporate spherical integration weights, and the ACC uses the sample's own spatial mean rather than a long-term training-set climatology; therefore the metrics are not comparable with those reported in the paper.
### Paper vs. Current Implementation I/O
| Item | Paper SWE / ERA5 | Current Smoke Configuration |
| --- | --- | --- |
| Input / Output | SWE 3 fields `256×512` / ERA5 26 or 73 channels | `[B,2,17,32]` smooth synthetic fields |
| Time Step | SWE 1 hour / ERA5 6 hours | Consecutive indices with no physical units |
| Architecture | SWE 4×256; weather model 8×384 | 2 blocks, embed dim 8 |
| Training | Single-step training followed by two-step autoregressive fine-tuning | Multi-epoch single-step pair training and validation; rollout used for inference analysis |
| Analysis | Spherically weighted relative error and climatological ACC | Unweighted smoke RMSE/ACC |
The complete execution flow is `train.py -> inference.py -> result.py`. Training generates z-scored `[T,C,Nlat,Nlon]` in memory and forms pairs from consecutive frames. The checkpoint `config` stores only the model configuration, while training parameters are stored separately under `train_config`, allowing inference to reconstruct the model architecture directly from the checkpoint. The model package is distributed without local training weights or `result/` artifacts. A production SWE/ERA5 mode further requires data loading, variable tables, formal train/validation splits, area-weighted loss, and the paper's two-stage training loop.
### Real Data
Real-data training requires ERA5 26/73-channel data, 6-hour temporal pairing, training-set statistics, and spherical grid resampling configuration.
# OneScience Official Information
| Platform | OneScience Main Repository | Skills Repository |
| --- | --- | --- |
| Gitee | https://gitee.com/onescience-ai/onescience | https://gitee.com/onescience-ai/oneskills |
| GitHub | https://github.com/onescience-ai/OneScience | https://github.com/onescience-ai/oneskills |
# Citation & License
- Official Implementation: https://github.com/NVIDIA/torch-harmonics
- This directory is an independent runnable adaptation of SFNO; see `THIRD_PARTY.md` for third-party terms.
|