## 簡介與題目說明 **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)