轉(zhuǎn)角遇上Volcano,看HPC如何應(yīng)用在氣象行業(yè)
Kubernetes已經(jīng)成為云原生應(yīng)用編排、管理的事實標(biāo)準(zhǔn),越來越多的應(yīng)用選擇向K8S遷移。HPC作為傳統(tǒng)的分布式計算模式,在很多領(lǐng)域都有著廣泛的應(yīng)用,很多用戶都希望能將HPC應(yīng)用遷移到容器中運行,通過Kubernetes強(qiáng)大的功能來進(jìn)行作業(yè)管理。Volcano作為CNCF首個面向批量計算的分布式調(diào)度系統(tǒng),也支持MPI作業(yè)的調(diào)度,本文以傳統(tǒng)的HPC應(yīng)用WRF為例,探討Volcano是如何支持HPC應(yīng)用的。
HPC簡介
HPC是High Performance Computing(高性能計算)的縮寫。平時提到的HPC,一般指代高性能計算機(jī)群(HPCC),它將大量的計算機(jī)軟件/硬件整合起來,將大的計算作業(yè)分解成一個個小部分,通過并行計算的方式加以解決。HPC高性能計算在CAE仿真、動漫渲染、物理化學(xué)、石油勘探、生命科學(xué)、氣象環(huán)境等領(lǐng)域有廣泛的應(yīng)用。
一般來說,高性能計算集群(HPCC)包含如下部分:
PBS:Protable Batch System,資源管理器,負(fù)責(zé)管理集群中所有節(jié)點的資源。除了PBS意外,常用的資源管理系統(tǒng)還有Slurm,LSF等
Maui:第三方任務(wù)調(diào)度器,支持資源預(yù)留,支持各種復(fù)雜的優(yōu)先級策略,支持搶占機(jī)制等。資源管理器中內(nèi)置了默認(rèn)的任務(wù)調(diào)取器,但功能往往比較簡單
OpenMPI:上層通信環(huán)境,兼顧通信庫,編譯,分布式啟動任務(wù)的功能
上述三部分中,PBS和Maui對于用戶來說是完全透明的,用戶只需要按照PBS提供的方式提交作業(yè)即可,不需要了解內(nèi)部細(xì)節(jié)。而OpenMPI則需要用戶進(jìn)行相關(guān)了解,來編寫能夠并行計算的應(yīng)用。
下面以mpirun -np 4 ./mpi_hello_world為例介紹mpi作業(yè)是如何運行的:
調(diào)用openmpi或者其他mpi的庫來編寫源代碼,例子里就是輸出hello world字符串了
使用支持MPI的編譯器來編譯出可執(zhí)行程序mpi_hello_world
將mpi_hello_world分發(fā)到各個節(jié)點,也可以通過共享文件系統(tǒng)來實現(xiàn)對mpi_hello_world的訪問
運行mpirun來并行執(zhí)行mpi_hello_world
WRF簡介
WRF是Weather Research and Forecasting Model(天氣研究和預(yù)報模型)的簡稱,是一種比較常見的HPC應(yīng)用。WRF是一種中尺度數(shù)值天氣預(yù)報系統(tǒng),設(shè)計用于大氣研究和業(yè)務(wù)預(yù)報應(yīng)用,可以根據(jù)實際的大氣條件或理想化的條件進(jìn)行模擬。
由于WRF包含多個模塊,因此處理流程可能不盡相同,這里僅以WPS和WRF這兩個模塊為例介紹一下完整的WRF流程:
該處理流程包括4部分:
外部數(shù)據(jù)源
前處理系統(tǒng)(WPS)
核心模擬系統(tǒng)(WRF)
后處理系統(tǒng)
外部數(shù)據(jù)源
包含靜態(tài)地理數(shù)據(jù),網(wǎng)絡(luò)數(shù)據(jù)等。靜態(tài)地理數(shù)據(jù)可以理解為某區(qū)域內(nèi)的地理信息,例如山川,河流,湖泊,森林等等。網(wǎng)絡(luò)數(shù)據(jù)是某區(qū)域內(nèi)的氣象環(huán)境數(shù)據(jù),例如氣溫,風(fēng)速風(fēng)向,空氣濕度,降雨量等等。
前處理系統(tǒng)(WPS,WRF Pre-processing System)
前處理系統(tǒng)用于載入地理和氣象數(shù)據(jù),對氣象數(shù)據(jù)進(jìn)行插值,為WRF提供輸入數(shù)據(jù)。該部分包含3個程序:
exe:定義模型投影、區(qū)域范圍,嵌套關(guān)系,對地表參數(shù)進(jìn)行插值,處理地形資料和網(wǎng)格數(shù)據(jù)
exe:從grib數(shù)據(jù)中提取所需要的氣象參數(shù)
exe:將氣象參數(shù)插值到模擬區(qū)域
經(jīng)過這3個程序處理后,生成可以用來進(jìn)行氣象模擬的數(shù)據(jù)。這3個處理程序目前不支持mpi并行運算。
核心模擬系統(tǒng)(WRF)
核心模擬系統(tǒng)對前處理系統(tǒng)生成的氣象信息進(jìn)行模擬和預(yù)報,是WRF的核心模塊。該部分包含2個程序:
exe:初始化實際氣象數(shù)據(jù)
exe:模擬及預(yù)報結(jié)果
real.exe和wrf.exe可以通過mpi并行運算來提升計算速度,例如
上圖中wrfinput_d0X和wrfbdy_d0X為real.exe的運算結(jié)果,wrf.exe以該結(jié)果為輸入進(jìn)行模擬演算,生成最終的氣象模擬結(jié)果wrfout_dxx_yyyy-mm-dd_hh:mm:ss,并由后處理系統(tǒng)進(jìn)行驗證展示。
后處理系統(tǒng)
后處理系統(tǒng)用來驗證和顯示核心模擬系統(tǒng)的計算結(jié)果。主要由各種第三方圖像和驗證工具組成。下圖展示了Conus 2.5km算例中各個地區(qū)相對濕度的模擬預(yù)報結(jié)果:
Conus 2.5km是指美國本土氣象數(shù)據(jù),分辨率為2.5km(將整個區(qū)域分成一個個2.5km*2.5km*2.5km的方格,每個方格中的氣象信息被認(rèn)為是完全一致的)。
HPC on Volcano
上面介紹了一個HPCC包括資源管理器,調(diào)度器和mpi并行計算庫三部分,其中資源管理器由Kubernetes負(fù)責(zé),調(diào)度器由Volcano負(fù)責(zé)。
在Kubernetes+Volcano環(huán)境中運行HPC應(yīng)用,本質(zhì)上就是在容器中運行HPC作業(yè),示意圖如下:
將運行的容器分為Master容器和Worker容器兩種。Master容器負(fù)責(zé)啟動mpirun/mpiexec命令,Worker容器負(fù)責(zé)運行真正的計算作業(yè)。
因此Volcano為了支持MPI作業(yè)運行,添加了如下功能:
Volcano job支持定義多個pod模板,能夠同時定義master pod和worker pod
支持 Gang scheduling,保證作業(yè)中所有的pod能夠同時啟動
Master/Worker pod內(nèi)部主機(jī)IP映射
Master/Workerpod之間ssh免密登錄
作業(yè)生命周期管理
Volcano mpi作業(yè)配置mpi_sample.yaml:
apiVersion: batch.Volcano.sh/v1alpha1
kind: Job
metadata:
name: mpi-job
labels:
# 根據(jù)業(yè)務(wù)需要設(shè)置作業(yè)類型
"Volcano.sh/job-type": "MPI"
spec:
# 設(shè)置最小需要的服務(wù) (小于總replicas數(shù))
# 這里等于mpimaster和mpiworker的總數(shù)
minAvailable: 3
# 指定調(diào)度器為Volcano
schedulerName: Volcano
plugins:
# 提供 ssh 免密認(rèn)證
ssh: []
# 提供運行作業(yè)所需要的網(wǎng)絡(luò)信息,hosts文件,headless service等
svc: []
# 如果有pod被 殺死,重啟整個作業(yè)
policies:
- event: PodEvicted
action: RestartJob
tasks:
- replicas: 1
name: mpimaster
# 當(dāng) mpiexec 結(jié)束,認(rèn)為整個mpi作業(yè)結(jié)束
policies:
- event: TaskCompleted
action: CompleteJob
template:
spec:
# Volcano的信息會統(tǒng)一放到 /etc/Volcano 目錄下
containers:
# master容器中
# 1. 啟動sshd服務(wù)
# 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服務(wù)
- 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:
作業(yè)執(zhí)行完畢:
查看master pod的結(jié)果
通過上述執(zhí)行結(jié)果可以看出,在作業(yè)執(zhí)行結(jié)束后,Volcano只清理worker pod,保留master pod,這樣用戶kubectl命令獲取執(zhí)行結(jié)果。
此外,由于網(wǎng)絡(luò)構(gòu)建可能會出現(xiàn)延遲,在作業(yè)運行開始時,master pod會出現(xiàn)連接worker pod失敗的情況。對于這種情況,Volcano會自動重啟master pod,保證作業(yè)能夠正確運行。
通過以上示例我們可以看出,Volcano想要運行WRF作業(yè)的話,理論上需要將其中的mpi_hello_world替換為real.exe/wrf.exe,此外,用戶還需要進(jìn)行如下準(zhǔn)備:
自建docker images,包含完整的WRF運行環(huán)境
將計算所需要的數(shù)據(jù)(原生數(shù)據(jù)或者中間結(jié)果數(shù)據(jù))掛載到相應(yīng)的容器中
這樣就能在Kubernetes+Volcano上運行氣象模擬作業(yè)了。
總結(jié)
高性能計算(HPC)在各個領(lǐng)域都有廣泛的應(yīng)用。本文通過典型的HPC應(yīng)用WRF,介紹了HPC應(yīng)用在Kubernetes+Volcano上運行方式。
Kubernetes 云原生 容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。