轉角遇上Volcano,看HPC如何應用在氣象行業

else發表於2021-09-11
摘要:高效能運算(HPC)在各個領域都有廣泛的應用。本文透過典型的HPC應用WRF,介紹了HPC應用在Kubernetes+Volcano上執行方式。

Kubernetes已經成為雲原生應用編排、管理的事實標準,越來越多的應用選擇向K8S遷移。HPC作為傳統的分散式計算模式,在很多領域都有著廣泛的應用,很多使用者都希望能將HPC應用遷移到容器中執行,透過Kubernetes強大的功能來進行作業管理。Volcano作為CNCF首個面向批次計算的分散式排程系統,也支援MPI作業的排程,本文以傳統的HPC應用WRF為例,探討Volcano是如何支援HPC應用的。

HPC簡介

HPC是High Performance Computing(高效能運算)的縮寫。平時提到的HPC,一般指代高效能運算機群(HPCC),它將大量的計算機軟體/硬體整合起來,將大的計算作業分解成一個個小部分,透過平行計算的方式加以解決。HPC高效能運算在CAE模擬、動漫渲染、物理化學、石油勘探、生命科學、氣象環境等領域有廣泛的應用。

一般來說,高效能運算叢集(HPCC)包含如下部分:

轉角遇上Volcano,看HPC如何應用在氣象行業

  • PBS:Protable Batch System,資源管理器,負責管理叢集中所有節點的資源。除了PBS意外,常用的資源管理系統還有Slurm,LSF等
  • Maui:第三方任務排程器,支援資源預留,支援各種複雜的優先順序策略,支援搶佔機制等。資源管理器中內建了預設的任務調取器,但功能往往比較簡單
  • OpenMPI:上層通訊環境,兼顧通訊庫,編譯,分散式啟動任務的功能

上述三部分中,PBS和Maui對於使用者來說是完全透明的,使用者只需要按照PBS提供的方式提交作業即可,不需要了解內部細節。而OpenMPI則需要使用者進行相關了解,來編寫能夠平行計算的應用。

下面以mpirun -np 4 ./mpi_hello_world為例介紹mpi作業是如何執行的:

轉角遇上Volcano,看HPC如何應用在氣象行業

  • 呼叫openmpi或者其他mpi的庫來編寫原始碼,例子裡就是輸出hello world字串了
  • 使用支援MPI的編譯器來編譯出可執行程式mpi_hello_world
  • 將mpi_hello_world分發到各個節點,也可以透過共享檔案系統來實現對mpi_hello_world的訪問
  • 執行mpirun來並行執行mpi_hello_world

WRF簡介

WRF是Weather Research and Forecasting Model(天氣研究和預報模型)的簡稱,是一種比較常見的HPC應用。WRF是一種中尺度數值天氣預報系統,設計用於大氣研究和業務預報應用,可以根據實際的大氣條件或理想化的條件進行模擬。

由於WRF包含多個模組,因此處理流程可能不盡相同,這裡僅以WPS和WRF這兩個模組為例介紹一下完整的WRF流程:

轉角遇上Volcano,看HPC如何應用在氣象行業

該處理流程包括4部分:

  • 外部資料來源
  • 前處理系統(WPS)
  • 核心模擬系統(WRF)
  • 後處理系統

外部資料來源

包含靜態地理資料,網路資料等。靜態地理資料可以理解為某區域內的地理資訊,例如山川,河流,湖泊,森林等等。網路資料是某區域內的氣象環境資料,例如氣溫,風速風向,空氣溼度,降雨量等等。

前處理系統(WPS,WRF Pre-processing System)

前處理系統用於載入地理和氣象資料,對氣象資料進行插值,為WRF提供輸入資料。該部分包含3個程式:

  • geogrid.exe:定義模型投影、區域範圍,巢狀關係,對地表引數進行插值,處理地形資料和網格資料
  • ungrib.exe:從grib資料中提取所需要的氣象引數
  • metgrid.exe:將氣象引數插值到模擬區域

經過這3個程式處理後,生成可以用來進行氣象模擬的資料。這3個處理程式目前不支援mpi並行運算。

核心模擬系統(WRF)

核心模擬系統對前處理系統生成的氣象資訊進行模擬和預報,是WRF的核心模組。該部分包含2個程式:

  • real.exe:初始化實際氣象資料
  • wrf.exe:模擬及預報結果

real.exe和wrf.exe可以透過mpi並行運算來提升計算速度,例如

轉角遇上Volcano,看HPC如何應用在氣象行業

上圖中wrfinput_d0X和wrfbdy_d0X為real.exe的運算結果,wrf.exe以該結果為輸入進行模擬演算,生成最終的氣象模擬結果wrfout_dxx_yyyy-mm-dd_hh:mm:ss,並由後處理系統進行驗證展示。

後處理系統

後處理系統用來驗證和顯示核心模擬系統的計算結果。主要由各種第三方影像和驗證工具組成。下圖展示了Conus 2.5km算例中各個地區相對溼度的模擬預報結果:

轉角遇上Volcano,看HPC如何應用在氣象行業

Conus 2.5km是指美國本土氣象資料,解析度為2.5km(將整個區域分成一個個2.5km*2.5km*2.5km的方格,每個方格中的氣象資訊被認為是完全一致的)。

HPC on Volcano

轉角遇上Volcano,看HPC如何應用在氣象行業

上面介紹了一個HPCC包括資源管理器,排程器和mpi平行計算庫三部分,其中資源管理器由Kubernetes負責,排程器由Volcano負責。

在Kubernetes+Volcano環境中執行HPC應用,本質上就是在容器中執行HPC作業,示意圖如下:

轉角遇上Volcano,看HPC如何應用在氣象行業

將執行的容器分為Master容器和Worker容器兩種。Master容器負責啟動mpirun/mpiexec命令,Worker容器負責執行真正的計算作業。

因此Volcano為了支援MPI作業執行,新增了如下功能:

  • Volcano job支援定義多個pod模板,能夠同時定義master pod和worker pod
  • 支援 Gang scheduling,保證作業中所有的pod能夠同時啟動
  • Master/Worker pod內部主機IP對映
  • Master/Workerpod之間ssh免密登入
  • 作業生命週期管理

Volcano mpi作業配置mpi_sample.yaml:

apiVersion: batch.Volcano.sh/v1alpha1
kind: Job
metadata:
 name: mpi-job
 labels:
 # 根據業務需要設定作業型別
 "Volcano.sh/job-type": "MPI"
spec:
 # 設定最小需要的服務 (小於總replicas數)
 # 這裡等於mpimaster和mpiworker的總數
 minAvailable: 3
  # 指定排程器為Volcano
 schedulerName: Volcano
 plugins:
 # 提供 ssh 免密認證
 ssh: []
 # 提供執行作業所需要的網路資訊,hosts檔案,headless service等
 svc: []
 # 如果有pod被 殺死,重啟整個作業
 policies:
 - event: PodEvicted
 action: RestartJob
 tasks:
 - replicas: 1
 name: mpimaster
 # 當 mpiexec 結束,認為整個mpi作業結束
 policies:
 - event: TaskCompleted
 action: CompleteJob
 template:
 spec:
 # Volcano的資訊會統一放到 /etc/Volcano 目錄下
 containers:
 # master容器中
  # 1. 啟動sshd服務
  # 2. 透過/etc/Volcano/mpiworker.host獲取mpiworker容器列表
 # 3. 執行mpirun/mpiexec
 - command:
 - /bin/sh
 - -c
 - |
 MPI_HOST=`cat /etc/Volcano/mpiworker.host | tr "n" ","`;
 mkdir -p /var/run/sshd; /usr/sbin/sshd;
 mpiexec --allow-run-as-root --host ${MPI_HOST} -np 2 mpi_hello_world;
 image: Volcanosh/example-mpi:0.0.1
 imagePullPolicy: IfNotPresent
 name: mpimaster
 ports:
 - containerPort: 22
 name: mpijob-port
 workingDir: /home
  resources:
 requests:
 cpu: "100m"
 memory: "1024Mi"
 limits:
 cpu: "100m"
 memory: "1024Mi"
 restartPolicy: OnFailure
 imagePullSecrets:
 - name: default-secret
 - replicas: 2
 name: mpiworker
 template:
 spec:
 containers:
  # worker容器中只需要啟動sshd服務
 - command:
 - /bin/sh
 - -c
 - |
 mkdir -p /var/run/sshd; /usr/sbin/sshd -D;
 image: Volcanosh/example-mpi:0.0.1
 imagePullPolicy: IfNotPresent
 name: mpiworker
 ports:
 - containerPort: 22
 name: mpijob-port
 workingDir: /home
 resources:
 requests:
 cpu: "100m"
 memory: "2048Mi"
 limits:
 cpu: "100m"
  memory: "2048Mi"
 restartPolicy: OnFailure
 imagePullSecrets:
- name: default-secret

提交mpi Volcano job:

轉角遇上Volcano,看HPC如何應用在氣象行業

作業執行完畢:

轉角遇上Volcano,看HPC如何應用在氣象行業

檢視master pod的結果

轉角遇上Volcano,看HPC如何應用在氣象行業

透過上述執行結果可以看出,在作業執行結束後,Volcano只清理worker pod,保留master pod,這樣使用者kubectl命令獲取執行結果。

此外,由於網路構建可能會出現延遲,在作業執行開始時,master pod會出現連線worker pod失敗的情況。對於這種情況,Volcano會自動重啟master pod,保證作業能夠正確執行。

透過以上示例我們可以看出,Volcano想要執行WRF作業的話,理論上需要將其中的mpi_hello_world替換為real.exe/wrf.exe,此外,使用者還需要進行如下準備:

  • 自建docker images,包含完整的WRF執行環境
  • 將計算所需要的資料(原生資料或者中間結果資料)掛載到相應的容器中

這樣就能在Kubernetes+Volcano上執行氣象模擬作業了。

總結

高效能運算(HPC)在各個領域都有廣泛的應用。本文透過典型的HPC應用WRF,介紹了HPC應用在Kubernetes+Volcano上執行方式。

華為雲社群作者|金喆

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2318/viewspace-2796215/,如需轉載,請註明出處,否則將追究法律責任。

相關文章