File size: 8,097 Bytes
a62fa9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
---
frameworks:
- ""
language:
- en
license: apache-2.0
tags:
- OneScience
- UNO
- neural-operator
- computational-fluid-dynamics
- Navier-Stokes
tasks: []
---
<p align="center">
  <strong>
    <span style="font-size: 30px;">UNO</span>
  </strong>
</p>

# Model Overview

UNO (U-shaped Neural Operator) combines the multiscale encoder–decoder structure of U-Net with the spectral convolutions of a Fourier Neural Operator. It learns PDE solution operators across multiple spatial scales while preserving local flow-field details through skip connections.

This model package targets Navier–Stokes time-series prediction on two-dimensional regular grids. By default, it takes the first 10 time steps as input and predicts the subsequent 10 autoregressively.

Paper: U-NO: U-shaped Neural Operators  
https://arxiv.org/abs/2204.11127

# Repository Overview

This repository is a minimal, self-contained, runnable UNO model package maintained by OneScience for ModelScope downloads, automated OneCode execution, and rapid local validation.

Supported capabilities:

- Train a two-dimensional UNO model from a YAML configuration
- Perform multistep autoregressive prediction of Navier–Stokes flow fields
- Compute relative L2 errors and save predicted tensors and visualizations
- Override the sample count, temporal window, spatial downsampling, and model size from the command line
- Run on a CPU, GPU, or DCU

Unsupported capabilities:

- Pretrained weights are not bundled
- The approximately 394 MiB raw Navier–Stokes data file is not bundled
- The standalone model includes only the two-dimensional UNO implementation required by this example; the general-purpose OneScience 1D and 3D components are not included

# Use Cases

| Use Case | Description |
| :---: | :--- |
| Flow-field time-series prediction | Autoregressively predict future Navier–Stokes states from historical vorticity fields |
| Neural operator training | Evaluate the combination of Fourier spectral convolutions and a U-shaped multiscale architecture |
| CFD surrogate modeling | Learn mappings from historical to future fields on regular grids |
| Pipeline validation | Validate training and inference with a small sample set and a single epoch |

# File Structure

| Path | Purpose | Notes |
| :--- | :--- | :--- |
| `README.md` | Project documentation | English |
| `conf/config.yaml` | Data, model, training, and output configuration | Paths are resolved relative to the model package root |
| `model/uno.py` | Standalone two-dimensional UNO model | Does not depend on `onescience.modules` |
| `scripts/common.py` | Shared configuration, device, metric, and autoregressive utilities | Used by both training and inference |
| `scripts/train.py` | Training and validation script | Saves the checkpoint with the best relative L2 error |
| `scripts/inference.py` | Inference, evaluation, and visualization script | Loads `weight/*.pt` |
| `data/` | Navier–Stokes data directory | Stores the benchmark `.mat` file |
| `weight/` | Model weight directory | Checkpoints are written automatically during training |
| `result/` | Inference result directory | Created automatically on first inference |

# Usage

## 1. OneCode

Use the online OneCode environment for an intelligent, one-click AI for Science (AI4S) programming experience:

[Launch OneCode for one-click AI4S programming](https://web-2069360198568017922-iaaj.ksai.scnet.cn:58043/home)

## 2. Manual Setup

**Hardware Requirements**

- A GPU or DCU is recommended for full training.
- A CPU can be used for pipeline validation with a reduced model and dataset, but full training will be slow.
- DCU users must install DTK and a PyTorch environment compatible with the target cluster.

### Download the Model Package

```bash
modelscope download --model OneScience/UNO --local_dir ./UNO
cd UNO
```

### Set Up the Runtime Environment

**DCU Environment**

```bash
# Activate DTK and Conda first
conda create -n onescience311 python=3.11 -y
conda activate onescience311
# Installation with uv is also supported
pip install onescience[cfd-dcu] -i http://mirrors.onescience.ai:3141/pypi/simple/  --trusted-host mirrors.onescience.ai
```

**GPU Environment**
```bash
# Activate Conda first
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
# Installation with uv is also supported
pip install onescience[cfd-gpu] -i http://mirrors.onescience.ai:3141/pypi/simple/  --trusted-host mirrors.onescience.ai
```

## 3. Quick Start

### Prepare the Data

Download the following file from the Transolver `PDE-Solving-StandardBenchmark`:

```text
NavierStokes_V1e-5_N1200_T20.mat
```

Place the file in `data/`:

```text
data/
  NavierStokes_V1e-5_N1200_T20.mat
```

Data downloads and documentation:

- https://github.com/thuml/Transolver/tree/main/PDE-Solving-StandardBenchmark
- https://drive.google.com/drive/folders/1UnbQh2WWc6knEHbLn-ZaXrKUZhp7pjt-

The OneScience community also provides the training data. Download it with the following command and verify that the data path in `conf/config.yaml` is configured correctly:

```bash
modelscope download --dataset OneScience/cfd_benchmark  data/ns/NavierStokes_V1e-5_N1200_T20.mat  --local_dir ./data
```

### Training

```bash
python scripts/train.py
```

The default checkpoint is saved to `weight/uno_navier_stokes.pt`. The training script is controlled entirely by `conf/config.yaml` and does not accept command-line configuration arguments.

### Model Weights

This repository provides weights trained on the standard Navier–Stokes dataset in the `weight/` directory.

### Inference, Evaluation, and Visualization

```bash
python scripts/inference.py
```

The script loads `weight/uno_navier_stokes.pt` by default and generates the following files under `result/`:

```text
result/
  prediction_sample.pt
  prediction_sample.png
```

The inference script is likewise controlled entirely by `conf/config.yaml` and does not accept command-line configuration arguments. The weight path is determined jointly by `training.weight_dir` and `training.checkpoint_name`; the output directory and number of saved samples are controlled by `inference.result_dir` and `inference.num_samples`, respectively.

# Configuration

`conf/config.yaml` contains five sections:

- `common`: device and random seed
- `datapipe`: data file, sample splits, temporal windows, downsampling, and DataLoader settings
- `model`: hidden channels, Fourier modes, normalization, and spatial padding
- `training`: optimizer, learning-rate schedule, early stopping, and weight directory
- `inference`: inference result directory and number of saved samples

The model automatically updates `in_dim` from `t_in * out_dim` in the configuration, so the model input dimension does not need to be synchronized manually when the history window changes.

# Data Format

The `.mat` file must contain a variable named `u` with the following standard shape:

```text
[1200, 64, 64, 20]
```

| Dimension | Meaning |
| --- | --- |
| `1200` | Number of independent flow-field samples |
| `64, 64` | Height and width of the two-dimensional regular grid |
| `20` | Number of consecutive time steps |

The data pipeline produces:

- `pos`: `[H*W, 2]`, normalized two-dimensional coordinates
- `x`: `[H*W, t_in*out_dim]`, historical states
- `y`: `[H*W, t_out*out_dim]`, future states

# Official OneScience Resources

| Platform | OneScience 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 |

# Citations and License

- Rahman, M. A., Ross, Z. E., and Azizzadenesheli, K. U-NO: U-shaped Neural Operators. arXiv:2204.11127, 2022.
- Li, Z. et al. Fourier Neural Operator for Parametric Partial Differential Equations. arXiv:2010.08895, 2020.
- This model package is released under the Apache-2.0 license and retains attribution to the original paper and data sources.