---
# System prepended metadata

title: 大氣應用題試題說明 (正式版)
tags: [Fourcastnet, Machine Learning, Python, modulus]

---

## 簡介與題目說明
 
**1.題目簡介**
2022年9月上旬，臺灣在軒嵐諾颱風和梅花颱風接續影響下，分別發生強降雨事件。梅花颱風共造成有 10 處積淹水災點，農業損失估計約新臺幣 447 萬元(2022年軒嵐諾與梅花颱風氣象分析，李榮宗等)，此題的目的是藉由FourCastNet(FCN)模擬梅花颱風(2022/9/9-10)的路徑與風速，藉此了解此模式對於颱風模擬的效能，並比較模擬結果與實際颱風的差異。
 
 本題希望參賽者採用Python架構的開源物理機器學習平臺Modulus 中的相關應用為題目，不同於傳統數值氣象模式需要大量物理與流力計算才能模擬結果，FCN是以資料驅動的機器學習進行模型訓練，此類AI模型尚未受到氣象界認可，預報品質離數值氣象預報仍有一段差距，但是有快速推演大量資料的優點，未來仍然有很多發展和應用的空間。

此題將分成六個工作項目A至F來進行評分，包括環境配置、檔案前處裡、建立跨節點環境、完成訓練與推論，與最後結果呈現，項目A-C繳交一張圖，項目D-F各繳交兩張圖。
:::warning
"C.建立跨節點訓練環境" 若建立失敗仍能繼續完成項目D、E、F，請自行斟酌比賽時間。
:::

**2.題目參考連結:**
[Modulus Nvidia Doc](https://docs.nvidia.com/deeplearning/modulus/modulus-sym/user_guide/neural_operators/fourcastnet.html)
[Modulus-sym Github](https://github.com/NVIDIA/modulus-sym/tree/main)
[NVlab FourCastNet Github](https://github.com/NVlabs/FourCastNet)

**3.賽前建議準備:**
AI訓練基本概念、docker設置與使用、python基本使用、jupyter note基本使用。

**4.正式版新增資訊:**
項目D:東亞資料，19年為training，1年為testing
項目E、F模擬時間: 9/9-9/10  (8 steps)
項目E模擬參數: **風速、氣壓**



## 比賽中提供資料
以下為此題提供之檔案，如果沒有在比賽登入節點中 **/work/fcn/** 中找到這些檔案請告知現場工作人員。
![](https://hackmd.io/_uploads/HJgeAtNs2.png)
1. 氣象原始檔，2002-2021的 pl. nc 與 sfc. nc (/ERA5_nc/*.nc)
2. 轉檔程式 (NC_HDF5.py、get_stats_EA.py)
3. Inference 氣象檔(/data/inference/2022_sep.h5)
4. FCN 主程式(/fourcastnet/src、/conf、fcn_era5.py、inferencer. py)
5. 繪圖程式(/post_process/FCN_plot_v2.ipynb)
 ## A.完成單節點環境與Modulus 配置 
 此部分為基本環境配置分，請參考[:link:][installation] 中的步驟於主機上安裝Modulus，此部分不限制安裝方式，建議可以用Docker進行環境安裝，呈現結果只須執行/examples/helmholtz/中的helmholtz.py。不需要持續執行只要看到，Success Loading Model 及給分。
 
**a.繳交資料**
執行helmholtz.py之截圖，檔名請用 **XX隊_FCN_A.jpg** 或其他圖檔格式。 
 
**b.繳交範例** ![](https://hackmd.io/_uploads/BJSduCE93.jpg)

:::info 
Hint: 如果使用Docker需要安裝 Nvidia container toolkit，並建議docker image 使用modulus:23.05
:::
:::warning
若安裝Docker，系統會產生一個虛擬網卡，此時在container外執行其他mpirun時，需要指定網段。參考指令
```
mpirun --mca btl_tcp_if_include <network interface name> <your command>
```
:::

[installation]: https://docs.nvidia.com/deeplearning/modulus/modulus-sym/user_guide/getting_started/installation.html
## B.完成檔案前處理
 此部份為氣象資料前處理，主機裡提供歐洲中期天氣預報中心(ECMWF)所下載之20年(2002-2021)之NetCDF(.nc)資料，其解析度為0.25度經緯度，每6小時一筆資料 (0:00, 6:00, 12:00, 18:00)，**XXXX_pl.nc**檔為不同氣壓分層資料，**XXXX_sfc.nc**為地表層資料，其中包含風速、氣壓、溼度等20種參數資料。本題將以東亞(90-150°E , 10-55 °N)資料為模型訓練資料。
 
 FCN讀取的資料格式為HDF5(.h5)，請執行轉檔程式 **NC_HDF5.py**，將提供的pl.nc與sfc.nc資料合併成一年一筆的.h5檔，其檔案格式為一個(1460, 20, 180, 240)四維資料，分別為時間、氣象參數、經度、緯度。XXXX_EAt.h5為剪裁後的final檔案，請用此檔案做項目D之training和testing。
 
**a.繳交資料**
轉檔後之h5詳細資料大小截圖，檔名請用 **XX隊_FCN_B.jpg** 或其他圖檔格式

**b.繳交範例**
![](https://hackmd.io/_uploads/r127dgBch.png)

:::info 
Hint:轉檔程式用到的Module有:h5py, numpy, netCDF4, mpi4py，其中會用到h5py中的mpi功能，建議可用以下指令在conda安裝h5py並開啟mpi功能
```
conda install -c conda-forge "h5py=*=mpi*"
```
並在conda環境中輸入以下變數來開啟MPI功能
```
export HDF5_MPI="ON"
```
::: 
 
## C.建立跨節點訓練環境
此部分希望參賽者可以利用4台主機所有的GPU資源來進行訓練，相關步驟不在官方文件中，需要參賽者利用網路資源或個人經驗建立跨節點環境，若無法順利建立仍可以完成後面的訓練和推演。如果使用Docker環境，可以使用Hint中host network或Docker Swarm方式建立連線。
在執行訓練程式fcn_era5.py前，請先參考項目D 中的檔案配置。

**a.繳交資料**
執行fcn_era5.py並截圖openmpi用到的prcess，檔名請用 XX隊_FCN_C.jpg 或其他圖檔格式

**b.繳交範例**
![](https://hackmd.io/_uploads/BJxHgfB9n.png)


:::info
Hint: 可以在Docker之間建立host network的方法，供參賽者參考。可分別在4個節點安裝docker與Nvidia Container toolkit後，分別建立docker後，並用相同的sshport連線。

:::






## D.完成模型訓練
此部分希望參賽者至少完成20 epoch (假設使用4 GPUs、batch size 設定為2，需至少**70000** steps)。在AI訓練(Training)與推演(inference)之前，需先將需要的資料配置好到/train、/test和normalizaiton需要的/stats，請將項目B所轉出的檔案進行以下資料配置，並且修改主要配置檔 /conf/config_FCN.yaml、/src中dataset.py和metrics.py的相關路徑，資料配置如下圖，19年training資料，1年testing資料。
要產出stats中的平均、標準差和時間平均數列，可以修改並執行get_stats_EA.py來取得，這邊只要算training data的部分。

![](https://hackmd.io/_uploads/Hkhe9GBqn.jpg)
:::info
Hint:
1.config_FCN.yaml中batch size和maximum step為主要影響訓練時間的參數。
2.1460*19/ (steps × Batch size × GPUs)＝1 Epoch
3.若訓練中途停止，程式可依照output中儲存的資料，繼續後面的訓練。
:::


完成後，以mpirun執行主訓練程式fcn_era5.py

```
mpirun -n 4 --allow-run-as-root python fcn_era5.py
```
或項目C中提到的跨節點訓練
```
OMPI_MCA_plm_rsh_args="-p ${sshport}" mpirun -n 16 --hostfile hostfile --allow-run-as-root ./fcn.sh
```


完成訓練後會產生一個 /output/fcn_era5/ 資料夾，裡面將有 events.out.tfevents.xxx訓練記錄檔，請將整個資料夾下載到自己的電腦上，並下載TensorBoard後，可在Jupyter Notebook 用以下指令在指定port開啟。

```
%reload_ext tensorboard
%tensorboard --logdir=C:/Users/path/fcn_era5/ --port=45678
```
成功執行後便可在瀏覽器上以 http://localhost:45678/ 看訓練結果。


**a.繳交資料**
請將TensorBoard loss圖截圖並且附上以下表格，檔名請用 XX隊_FCN_D-1.jpg 或其他圖檔格式，表格也可以截圖並用檔名XX隊_FCN_D-2.jpg。




| Final Step | batch size | total training time |GPU used |final loss |
| -------- | -------- | -------- |-------- |-------- |
|      | grid:    ___ validation:____   | _______min     |         |


**b.繳交範例**
**D-1**
![](https://hackmd.io/_uploads/H1nPBQI5h.jpg)

**D-2**![](https://hackmd.io/_uploads/ByFjU785h.png)
::: warning
訓練速度與final loss不影響評分。
::: 




 
## E.完成指定日期數據推演並繪製指定參數(風速、氣壓)
請執行inferencer.py並繪製產出的pred.npy中 9/9-9/10 (8 time steps)的風速($\sqrt{v10^2+u10^2}$)與地表氣壓預報(surface pressure)。
可以使用/post_process/FCN_plot_v2.ipynb 來繪製，但氣壓圖請自行更改參數，並用**不同色標**繪製。

:::info
/data/inference/2022_sep.h5  為已轉好檔的2022九月資料，其中包含9/1-9/30。可於inferencer.py中讀取，以進行預報。inferencer.py會參考該氣象檔產出預報，請參賽者注意產出之預報是屬於哪個日期。
:::


**a.繳交資料**
繪製9/9-9/10 8 time steps的風速與地表氣壓圖，風速檔請用**XX隊_FCN_E-1.jpg**，氣壓圖請用**XX隊FCN_E-2.jpg**

**b.繳交範例**
風速模擬 
 ![](https://i.imgur.com/Zdg8dnu.png)
 
 :::warning
繳交模擬圖時，請提供對應的訓練資訊(D-2)，假如繳交第二份或第三份模擬時，也請提供新的D-2。
:::
 

## F.呈現指定日期之預報10公尺水平風(u10)之RMSE 與ACC
請繪製inferencer.py產出之9/9-9/10的10公尺水平風(u10)之RMSE與ACC值。 兩者的定義與公式可參考[2] Appendix C[:link:](https://arxiv.org/pdf/2202.11214.pdf)，繪製方法與軟體不拘，但須在**圖上標示各點數值至小數第三位**。
:::warning
1.**需繳交項目E，項目F才會給分。**
2.繳交驗證圖表時，請提供對應的訓練資訊(D-2)，假如繳交第二份或第三份驗證時，也請提供新的D-2。
:::

**a.繳交資料**
繪製9/9-9/10 8 time steps的水平風速(u10)的RMSE與ACC，檔名請用**XX隊_FCN_F-1.jpg**與**XX隊FCN_F-2.jpg**

**b.繳交範例**
![](https://hackmd.io/_uploads/HkL3Ur8c2.png)
![](https://hackmd.io/_uploads/SJI3IB852.png)




## 參考資料
[1] 李宗融、黃紹欽、王安翔、黃柏誠、于宜強, "2022 年軒嵐諾與梅花颱風氣象分析" ,國家災害防救科技中心災害防救電子報第 209 期 (2022)

[2] Pathak, Jaideep, et al. “FourCastNet : A global data-driven high-resolution weather model using adaptive Fourier neural operators” arXiv preprint arXiv:2202.11214 (2022).

[3] Hersbach, Hans, et al. “The ERA5 global reanalysis” Quarterly Journal of the Royal Meteorological Society (2020).

[4] Hersbach, Hans, et al. “ERA5 hourly data on pressure levels from 1959 to present. Copernicus Climate Change Service (C3S) Climate Data Store (CDS).” , 10.24381/cds.bd0915c6 (2018)

[5] Hersbach, Hans et al., “ERA5 hourly data on single levels from 1959 to present. Copernicus Climate Change Service (C3S) Climate Data Store (CDS).” , 10.24381/cds.adbb2d47 (2018)

