EHPC通过断点续算和自动伸缩在抢占式实例上实现低成本HPC计算
摘要: E-HPC 低成本計(jì)算方案 E-HPC作為阿里云上的云超算產(chǎn)品將HPCaaS公共云服務(wù)提供給客戶,將公共云上資源彈性優(yōu)勢(shì),高性能的優(yōu)勢(shì),計(jì)算資源的多樣性等優(yōu)勢(shì)提供給HPC用戶,如果HPC用戶追求極致性能的HPC集群,我們可以提供SCC,裸金屬服務(wù)器,EGS異構(gòu)計(jì)算資源。
E-HPC 低成本計(jì)算方案
E-HPC作為阿里云上的云超算產(chǎn)品將HPCaaS公共云服務(wù)提供給客戶,將公共云上資源彈性優(yōu)勢(shì),高性能的優(yōu)勢(shì),計(jì)算資源的多樣性等優(yōu)勢(shì)提供給HPC用戶,如果HPC用戶追求極致性能的HPC集群,我們可以提供SCC,裸金屬服務(wù)器,EGS異構(gòu)計(jì)算資源。對(duì)于成本相對(duì)比較敏感的客戶, E-HPC提供自動(dòng)伸縮+搶占式實(shí)例+斷點(diǎn)續(xù)算低成本計(jì)算方案,從而可以將云上普惠的高性能計(jì)算服務(wù)提供給絕大部分HPC用戶:
搶占式實(shí)例保證用戶的計(jì)算資源可以控制在很低的成本之下,關(guān)于搶占式實(shí)例的詳細(xì)介紹,參考搶占式實(shí)例
自動(dòng)伸縮可以幫助用戶自動(dòng)擴(kuò)容,無(wú)需用戶干預(yù),用戶只需要提交作業(yè),設(shè)定搶占式實(shí)例的競(jìng)價(jià)策略, 關(guān)于E-HPC的自動(dòng)伸縮,參考E-HPC自動(dòng)伸縮
斷點(diǎn)續(xù)算可以保證作業(yè)被中斷之后,有新的競(jìng)價(jià)實(shí)例擴(kuò)容成功之后,作業(yè)可以繼續(xù)運(yùn)算,而不是重新開(kāi)始運(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)度器集群也對(duì)斷點(diǎn)續(xù)算有集成支持,Slurm與BLCR集成,也可以直接使用SCR等checkpoint系統(tǒng)對(duì)作業(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ì)算
用戶自己開(kāi)發(fā)的MPI程序如何在E-HPC上低成本計(jì)算
創(chuàng)建E-HPC集群
通過(guò)E-HPC控制臺(tái) 創(chuàng)建集群
選擇“競(jìng)價(jià)實(shí)例”,設(shè)定價(jià)格策略,系統(tǒng)自動(dòng)出價(jià)或者設(shè)置最高價(jià)格
選擇軟件包,例如LAMMPS, GROMACS-GPU
集群創(chuàng)建成功之后,創(chuàng)建用戶,用于提交作業(yè)
案例一: LAMMPS
算例輸入文件
本文以3d Lennard-Jones melt為例
修改算例輸入文件如下, 設(shè)置每迭代100步生成一個(gè)checkpoint文件
3d Lennard-Jones melt
units lj
atom_style atomic
lattice fcc 0.8442
region box block 0 20 0 20 0 20
create_box 1 box
create_atoms 1 box
mass 1 1.0
velocity all create 1.44 87287 loop geom
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify delay 5 every 1
fix 1 all nve
dump 1 all xyz 100 /home/testuser1/sample.xyz
run 10000 every 100 "write_restart /home/testuser1/lennard.restart"
準(zhǔn)備從checkpoint續(xù)算的輸入文件
3d Lennard-Jones melt
read_restart lennard.restart
run 10000 every 100 "write_restart /home/testuser1/lennard.restart"
準(zhǔn)備pbs的作業(yè)腳本 job.pbs, 根據(jù)是否存在checkpoint文件決定使用哪個(gè)輸入文件
#!/bin/sh
#PBS -l ncpus=1
#PBS -o lammps_pbs.log
#PBS -j oe
export MODULEPATH=/opt/ehpcmodulefiles/
module load lammps-openmpi/31Mar17
module load openmpi/1.10.7
if [ ! -e "/home/testuser1/lennard.restart" ]; then
echo "run at the beginning"
mpirun lmp -in ./lj.in
else
echo "run from the last checkpoint"
mpirun lmp -in ./lj.restart.in
fi
提交作業(yè),運(yùn)行期間無(wú)中斷
qsub job.pbs
作業(yè)運(yùn)行結(jié)束,查看作業(yè)信息, 可以看到作業(yè)一共運(yùn)行了5分28秒
提交作業(yè),使用自動(dòng)伸縮+競(jìng)價(jià)實(shí)例+斷點(diǎn)續(xù)算模式
在E-HPC控制臺(tái)設(shè)置集群自動(dòng)伸縮策略,選擇擴(kuò)容競(jìng)價(jià)實(shí)例,競(jìng)價(jià)策略會(huì)系統(tǒng)自動(dòng)出價(jià)
待所有計(jì)算節(jié)點(diǎn)釋放之后,提交作業(yè) (先刪除前一個(gè)作業(yè)的續(xù)算文件lennard.restart)
job.pbs
兩分鐘左右可以看到自動(dòng)擴(kuò)容競(jìng)價(jià)實(shí)例
作業(yè)運(yùn)行1分鐘左右,在ECS控制臺(tái)釋放計(jì)算節(jié)點(diǎn)對(duì)應(yīng)的競(jìng)價(jià)實(shí)例,模擬競(jìng)價(jià)實(shí)例被釋放 (實(shí)際當(dāng)中,競(jìng)價(jià)實(shí)例會(huì)保證至少可用1個(gè)小時(shí)),查看作業(yè)運(yùn)行信息,看到作業(yè)已經(jīng)運(yùn)行1分47秒
隨后作業(yè)會(huì)回到queued狀態(tài),等待可用計(jì)算資源
自動(dòng)伸縮服務(wù)會(huì)嘗試?yán)^續(xù)擴(kuò)容競(jìng)價(jià)實(shí)例直到擴(kuò)容成功,然后作業(yè)會(huì)繼續(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ī)格折扣會(huì)不同,也隨時(shí)間實(shí)時(shí)變化)
計(jì)算時(shí)間增加百分比 計(jì)算成本降低百分比
LAMMPS作業(yè) 4.57%↑ 88.30%↓
可以看出在運(yùn)算總時(shí)間增加不大的前提下,計(jì)算成本大大降低,當(dāng)然在作業(yè)提交到最終運(yùn)行結(jié)束的總時(shí)長(zhǎng)會(huì)比使用按量實(shí)例計(jì)算要長(zhǎng),所以很適合從時(shí)間上來(lái)說(shuō)并不緊迫的作業(yè)。
案例二:GROMACS GPU
GROMACS(全稱:英語(yǔ):GROningen MAchine,全稱格羅寧根華訊模擬體系)是一套分子動(dòng)力學(xué)模擬程序包,主要用來(lái)模擬研究蛋白質(zhì)、脂質(zhì)、核酸等生物分子的性質(zhì)。
創(chuàng)建E-HPC集群的時(shí)候,硬件配置階段計(jì)算節(jié)點(diǎn)實(shí)例配置選擇ecs.gn5-c4g1.xlarge (4核,30GB,1塊P100);軟件配置階段選中GROMACS-GPU軟件包
算例: 水分子運(yùn)動(dòng)
本算例為模擬大量水分子在給定空間、溫度內(nèi)的運(yùn)動(dòng)過(guò)程
下載water 算例
可以從GROMACS ftp直接下載解壓
wget http://ftp.gromacs.org/pub/be...
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 oe
export MODULEPATH=/opt/ehpcmodulefiles/
module load cuda-toolkit/9.0
module load gromacs-gpu/2018.1
module load openmpi/3.0.0
cd /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ù)說(shuō)明
-cpi 選項(xiàng)用于指定checkpoint文件名,默認(rèn)文件名是state.cpt
-cpt 選項(xiàng)指定checkpoint文件生成和更新間隔時(shí)間,用于下一次續(xù)算,單位是分鐘
-append 選項(xiàng)指定續(xù)算產(chǎn)生的結(jié)果會(huì)繼續(xù)寫(xiě)入先前的輸出文件
注意:在輸入文件里面指定迭代次數(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í)行過(guò)程中的總迭代次數(shù)。
會(huì)導(dǎo)致每次續(xù)算的時(shí)候都會(huì)繼續(xù)執(zhí)行總的迭代次數(shù),而不是多次續(xù)算一共執(zhí)行的迭代次數(shù)。
運(yùn)行作業(yè)
首先完整執(zhí)行一次該算例的作業(yè)(不發(fā)生斷點(diǎn)再續(xù)算的情況) qsub job.pbs
GROMACS 斷點(diǎn)續(xù)算
下面模擬在運(yùn)算過(guò)程中節(jié)點(diǎn)會(huì)被釋放導(dǎo)致斷點(diǎn)續(xù)算的情形,
首先提交作業(yè) qsub job.pbs
自動(dòng)伸縮服務(wù)會(huì)自動(dòng)擴(kuò)容一個(gè)ecs.gn5-c4g1.xlarge節(jié)點(diǎn),觀察作業(yè)使用的CPU時(shí)間 qstat -f 大概使用1個(gè)小時(shí)左右CPU時(shí)間的時(shí)候,登錄ECS控制臺(tái),把計(jì)算節(jié)點(diǎn)對(duì)應(yīng)的EGS實(shí)例強(qiáng)行釋放,觀察一下當(dāng)前作業(yè)的信息
由于沒(méi)有可用計(jì)算資源,作業(yè)會(huì)進(jìn)入queued狀態(tài),自動(dòng)伸縮服務(wù)繼續(xù)嘗試擴(kuò)容搶占式實(shí)例
實(shí)例擴(kuò)容成功,作業(yè)繼續(xù)執(zhí)行,直到運(yùn)算完畢
比較作業(yè)計(jì)算時(shí)間和計(jì)算成本
下表列出了斷點(diǎn)續(xù)算 (使用搶占式實(shí)例)和非斷點(diǎn)續(xù)算(使用按量實(shí)例)同樣的GROMACS案例的計(jì)算時(shí)長(zhǎng)和計(jì)算成本比較
計(jì)算時(shí)間增加百分比 計(jì)算成本降低百分比
GROMACS作業(yè) 13.28%↑ 87.17%↓
可以看出斷點(diǎn)續(xù)算總的作業(yè)時(shí)長(zhǎng)是會(huì)增加的,主要原因是
作業(yè)運(yùn)行過(guò)程中是每隔一段時(shí)間執(zhí)行一次checkpoint, 在此次測(cè)試?yán)锩?#xff0c;是每隔2分鐘執(zhí)行一次checkpoint,所以在搶占式實(shí)例被釋放的時(shí)候,可能會(huì)最大損失2分鐘的計(jì)算
執(zhí)行checkpoint,存儲(chǔ)作業(yè)信息到文件本身也要消耗CPU核時(shí)的
計(jì)算成本降低了87%,如果用戶的作業(yè)并不緊急,并且對(duì)計(jì)算成本相當(dāng)敏感,可以選擇這種計(jì)算方案
案例三:用戶自定義MPI程序
前面介紹了如何利用應(yīng)用本身的續(xù)算功能在E-HPC上進(jìn)行斷點(diǎn)續(xù)算,對(duì)于用戶自己開(kāi)發(fā)的應(yīng)用程序如何做到斷點(diǎn)續(xù)算呢?尤其是用戶自己的MPI跨節(jié)點(diǎn)運(yùn)行程序如何做到斷點(diǎn)續(xù)算呢?
開(kāi)源的Checkpoint/Restart 框架
目前,有很多開(kāi)源的library提供Checkpoint/Restart功能,并且常用的HPC集群調(diào)度器也支持與他們集成:
Berkeley Lab Checkpoint/Restart (BLCR)
支持linux下的程序打斷點(diǎn)以及之后從斷點(diǎn)處續(xù)算
可以針對(duì)整個(gè)批處理作業(yè)定時(shí)打斷點(diǎn)
如果節(jié)點(diǎn)異常,可以自動(dòng)requeue和restart作業(yè)
Slurm, LSF, SGE等調(diào)度器類(lèi)型都支持BLCR
BLCR也有很多限制,對(duì)支持的linux distro有限制,并且已經(jīng)很多年沒(méi)有繼續(xù)維護(hù)了,最新版本是2003年的,更詳細(xì)信息參見(jiàn) BLCR Frequently Asked Questions.
SCR: Scalable Checkpoint/Restart for MPI
SCR是LLNL(Lawrence Livermore National Laboratory )開(kāi)發(fā)的一套針對(duì)MPI程序的Checkpoint/Restart的庫(kù),提供一套完整的API供用戶程序調(diào)用,用戶自己決定何時(shí)何地觸發(fā)checkpoint,適合用戶自己開(kāi)發(fā)的MPI程序使用
Checkpoint/Restart框架一般都會(huì)面臨一個(gè)問(wèn)題,對(duì)正在執(zhí)行的進(jìn)程定時(shí)checkpoint的時(shí)候,對(duì)性能(CPU cost, disk/bandwidth cost)是有一定影響的,為了降低打checkpoint對(duì)性能的影響,SCR提供了多級(jí)checkpoint機(jī)制:高頻的checkpoint文件存儲(chǔ)在節(jié)點(diǎn)本地磁盤(pán),并在節(jié)點(diǎn)間做備份冗余,低頻的checkpoint文件存儲(chǔ)在共享文件系統(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
獲取要寫(xiě)入或者讀取的checkpoint文件全路徑, 每個(gè)MPI進(jìn)程的checkpoint文件名可以設(shè)置和當(dāng)前進(jìn)程的rank相關(guān)
SCR_Start_checkpoint
通知SCR新的checkpoint開(kāi)始
SCR_Complete_checkpoint
通知SCR checkpoint文件已經(jīng)寫(xiě)入完畢
SCR_Have_restart
查詢當(dāng)前進(jìn)程是否有可用的checkpoint
SCR_Start_restart:
進(jìn)程從指定的檢查點(diǎn)開(kāi)始啟動(dòng)
SCR_Complete_restart
通知SCR進(jìn)程已經(jīng)成功讀取checkpoint文件,要保證所有的MPI進(jìn)程都調(diào)用SCR_Complete_restart之后才能進(jìn)行后續(xù)的運(yùn)算
還有一些其他的Checkpoint/Restart開(kāi)發(fā)庫(kù),
例如:
DMTCP: Distributed MultiThreaded CheckPointing
CRIU
這里就不展開(kāi)了
E-HPC + SCR 斷點(diǎn)續(xù)算MPI程序
本文主要介紹如何在E-HPC上利用SCR對(duì)用戶的MPI程序進(jìn)行斷點(diǎn)續(xù)算。
首先通過(guò)E-HPC控制臺(tái),創(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.2
mkdir build
mkdir /opt/scr
cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/install ../scr
make
make install
make test // 部分testcase會(huì)fail,可以忽略
運(yùn)行測(cè)試程序
作業(yè)腳本如下,
!/bin/bash
export 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)行,沒(méi)有checkpoint文件,從頭開(kāi)始運(yùn)行,中間階段會(huì)產(chǎn)生6次checkpoint文件,
當(dāng)前目錄下最后保留第6次checkpoint文件, 每個(gè)MPI進(jìn)程一個(gè)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’開(kāi)始續(xù)算的。
這個(gè)示例主要是演示如何在E-HPC上斷點(diǎn)續(xù)算用戶自己寫(xiě)的MPI作業(yè),SCR提供checkpoint/restart框架,提供完整的API用于觸發(fā)checkpoint或者restart, 當(dāng)然真正寫(xiě)到checkpoint文件里的內(nèi)容是由用戶自己在程序中決定的,這個(gè)是和應(yīng)用程序本身的邏輯相關(guān)的。
總結(jié)
通過(guò)利用E-HPC自動(dòng)伸縮服務(wù),阿里云上的搶占式實(shí)例,應(yīng)用本身支持的斷點(diǎn)續(xù)算能力或者針對(duì)MPI程序的Checkpoint/Restart框架,可以做到在阿里云E-HPC平臺(tái)上進(jìn)行HPC低成本的計(jì)算模型,將云上普惠的高性能計(jì)算服務(wù)提供給絕大部分HPC用戶,減少傳統(tǒng)HPC用戶遷云成本上的顧慮。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載
總結(jié)
以上是生活随笔為你收集整理的EHPC通过断点续算和自动伸缩在抢占式实例上实现低成本HPC计算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Chrome 133 里程碑式更新 -
- 下一篇: manim边学边做--向量相关的场景类