EHPC经过断点续算和自动伸缩在抢占式实例上实现低成本HPC计算

摘要: 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文件

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用户迁云成本上的顾虑。

原文连接

本文为云栖社区原创内容,未经容许不得转载

相关文章
相关标签/搜索