EHPC通过断点续算和自动伸缩在抢占式实例上实现低成本HPC计算
摘要: E-HPC 低成本計算方案 E-HPC作為阿里云上的云超算產品將HPCaaS公共云服務提供給客戶,將公共云上資源彈性優勢,高性能的優勢,計算資源的多樣性等優勢提供給HPC用戶,如果HPC用戶追求極致性能的HPC集群,我們可以提供SCC,裸金屬服務器,EGS異構計算資源。
E-HPC 低成本計算方案
E-HPC作為阿里云上的云超算產品將HPCaaS公共云服務提供給客戶,將公共云上資源彈性優勢,高性能的優勢,計算資源的多樣性等優勢提供給HPC用戶,如果HPC用戶追求極致性能的HPC集群,我們可以提供SCC,裸金屬服務器,EGS異構計算資源。對于成本相對比較敏感的客戶, E-HPC提供自動伸縮+搶占式實例+斷點續算低成本計算方案,從而可以將云上普惠的高性能計算服務提供給絕大部分HPC用戶:
搶占式實例保證用戶的計算資源可以控制在很低的成本之下,關于搶占式實例的詳細介紹,參考搶占式實例
自動伸縮可以幫助用戶自動擴容,無需用戶干預,用戶只需要提交作業,設定搶占式實例的競價策略, 關于E-HPC的自動伸縮,參考E-HPC自動伸縮
斷點續算可以保證作業被中斷之后,有新的競價實例擴容成功之后,作業可以繼續運算,而不是重新開始運算。
目前,在HPC領域,有很多研究關于MPI支持斷點續算(checkpoint/restart)技術,MVAPICH2基于BLCR實現checkpoint/restart,并提供checkpoint文件管理;OpenMPI設計了模塊化的checkpoint/restart機制,并有基于BLCR的實現。HPC有些領域的應用本身是支持斷點續算的,例如LAMMPS, GROMACS,渲染應用里的V-Ray也是支持斷點續算的。HPC常用的調度器集群也對斷點續算有集成支持,Slurm與BLCR集成,也可以直接使用SCR等checkpoint系統對作業進行斷點續算。LSF支持作業檢查點和恢復執行。
具體案例
以下將以案例的形式介紹如何在E-HPC進行低成本計算:
LAMMPS在E-HPC上的計算
GROMACS GPU在E-HPC上的計算
用戶自己開發的MPI程序如何在E-HPC上低成本計算
創建E-HPC集群
通過E-HPC控制臺 創建集群
選擇“競價實例”,設定價格策略,系統自動出價或者設置最高價格
選擇軟件包,例如LAMMPS, GROMACS-GPU
集群創建成功之后,創建用戶,用于提交作業
案例一: LAMMPS
算例輸入文件
本文以3d Lennard-Jones melt為例
修改算例輸入文件如下, 設置每迭代100步生成一個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"
準備從checkpoint續算的輸入文件
3d Lennard-Jones melt
read_restart lennard.restart
run 10000 every 100 "write_restart /home/testuser1/lennard.restart"
準備pbs的作業腳本 job.pbs, 根據是否存在checkpoint文件決定使用哪個輸入文件
#!/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
提交作業,運行期間無中斷
qsub job.pbs
作業運行結束,查看作業信息, 可以看到作業一共運行了5分28秒
提交作業,使用自動伸縮+競價實例+斷點續算模式
在E-HPC控制臺設置集群自動伸縮策略,選擇擴容競價實例,競價策略會系統自動出價
待所有計算節點釋放之后,提交作業 (先刪除前一個作業的續算文件lennard.restart)
job.pbs
兩分鐘左右可以看到自動擴容競價實例
作業運行1分鐘左右,在ECS控制臺釋放計算節點對應的競價實例,模擬競價實例被釋放 (實際當中,競價實例會保證至少可用1個小時),查看作業運行信息,看到作業已經運行1分47秒
隨后作業會回到queued狀態,等待可用計算資源
自動伸縮服務會嘗試繼續擴容競價實例直到擴容成功,然后作業會繼續執行
作業執行成功,查看作業信息,作業執行了3分56秒,可以看出是從斷點的地方續算的
由于迭代次數比較少,結果可視化如下
主要是以用例的方式介紹了如何在E-HPC上低成本的計算LAMMPS算例,最后我們比較一下成本,本用例用的最小ECS實例規格ecs.n1.tiny, 搶占式實例最低價格為按量的1折(不同規格折扣會不同,也隨時間實時變化)
計算時間增加百分比 計算成本降低百分比
LAMMPS作業 4.57%↑ 88.30%↓
可以看出在運算總時間增加不大的前提下,計算成本大大降低,當然在作業提交到最終運行結束的總時長會比使用按量實例計算要長,所以很適合從時間上來說并不緊迫的作業。
案例二:GROMACS GPU
GROMACS(全稱:英語:GROningen MAchine,全稱格羅寧根華訊模擬體系)是一套分子動力學模擬程序包,主要用來模擬研究蛋白質、脂質、核酸等生物分子的性質。
創建E-HPC集群的時候,硬件配置階段計算節點實例配置選擇ecs.gn5-c4g1.xlarge (4核,30GB,1塊P100);軟件配置階段選中GROMACS-GPU軟件包
算例: 水分子運動
本算例為模擬大量水分子在給定空間、溫度內的運動過程
下載water 算例
可以從GROMACS ftp直接下載解壓
wget http://ftp.gromacs.org/pub/be...
tar xzvf water_GMX50_bare.tar.gz
在算例輸入文件里設置迭代次數
vi water-cut1.0_GMX50_bare/1536/pme.mdp
設置nsteps=80000
算例的PBS作業腳本
!/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
參數說明
-cpi 選項用于指定checkpoint文件名,默認文件名是state.cpt
-cpt 選項指定checkpoint文件生成和更新間隔時間,用于下一次續算,單位是分鐘
-append 選項指定續算產生的結果會繼續寫入先前的輸出文件
注意:在輸入文件里面指定迭代次數,表示當前作業總的迭代次數
不要在命令行執行迭代次數, 例如
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,表示的是一次執行過程中的總迭代次數。
會導致每次續算的時候都會繼續執行總的迭代次數,而不是多次續算一共執行的迭代次數。
運行作業
首先完整執行一次該算例的作業(不發生斷點再續算的情況) qsub job.pbs
GROMACS 斷點續算
下面模擬在運算過程中節點會被釋放導致斷點續算的情形,
首先提交作業 qsub job.pbs
自動伸縮服務會自動擴容一個ecs.gn5-c4g1.xlarge節點,觀察作業使用的CPU時間 qstat -f 大概使用1個小時左右CPU時間的時候,登錄ECS控制臺,把計算節點對應的EGS實例強行釋放,觀察一下當前作業的信息
由于沒有可用計算資源,作業會進入queued狀態,自動伸縮服務繼續嘗試擴容搶占式實例
實例擴容成功,作業繼續執行,直到運算完畢
比較作業計算時間和計算成本
下表列出了斷點續算 (使用搶占式實例)和非斷點續算(使用按量實例)同樣的GROMACS案例的計算時長和計算成本比較
計算時間增加百分比 計算成本降低百分比
GROMACS作業 13.28%↑ 87.17%↓
可以看出斷點續算總的作業時長是會增加的,主要原因是
作業運行過程中是每隔一段時間執行一次checkpoint, 在此次測試里面,是每隔2分鐘執行一次checkpoint,所以在搶占式實例被釋放的時候,可能會最大損失2分鐘的計算
執行checkpoint,存儲作業信息到文件本身也要消耗CPU核時的
計算成本降低了87%,如果用戶的作業并不緊急,并且對計算成本相當敏感,可以選擇這種計算方案
案例三:用戶自定義MPI程序
前面介紹了如何利用應用本身的續算功能在E-HPC上進行斷點續算,對于用戶自己開發的應用程序如何做到斷點續算呢?尤其是用戶自己的MPI跨節點運行程序如何做到斷點續算呢?
開源的Checkpoint/Restart 框架
目前,有很多開源的library提供Checkpoint/Restart功能,并且常用的HPC集群調度器也支持與他們集成:
Berkeley Lab Checkpoint/Restart (BLCR)
支持linux下的程序打斷點以及之后從斷點處續算
可以針對整個批處理作業定時打斷點
如果節點異常,可以自動requeue和restart作業
Slurm, LSF, SGE等調度器類型都支持BLCR
BLCR也有很多限制,對支持的linux distro有限制,并且已經很多年沒有繼續維護了,最新版本是2003年的,更詳細信息參見 BLCR Frequently Asked Questions.
SCR: Scalable Checkpoint/Restart for MPI
SCR是LLNL(Lawrence Livermore National Laboratory )開發的一套針對MPI程序的Checkpoint/Restart的庫,提供一套完整的API供用戶程序調用,用戶自己決定何時何地觸發checkpoint,適合用戶自己開發的MPI程序使用
Checkpoint/Restart框架一般都會面臨一個問題,對正在執行的進程定時checkpoint的時候,對性能(CPU cost, disk/bandwidth cost)是有一定影響的,為了降低打checkpoint對性能的影響,SCR提供了多級checkpoint機制:高頻的checkpoint文件存儲在節點本地磁盤,并在節點間做備份冗余,低頻的checkpoint文件存儲在共享文件系統中。
SCR主要提供了以下API:
SCR_Init
初始化SCR library,在MPI_Init之后立即調用
SCR_Finalize
關閉SCR library, 在MPI_Finalize之前調用
SCR_Route_file
獲取要寫入或者讀取的checkpoint文件全路徑, 每個MPI進程的checkpoint文件名可以設置和當前進程的rank相關
SCR_Start_checkpoint
通知SCR新的checkpoint開始
SCR_Complete_checkpoint
通知SCR checkpoint文件已經寫入完畢
SCR_Have_restart
查詢當前進程是否有可用的checkpoint
SCR_Start_restart:
進程從指定的檢查點開始啟動
SCR_Complete_restart
通知SCR進程已經成功讀取checkpoint文件,要保證所有的MPI進程都調用SCR_Complete_restart之后才能進行后續的運算
還有一些其他的Checkpoint/Restart開發庫,
例如:
DMTCP: Distributed MultiThreaded CheckPointing
CRIU
這里就不展開了
E-HPC + SCR 斷點續算MPI程序
本文主要介紹如何在E-HPC上利用SCR對用戶的MPI程序進行斷點續算。
首先通過E-HPC控制臺,創建SLURM集群 (4 compute nodes), 安裝軟件mpich 3.2
源代碼編譯安裝SCR
以下操作都要ssh到登錄節點上執行,
從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會fail,可以忽略
運行測試程序
作業腳本如下,
!/bin/bash
export MODULEPATH=/opt/ehpcmodulefiles/
module load mpich/3.2
LD_LIBRARY_PATH=/opt/scr/lib
SCR_FLUSH=0
mpirun ./test_api
執行以下命令提交作業
sbatch -N 4 -n 4 ./job.sh
作業輸出內容如下
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
可以看到第一次運行,沒有checkpoint文件,從頭開始運行,中間階段會產生6次checkpoint文件,
當前目錄下最后保留第6次checkpoint文件, 每個MPI進程一個checkpoint文件
繼續提交相同的作業執行一次,
sbatch -N 4 -n 4 ./job.sh
作業輸出內容如下,
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’開始續算的。
這個示例主要是演示如何在E-HPC上斷點續算用戶自己寫的MPI作業,SCR提供checkpoint/restart框架,提供完整的API用于觸發checkpoint或者restart, 當然真正寫到checkpoint文件里的內容是由用戶自己在程序中決定的,這個是和應用程序本身的邏輯相關的。
總結
通過利用E-HPC自動伸縮服務,阿里云上的搶占式實例,應用本身支持的斷點續算能力或者針對MPI程序的Checkpoint/Restart框架,可以做到在阿里云E-HPC平臺上進行HPC低成本的計算模型,將云上普惠的高性能計算服務提供給絕大部分HPC用戶,減少傳統HPC用戶遷云成本上的顧慮。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載
總結
以上是生活随笔為你收集整理的EHPC通过断点续算和自动伸缩在抢占式实例上实现低成本HPC计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Chrome 133 里程碑式更新 -
- 下一篇: manim边学边做--向量相关的场景类