摘要:?E-HPC 低成本計(jì)算方案 E-HPC作為阿里云上的云超算產(chǎn)品將HPCaaS公共云服務(wù)提供給客戶,將公共云上資源彈性優(yōu)勢,高性能的優(yōu)勢,計(jì)算資源的多樣性等優(yōu)勢提供給HPC用戶,如果HPC用戶追求極致性能的HPC集群,我們可以提供SCC,裸金屬服務(wù)器,EGS異構(gòu)計(jì)算資源。
E-HPC 低成本計(jì)算方案
E-HPC作為阿里云上的云超算產(chǎn)品將HPCaaS公共云服務(wù)提供給客戶,將公共云上資源彈性優(yōu)勢,高性能的優(yōu)勢,計(jì)算資源的多樣性等優(yōu)勢提供給HPC用戶,如果HPC用戶追求極致性能的HPC集群,我們可以提供SCC,裸金屬服務(wù)器,EGS異構(gòu)計(jì)算資源。對于成本相對比較敏感的客戶, E-HPC提供自動伸縮+搶占式實(shí)例+斷點(diǎn)續(xù)算低成本計(jì)算方案,從而可以將云上普惠的高性能計(jì)算服務(wù)提供給絕大部分HPC用戶:
搶占式實(shí)例保證用戶的計(jì)算資源可以控制在很低的成本之下,關(guān)于搶占式實(shí)例的詳細(xì)介紹,參考搶占式實(shí)例
自動伸縮可以幫助用戶自動擴(kuò)容,無需用戶干預(yù),用戶只需要提交作業(yè),設(shè)定搶占式實(shí)例的競價(jià)策略, 關(guān)于E-HPC的自動伸縮,參考E-HPC自動伸縮
斷點(diǎn)續(xù)算可以保證作業(yè)被中斷之后,有新的競價(jià)實(shí)例擴(kuò)容成功之后,作業(yè)可以繼續(xù)運(yùn)算,而不是重新開始運(yùn)算。
目前,在HPC領(lǐng)域,有很多研究關(guān)于MPI支持?jǐn)帱c(diǎn)續(xù)算(checkpoint/restart)技術(shù),MVAPICH2基于BLCR實(shí)現(xiàn)checkpoint/restart,并提供checkpoint文件管理;OpenMPI設(shè)計(jì)了模塊化的checkpoint/restart機(jī)制,并有基于BLCR的實(shí)現(xiàn)。HPC有些領(lǐng)域的應(yīng)用本身是支持?jǐn)帱c(diǎn)續(xù)算的,例如LAMMPS, GROMACS,渲染應(yīng)用里的V-Ray也是支持?jǐn)帱c(diǎn)續(xù)算的。HPC常用的調(diào)度器集群也對斷點(diǎn)續(xù)算有集成支持,Slurm與BLCR集成,也可以直接使用SCR等checkpoint系統(tǒng)對作業(yè)進(jìn)行斷點(diǎn)續(xù)算。LSF支持作業(yè)檢查點(diǎn)和恢復(fù)執(zhí)行。
具體案例
以下將以案例的形式介紹如何在E-HPC進(jìn)行低成本計(jì)算:
LAMMPS在E-HPC上的計(jì)算
GROMACS GPU在E-HPC上的計(jì)算
用戶自己開發(fā)的MPI程序如何在E-HPC上低成本計(jì)算
創(chuàng)建E-HPC集群
通過E-HPC控制臺?創(chuàng)建集群
選擇“競價(jià)實(shí)例”,設(shè)定價(jià)格策略,系統(tǒng)自動出價(jià)或者設(shè)置最高價(jià)格
選擇軟件包,例如LAMMPS, GROMACS-GPU
集群創(chuàng)建成功之后,創(chuàng)建用戶,用于提交作業(yè)
案例一: LAMMPS
算例輸入文件
本文以3d Lennard-Jones melt為例
修改算例輸入文件如下, 設(shè)置每迭代100步生成一個checkpoint文件
#?3d?Lennard-Jones?meltunits???????????ljatom_style??????atomiclattice?????????fcc?0.8442region??????????box?block?0?20?0?20?0?20create_box??????1?boxcreate_atoms????1?boxmass????????????1?1.0velocity????????all?create?1.44?87287?loop?geompair_style??????lj/cut?2.5pair_coeff??????1?1?1.0?1.0?2.5neighbor????????0.3?binneigh_modify????delay?5?every?1fix?????????????1?all?nvedump?1?all?xyz?100?/home/testuser1/sample.xyzrun?????????????10000?every?100?"write_restart?/home/testuser1/lennard.restart"
準(zhǔn)備從checkpoint續(xù)算的輸入文件
#?3d?Lennard-Jones?meltread_restart?lennard.restart run?????????????10000?every?100?"write_restart?/home/testuser1/lennard.restart"
準(zhǔn)備pbs的作業(yè)腳本 job.pbs, 根據(jù)是否存在checkpoint文件決定使用哪個輸入文件
\#!/bin/sh\#PBS?-l?ncpus=1\#PBS?-o?lammps_pbs.log\#PBS?-j?oeexport?MODULEPATH=/opt/ehpcmodulefiles/module?load?lammps-openmpi/31Mar17module?load?openmpi/1.10.7if?[?!?-e?"/home/testuser1/lennard.restart"?];?then ??echo?"run?at?the?beginning" ??mpirun?lmp?-in?./lj.inelse ??echo?"run?from?the?last?checkpoint" ??mpirun?lmp?-in?./lj.restart.infi
提交作業(yè),運(yùn)行期間無中斷
qsub job.pbs
作業(yè)運(yùn)行結(jié)束,查看作業(yè)信息, 可以看到作業(yè)一共運(yùn)行了5分28秒
提交作業(yè),使用自動伸縮+競價(jià)實(shí)例+斷點(diǎn)續(xù)算模式
在E-HPC控制臺設(shè)置集群自動伸縮策略,選擇擴(kuò)容競價(jià)實(shí)例,競價(jià)策略會系統(tǒng)自動出價(jià)
待所有計(jì)算節(jié)點(diǎn)釋放之后,提交作業(yè) (先刪除前一個作業(yè)的續(xù)算文件lennard.restart)
job.pbs
兩分鐘左右可以看到自動擴(kuò)容競價(jià)實(shí)例
作業(yè)運(yùn)行1分鐘左右,在ECS控制臺釋放計(jì)算節(jié)點(diǎn)對應(yīng)的競價(jià)實(shí)例,模擬競價(jià)實(shí)例被釋放 (實(shí)際當(dāng)中,競價(jià)實(shí)例會保證至少可用1個小時),查看作業(yè)運(yùn)行信息,看到作業(yè)已經(jīng)運(yùn)行1分47秒
隨后作業(yè)會回到queued狀態(tài),等待可用計(jì)算資源
自動伸縮服務(wù)會嘗試?yán)^續(xù)擴(kuò)容競價(jià)實(shí)例直到擴(kuò)容成功,然后作業(yè)會繼續(xù)執(zhí)行
作業(yè)執(zhí)行成功,查看作業(yè)信息,作業(yè)執(zhí)行了3分56秒,可以看出是從斷點(diǎn)的地方續(xù)算的
由于迭代次數(shù)比較少,結(jié)果可視化如下
主要是以用例的方式介紹了如何在E-HPC上低成本的計(jì)算LAMMPS算例,最后我們比較一下成本,本用例用的最小ECS實(shí)例規(guī)格ecs.n1.tiny, 搶占式實(shí)例最低價(jià)格為按量的1折(不同規(guī)格折扣會不同,也隨時間實(shí)時變化)
計(jì)算時間增加百分比計(jì)算成本降低百分比LAMMPS作業(yè)4.57%↑88.30%↓
可以看出在運(yùn)算總時間增加不大的前提下,計(jì)算成本大大降低,當(dāng)然在作業(yè)提交到最終運(yùn)行結(jié)束的總時長會比使用按量實(shí)例計(jì)算要長,所以很適合從時間上來說并不緊迫的作業(yè)。
案例二:GROMACS GPU
GROMACS(全稱:英語:GROningen MAchine,全稱格羅寧根華訊模擬體系)是一套分子動力學(xué)模擬程序包,主要用來模擬研究蛋白質(zhì)、脂質(zhì)、核酸等生物分子的性質(zhì)。
創(chuàng)建E-HPC集群的時候,硬件配置階段計(jì)算節(jié)點(diǎn)實(shí)例配置選擇ecs.gn5-c4g1.xlarge (4核,30GB,1塊P100);軟件配置階段選中GROMACS-GPU軟件包
算例: 水分子運(yùn)動
本算例為模擬大量水分子在給定空間、溫度內(nèi)的運(yùn)動過程
下載water 算例
可以從GROMACS ftp直接下載解壓
wget?http://ftp.gromacs.org/pub/benchmarks/water_GMX50_bare.tar.gz tar?xzvf?water_GMX50_bare.tar.gz
在算例輸入文件里設(shè)置迭代次數(shù)
vi?water-cut1.0_GMX50_bare/1536/pme.mdp 設(shè)置nsteps=80000
算例的PBS作業(yè)腳本
#!/bin/sh#PBS?-l?ncpus=4,mem=24gb#PBS?-j?oeexport?MODULEPATH=/opt/ehpcmodulefiles/ module?load?cuda-toolkit/9.0 module?load?gromacs-gpu/2018.1 module?load?openmpi/3.0.0cd?/home/testuser1/test/water-cut1.0_GMX50_bare/1536 gmx_mpi?grompp?-f?pme.mdp?-c?conf.gro?-p?topol.top?-o?topol_pme.tpr mpirun?-np?1?gmx_mpi?mdrun?-ntomp?4?-noconfout?-v?-pin?on?-nb?gpu?-s?topol_pme.tpr?-cpi?state.cpt?-cpt?2?-append
參數(shù)說明
-cpi?選項(xiàng)用于指定checkpoint文件名,默認(rèn)文件名是state.cpt-cpt?選項(xiàng)指定checkpoint文件生成和更新間隔時間,用于下一次續(xù)算,單位是分鐘-append?選項(xiàng)指定續(xù)算產(chǎn)生的結(jié)果會繼續(xù)寫入先前的輸出文件注意:在輸入文件里面指定迭代次數(shù),表示當(dāng)前作業(yè)總的迭代次數(shù) 不要在命令行執(zhí)行迭代次數(shù),?例如 mpirun?-np?1?gmx_mpi?mdrun?-ntomp?4?-noconfout??-nsteps=80000?-v?-pin?on?-nb?gpu?-s?topol_pme.tpr?-cpi?state.cpt?-cpt?2?-append 如果在命令行指定nsteps,表示的是一次執(zhí)行過程中的總迭代次數(shù)。 會導(dǎo)致每次續(xù)算的時候都會繼續(xù)執(zhí)行總的迭代次數(shù),而不是多次續(xù)算一共執(zhí)行的迭代次數(shù)。
運(yùn)行作業(yè)
首先完整執(zhí)行一次該算例的作業(yè)(不發(fā)生斷點(diǎn)再續(xù)算的情況) qsub job.pbs
GROMACS 斷點(diǎn)續(xù)算
下面模擬在運(yùn)算過程中節(jié)點(diǎn)會被釋放導(dǎo)致斷點(diǎn)續(xù)算的情形,
首先提交作業(yè) qsub job.pbs
自動伸縮服務(wù)會自動擴(kuò)容一個ecs.gn5-c4g1.xlarge節(jié)點(diǎn),觀察作業(yè)使用的CPU時間 qstat -f 大概使用1個小時左右CPU時間的時候,登錄ECS控制臺,把計(jì)算節(jié)點(diǎn)對應(yīng)的EGS實(shí)例強(qiáng)行釋放,觀察一下當(dāng)前作業(yè)的信息
由于沒有可用計(jì)算資源,作業(yè)會進(jìn)入queued狀態(tài),自動伸縮服務(wù)繼續(xù)嘗試擴(kuò)容搶占式實(shí)例
實(shí)例擴(kuò)容成功,作業(yè)繼續(xù)執(zhí)行,直到運(yùn)算完畢
比較作業(yè)計(jì)算時間和計(jì)算成本
下表列出了斷點(diǎn)續(xù)算 (使用搶占式實(shí)例)和非斷點(diǎn)續(xù)算(使用按量實(shí)例)同樣的GROMACS案例的計(jì)算時長和計(jì)算成本比較
計(jì)算時間增加百分比計(jì)算成本降低百分比GROMACS作業(yè)13.28%↑87.17%↓
可以看出斷點(diǎn)續(xù)算總的作業(yè)時長是會增加的,主要原因是
作業(yè)運(yùn)行過程中是每隔一段時間執(zhí)行一次checkpoint, 在此次測試?yán)锩?,是每?分鐘執(zhí)行一次checkpoint,所以在搶占式實(shí)例被釋放的時候,可能會最大損失2分鐘的計(jì)算
執(zhí)行checkpoint,存儲作業(yè)信息到文件本身也要消耗CPU核時的
計(jì)算成本降低了87%,如果用戶的作業(yè)并不緊急,并且對計(jì)算成本相當(dāng)敏感,可以選擇這種計(jì)算方案
案例三:用戶自定義MPI程序
前面介紹了如何利用應(yīng)用本身的續(xù)算功能在E-HPC上進(jìn)行斷點(diǎn)續(xù)算,對于用戶自己開發(fā)的應(yīng)用程序如何做到斷點(diǎn)續(xù)算呢?尤其是用戶自己的MPI跨節(jié)點(diǎn)運(yùn)行程序如何做到斷點(diǎn)續(xù)算呢?
開源的Checkpoint/Restart 框架
目前,有很多開源的library提供Checkpoint/Restart功能,并且常用的HPC集群調(diào)度器也支持與他們集成:
支持linux下的程序打斷點(diǎn)以及之后從斷點(diǎn)處續(xù)算
可以針對整個批處理作業(yè)定時打斷點(diǎn)
如果節(jié)點(diǎn)異常,可以自動requeue和restart作業(yè)
Slurm, LSF, SGE等調(diào)度器類型都支持BLCR
BLCR也有很多限制,對支持的linux distro有限制,并且已經(jīng)很多年沒有繼續(xù)維護(hù)了,最新版本是2003年的,更詳細(xì)信息參見?BLCR Frequently Asked Questions.?
SCR:?Scalable Checkpoint/Restart for MPI
SCR是LLNL(Lawrence Livermore National Laboratory )開發(fā)的一套針對MPI程序的Checkpoint/Restart的庫,提供一套完整的API供用戶程序調(diào)用,用戶自己決定何時何地觸發(fā)checkpoint,適合用戶自己開發(fā)的MPI程序使用
Checkpoint/Restart框架一般都會面臨一個問題,對正在執(zhí)行的進(jìn)程定時checkpoint的時候,對性能(CPU cost, disk/bandwidth cost)是有一定影響的,為了降低打checkpoint對性能的影響,SCR提供了多級checkpoint機(jī)制:高頻的checkpoint文件存儲在節(jié)點(diǎn)本地磁盤,并在節(jié)點(diǎn)間做備份冗余,低頻的checkpoint文件存儲在共享文件系統(tǒng)中。
SCR主要提供了以下API:
SCR_Init
初始化SCR library,在MPI_Init之后立即調(diào)用SCR_Finalize
關(guān)閉SCR library, 在MPI_Finalize之前調(diào)用SCR_Route_file
獲取要寫入或者讀取的checkpoint文件全路徑, 每個MPI進(jìn)程的checkpoint文件名可以設(shè)置和當(dāng)前進(jìn)程的rank相關(guān)SCR_Start_checkpoint
通知SCR新的checkpoint開始SCR_Complete_checkpoint
通知SCR checkpoint文件已經(jīng)寫入完畢SCR_Have_restart
查詢當(dāng)前進(jìn)程是否有可用的checkpointSCR_Start_restart:
進(jìn)程從指定的檢查點(diǎn)開始啟動SCR_Complete_restart
通知SCR進(jìn)程已經(jīng)成功讀取checkpoint文件,要保證所有的MPI進(jìn)程都調(diào)用SCR_Complete_restart之后才能進(jìn)行后續(xù)的運(yùn)算
還有一些其他的Checkpoint/Restart開發(fā)庫,?
例如:?
DMTCP: Distributed MultiThreaded CheckPointing
CRIU
這里就不展開了
E-HPC + SCR 斷點(diǎn)續(xù)算MPI程序
本文主要介紹如何在E-HPC上利用SCR對用戶的MPI程序進(jìn)行斷點(diǎn)續(xù)算。
首先通過E-HPC控制臺,創(chuàng)建SLURM集群 (4 compute nodes), 安裝軟件mpich 3.2
源代碼編譯安裝SCR
以下操作都要ssh到登錄節(jié)點(diǎn)上執(zhí)行,
從github上clone代碼
git?clone?https://github.com/LLNL/scr.git
安裝依賴軟件
yum?install?cmake yum?install?-y?zlib-devel yum?install?-y?pdsh
編譯安裝
export?MODULEPATH=/opt/ehpcmodulefiles/ module?load?mpich/3.2mkdir?buildmkdir?/opt/scr cd?buildcmake?-DCMAKE_INSTALL_PREFIX=/opt/install?../scr make make?installmake?test?//?部分testcase會fail,可以忽略
運(yùn)行測試程序
作業(yè)腳本如下,
#!/bin/bashexport?MODULEPATH=/opt/ehpcmodulefiles/ module?load?mpich/3.2 LD_LIBRARY_PATH=/opt/scr/lib SCR_FLUSH=0 mpirun?./test_api
執(zhí)行以下命令提交作業(yè)
sbatch?-N?4?-n?4?./job.sh
作業(yè)輸出內(nèi)容如下
Init:?Min?0.062187?s????Max?0.062343?s??Avg?0.062253?s No?checkpoint?to?restart?from At?least?one?rank?(perhaps?all)?did?not?find?its?checkpoint Completed?checkpoint?1. Completed?checkpoint?2. Completed?checkpoint?3. Completed?checkpoint?4. Completed?checkpoint?5. Completed?checkpoint?6. FileIO:?Min????4.05?MB/s????????Max????4.05?MB/s????????Avg????4.05?MB/s????????Agg???16.21?MB/s
可以看到第一次運(yùn)行,沒有checkpoint文件,從頭開始運(yùn)行,中間階段會產(chǎn)生6次checkpoint文件,
當(dāng)前目錄下最后保留第6次checkpoint文件, 每個MPI進(jìn)程一個checkpoint文件
繼續(xù)提交相同的作業(yè)執(zhí)行一次,
sbatch?-N?4?-n?4?./job.sh
作業(yè)輸出內(nèi)容如下,
Init:?Min?0.244968?s????Max?0.245073?s??Avg?0.245038?s Restarting?from?checkpoint?named?ckpt.6 Completed?checkpoint?7. Completed?checkpoint?8. Completed?checkpoint?9. Completed?checkpoint?10. Completed?checkpoint?11. Completed?checkpoint?12. FileIO:?Min????3.17?MB/s????????Max????3.17?MB/s????????Avg????3.17?MB/s????????Agg???12.69?MB/s
由于有checkpoint文件存在,所以從checkpoint ‘ckpt.6’開始續(xù)算的。
這個示例主要是演示如何在E-HPC上斷點(diǎn)續(xù)算用戶自己寫的MPI作業(yè),SCR提供checkpoint/restart框架,提供完整的API用于觸發(fā)checkpoint或者restart, 當(dāng)然真正寫到checkpoint文件里的內(nèi)容是由用戶自己在程序中決定的,這個是和應(yīng)用程序本身的邏輯相關(guān)的。
總結(jié)
通過利用E-HPC自動伸縮服務(wù),阿里云上的搶占式實(shí)例,應(yīng)用本身支持的斷點(diǎn)續(xù)算能力或者針對MPI程序的Checkpoint/Restart框架,可以做到在阿里云E-HPC平臺上進(jìn)行HPC低成本的計(jì)算模型,將云上普惠的高性能計(jì)算服務(wù)提供給絕大部分HPC用戶,減少傳統(tǒng)HPC用戶遷云成本上的顧慮。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載
評論
查看更多