轉(zhuǎn)角遇上Volcano,看HPC如何應(yīng)用在氣象行業(yè)

      網(wǎng)友投稿 871 2022-05-30

      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容器列表

      轉(zhuǎn)角遇上Volcano,看HPC如何應(yīng)用在氣象行業(yè)

      # 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)容。

      上一篇:5G元年4G新建基站竟創(chuàng)歷史新高,一文帶你看移動通信10年背后的數(shù)據(jù)
      下一篇:excel表格做分區(qū)統(tǒng)計的方法是什么
      相關(guān)文章
      中文字幕一精品亚洲无线一区| 青青青亚洲精品国产| 中文字幕亚洲第一| 亚洲片国产一区一级在线观看 | 亚洲专区在线视频| 久久青青草原亚洲AV无码麻豆| 国产亚洲精久久久久久无码| 亚洲精品国产品国语在线| 亚洲人成网77777亚洲色| 亚洲成av人影院| 亚洲国产精品国自产电影| 亚洲人成影院在线| 亚洲精品无码久久久久久久| 亚洲精品亚洲人成在线麻豆| 亚洲国产综合人成综合网站00| 亚洲国产精品日韩在线| 亚洲丝袜中文字幕| 国产AV旡码专区亚洲AV苍井空 | 久久精品亚洲综合| 亚洲乱亚洲乱淫久久| 亚洲视频欧洲视频| 亚洲制服丝袜在线播放| 亚洲一区二区三区乱码在线欧洲| 亚洲一卡2卡3卡4卡5卡6卡| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲高清成人一区二区三区| 久久精品国产亚洲Aⅴ香蕉| 国产亚洲色婷婷久久99精品| 亚洲国产综合专区在线电影| 亚洲成a人片毛片在线| 亚洲中文无码永久免| 国产亚洲精品免费| 国产成人亚洲精品狼色在线| 亚洲av日韩av激情亚洲| 亚洲成av人片不卡无码| 亚洲日韩国产欧美一区二区三区| 麻豆亚洲AV成人无码久久精品| 中文字幕精品亚洲无线码一区 | 亚洲爆乳精品无码一区二区| 亚洲国产一区二区三区| 亚洲精品卡2卡3卡4卡5卡区|