摘要: 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计算相关推荐

  1. 自动创建阿里云抢占式实例

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/08/24/auto_run_aliyun_spot/ aliyun_spot 自动创建阿里云抢占式实例. 支持一下作 ...

  2. 弹性计算双周刊 第 9 期

    [最新动态] 中国开源软件推进联盟在2018年6月28日-29日召开的"第十三届开源中国开源世界高峰论坛"上发布了"2018 中国开源领袖人物"."2 ...

  3. Python机器学习-搭建神经网络以及数据集引入和断点续存

    前言 本文旨在通过Python编程角度进行机器学习神经网络的引导,需要掌握基础的全连接神经网络基础,这包括了神经网络全连接层的结构,权重模板与偏置的作用,节点的处理方法.在掌握这些知识之后,本文将从代 ...

  4. 断点续训 Pytorch 和 Tensorflow 框架 VGG16 模型 猫狗大战 鸢尾花分类

    神经网络训练模型的过程中,如果程序突然中断,竹篮打水一场空? >>>断点续训来解决! 目录 (1)Pytorch框架的断点续训(猫狗大战) (2)Tensorflow框架的断点续训( ...

  5. kubernetes自动伸缩

    kubernetes中HPA(pod水平自动伸缩) 一.介绍 HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU.磁盘.内存等),进行副本 ...

  6. 任务调度系统--重跑和断点续跑

    理论上,重试与重跑效果是一样的.但是重试是程序自动的,而重跑是人工手动干预的. 当一个任务的某一次调度在重试了3次之后,仍然失败,那么这个任务的这一次调度就认为是失败的,当运维人员发现有失败的情况,登 ...

  7. Scrapy_redis框架原理分析并实现断点续爬以及分布式爬虫

    1. 下载github的demo代码 1.1 clone github scrapy-redis源码文件 git clone https://github.com/rolando/scrapy-red ...

  8. kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩...

    Kubernetes 是来自 Google 云平台的开源容器集群管理系统.基于 Docker 构建一个容器的调度服务.该系统可以自动在一个容器集群中选择一个工作容器供使用.其核心概念是 Contain ...

  9. 译:Spring Boot 自动伸缩

    原文链接:https://dzone.com/articles/spring-boot-autoscaler 作者:Piotr Mińkowski 译者:helloworldtang 自动伸缩是每个人 ...

最新文章

  1. 2020大部分知名公司Java面试题(一)
  2. Unix 的基本命令:
  3. 算法提高课-图论-单源最短路的建图方式-AcWing 920. 最优乘车:bfs求最短路、建图
  4. 编程之美-数组分割方法整理
  5. 吸气剂和二传手被认为有害
  6. 算法:线性时间选择_机器学习必修课!scikit-learn 支持向量机算法库使用小结
  7. wordpress ?php the_time() ?,WordPress时间函数the_time与get_the_time解析
  8. Qt4_使用SAX读取XML
  9. 配置pytoch版人脸关键点网络pfld docker环境
  10. 2021中国统计摘要
  11. 红米note2能刷机没显示无服务器,红米Note2刷机失败怎么办
  12. 数学建模更新7(ARCH和GARCH模型)
  13. Java中的异常分类[乐乐独记]
  14. 信息学奥赛一本通 1354:括弧匹配检验
  15. Java小写金额转换大写与金额比对(支持繁体大写金额)
  16. simulink电机仿真学习 - SVPWM原理分析及仿真分析
  17. C语言实现简单的图书馆小程序(练习指针和结构体的基本使用)
  18. memory:arm 分区layout以及虚拟内存布局-小结
  19. 手把手教你在Linux(Deepin)把自己下载的软件放到任务栏启动器
  20. sierrawireless

热门文章

  1. 黑马程序员----银行业务调度系统面试题
  2. phpstudy sqlsrv v8.1_phpStudy
  3. python中mat函数_python matplotlib中的subplot函数使用详解
  4. CSS如何设置高度为屏幕高度_(15)让这些“展示”有更好的扩展性——媒体查询 | CSS...
  5. Atlas Of Cardiovascular Emergencies 心血管急症图集
  6. Log binomial 回归在队列中的应用
  7. 意外的服务器响应_响应式系统reactive system初探
  8. dueros模拟测试没有请求后台_实战 | 用手写一个骚气的请求合并,演绎底层的真实...
  9. 基于UDP的服务器端和客户端
  10. html炫酷在线,小伙伴们都会惊呆的10个超炫的HTML5+CSS3效果作品