轉角遇上Volcano,看HPC如何應用在氣象行業
摘要:高效能運算(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)包含如下部分:
- PBS:Protable Batch System,資源管理器,負責管理叢集中所有節點的資源。除了PBS意外,常用的資源管理系統還有Slurm,LSF等
- Maui:第三方任務排程器,支援資源預留,支援各種複雜的優先順序策略,支援搶佔機制等。資源管理器中內建了預設的任務調取器,但功能往往比較簡單
- OpenMPI:上層通訊環境,兼顧通訊庫,編譯,分散式啟動任務的功能
上述三部分中,PBS和Maui對於使用者來說是完全透明的,使用者只需要按照PBS提供的方式提交作業即可,不需要了解內部細節。而OpenMPI則需要使用者進行相關了解,來編寫能夠平行計算的應用。
下面以mpirun -np 4 ./mpi_hello_world為例介紹mpi作業是如何執行的:
- 呼叫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流程:
該處理流程包括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並行運算來提升計算速度,例如
上圖中wrfinput_d0X和wrfbdy_d0X為real.exe的運算結果,wrf.exe以該結果為輸入進行模擬演算,生成最終的氣象模擬結果wrfout_dxx_yyyy-mm-dd_hh:mm:ss,並由後處理系統進行驗證展示。
後處理系統
後處理系統用來驗證和顯示核心模擬系統的計算結果。主要由各種第三方影像和驗證工具組成。下圖展示了Conus 2.5km算例中各個地區相對溼度的模擬預報結果:
Conus 2.5km是指美國本土氣象資料,解析度為2.5km(將整個區域分成一個個2.5km*2.5km*2.5km的方格,每個方格中的氣象資訊被認為是完全一致的)。
HPC on Volcano
上面介紹了一個HPCC包括資源管理器,排程器和mpi平行計算庫三部分,其中資源管理器由Kubernetes負責,排程器由Volcano負責。
在Kubernetes+Volcano環境中執行HPC應用,本質上就是在容器中執行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:
作業執行完畢:
檢視master pod的結果
透過上述執行結果可以看出,在作業執行結束後,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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 氣象氣候應用在Intel最新處理器Icelake上的效能測評Intel
- 從歷史天氣預報 API 看氣象大資料的商業價值API大資料
- 行業與氣象資料的相關性探索行業
- 介紹金融資料分析技術如何應用在銀行業營銷部門行業
- 雷達氣象學(4)——雷達引數和雷達氣象方程
- 雷達氣象學(7)——反射率因子圖分析(氣象回波篇)反射
- 學在 VC ,用在 VB - 透過語言看 "世界" (轉)
- 精益六西格瑪能用在IT行業?行業
- 當金融行業遇上開源技術行業
- 氣象相關基本知識
- 氣象中的常用程式碼
- 2024,氣象院排行
- 投資者如何看今日的遊戲行業?遊戲行業
- 農業氣象綜合監測站:智慧農業新時代的領航者
- “物聯網”可以運用在哪些行業?行業
- 如何將 Elixir 模組風格應用在 JS 中JS
- 【行業觀察】國產資料庫亂象行業資料庫
- 氣象資料隨時隨地:讓天氣預報API為您的應用提供精準的天氣資訊API
- 站在供應鏈全域性視角來了解服裝行業行業
- 貼片電感用在裝潢行業中gujing行業
- 中國氣象局:中國氣象投入產出比1:50 牽手阿里雲挖掘氣象大資料阿里大資料
- 什麼是MES製造執行管理系統?主要應用在哪些行業?行業
- 油氣行業敏捷研發行業敏捷
- 上帝視角看 TypeScriptTypeScript
- 精益生產培訓如何應用在員工流失率高的企業
- 農業氣象綜合監測站:農業智慧化革命的強力助推器
- LoRa氣象墒情遠端監測,助力智慧農業管理升效
- 【UWP開發】如何判斷UWP應用在PC還是在xbox上執行?
- 普華永道:商業領袖如何應對氣候變化
- 好未來吳鈞澤:當 OpenResty 遇上教育行業REST行業
- 世界銀行:教育業氣候行動
- 雲和人工智烈日當頭,華為HPC解決方案如何應對?
- 海康威視科技助力氣象智慧觀測
- weathermap網路氣象圖流量的計算
- 氣象資料查詢平臺設計
- JVM視角看物件建立JVM物件
- 訂單視角看支付
- 張馳諮詢:六西格瑪培訓如何完美運用在新能源汽車行業的行業