摘要: E-HPC 低成本計算方案 E-HPC做爲阿里雲上的雲超算產品將HPCaaS公共雲服務提供給客戶,將公共雲上資源彈性優點,高性能的優點,計算資源的多樣性等優點提供給HPC用戶,若是HPC用戶追求極致性能的HPC集羣,咱們能夠提供SCC,裸金屬服務器,EGS異構計算資源。node
E-HPC 低成本計算方案linux
E-HPC做爲阿里雲上的雲超算產品將HPCaaS公共雲服務提供給客戶,將公共雲上資源彈性優點,高性能的優點,計算資源的多樣性等優點提供給HPC用戶,若是HPC用戶追求極致性能的HPC集羣,咱們能夠提供SCC,裸金屬服務器,EGS異構計算資源。對於成本相對比較敏感的客戶, E-HPC提供自動伸縮+搶佔式實例+斷點續算低成本計算方案,從而能夠將雲上普惠的高性能計算服務提供給絕大部分HPC用戶:git
搶佔式實例保證用戶的計算資源能夠控制在很低的成本之下,關於搶佔式實例的詳細介紹,參考搶佔式實例
自動伸縮能夠幫助用戶自動擴容,無需用戶干預,用戶只須要提交做業,設定搶佔式實例的競價策略, 關於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支持做業檢查點和恢復執行。github
具體案例api
如下將以案例的形式介紹如何在E-HPC進行低成本計算:bash
LAMMPS在E-HPC上的計算
GROMACS GPU在E-HPC上的計算
用戶本身開發的MPI程序如何在E-HPC上低成本計算服務器
建立E-HPC集羣app
經過E-HPC控制檯 建立集羣框架
選擇「競價實例」,設訂價格策略,系統自動出價或者設置最高價格ssh
選擇軟件包,例如LAMMPS, GROMACS-GPU
集羣建立成功以後,建立用戶,用於提交做業
案例一: LAMMPS
算例輸入文件
本文以3d Lennard-Jones melt爲例
修改算例輸入文件以下, 設置每迭代100步生成一個checkpoint文件
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續算的輸入文件
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做業腳本
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,能夠忽略
運行測試程序
做業腳本以下,
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用戶遷雲成本上的顧慮。
本文爲雲棲社區原創內容,未經容許不得轉載