为什么80%的码农都做不了架构师?>>>   

使用EHPC实现“完美并行”的高效批处理方案

在高性能计算场景中,用户一次业务计算可以划分为大量的任务,每个任务的处理逻辑相同,但是输入文件、参数设置和输出文件不同。由于每个任务处理逻辑相似,执行时彼此没有依赖,按照高性能计算的并行计算模式,可归为 “embarrassing parallel”一类(又被称为完美并行问题),这类问题很少或根本不需要将问题分成许多并行任务的工作,通这些并行任务之间很少或没有依赖或需要通信,这类问题有一个另外的名称,叫做“批处理”,是高性能计算领域最“完美”的一种场景。在此,给出了基于阿里云弹性高性能计算场景的数组作业解决方案——利用E-HPC集成的作业调度系统,将用户的批处理任务自动分配到数组作业,实现在云超算集群上高并发执行。同时,依靠“云”弹性,动态扩展集群的计算资源,控制批处理的完成时间。

背景介绍

本节先通过一个示例介绍批处理的场景,然后讨论高性能计算集群以及数组作业。

批处理

在高性能计算领域中,存在大批量、可同时处理的计算场景,如以下freebayes应用场景,不同任务均使用freebayes应用程序,但是每个任务处理不同的输入文件(--bam-list)、不同的参数(-r)和不同的结果文件(--vcf)。由于作业量巨大,需要任务的并发执行,以缩短任务处理时间。

高性能计算集群与数组作业介绍

高性能计算集群是将大量的计算节点通过网络互联,进行统一的管理和调度,为大规模应用运行提供计算环境,包括账号管理、调度管理、文件系统、集群监控等模块。

由于集群包含大量计算节点,通常为多个用户共同使用,每个用户可以提交多个作业,每个作业需要一个或多个计算节点。集群资源的分配是由调度管理协调,以避免资源使用冲突,常用的调度管理软件包括PBS,Slurm,SGE,LSF等。

数组作业是一组作业的集合,可以执行一条提交作业的命令,提交作业集合中的所有作业,每个作业用各自的index取值进行区分。

如使用PBS调度器提交1个数组作业,文件名为 qjob.sh,内容如下:

#!/bin/bash#PBS -N arrjob                 # 作业名称
#PBS -l nodes=1:ppn=1         # 每个作业需要1个计算节点,每个节点1个核的资源
#PBS -J 1-3                 # 数组作业的作业编号为1,2,3echo $PBS_ARRAY_ID             # 每个作业的编号在PBS_ARRAY_ID 环境变量中

qjob.sh脚本定义了一个数组作业,包含3个作业。作业编号范围用-J指定,取值为1-3。在具体作业执行时,每个作业的编号通过环境变量$PBS_ARRAY_ID获取。通过以下命令就可以提交qjob.sh 作业:

qsub ./qjob.sh

此时,创建了3个作业,而作业能否立刻执行,需要调度器根据集群空闲资源和作业的资源需求来定。若资源充裕,3个作业可以同时运行。

使用数组作业解决批处理任务

从批处理和数组作业介绍看,数组作业适用批处理计算的场景,但做到简易使用,还存在以下问题:

  1. 批处理任务与作业的对应关系?当任务数量巨大时,是一个任务就是一个作业,还是一个作业包含多个任务?
  2. 如何从$PBS_ARRAY_ID到不同任务的关联?并能够方便对应不同任务的不同参数?
  3. 如何跟踪任务的执行情况?如何方便查看任务日志?在个别任务执行失败后,如何能够快速的筛选,并在调整后重新执行?

为此,我们给出使用数组作业解决批处理的方案,包括批处理任务到作业分配、批处理任务定义和任务运行及追踪功能。

批处理任务到作业分配

当批处理任务数目巨大时,如果每个任务都分配一个作业,调度器的负载就加重,虽然调度器能够显示不同作业的运行状态,作业数目过大,也会导致查看不方便。此外,相邻任务在一个节点执行,如果使用相同文件,可以重用节点的本地缓存。

为此,若任务数为Nt,作业数为Nj,每个作业处理的任务数为 Nt/Nj,如果不能整除,作业编号小于Nt%Nj的作业多处理一个任务。如之上批处理任务,如果Nt/Nj=2,但不能整除,作业编号小的作业会处理3个任务,而编号大的作业,会处理2个任务。

批处理任务定义

从批处理任务示例中我们可以看出,每个任务进行部分参数不同,若将这些变化的部分用变量代替,则批处理任务的处理脚本为(存放在文件 task.sh中):

$ cat task.sh
#!/bin/bash
echo "process $bamlist and $chrvar"
#other shell commands 如通过cd $bamlist
freebayes --bam-list   $bamlist -r $chrvar  --vcf   /home/user/result/out-$bamlist.vcf
ret=$? # 保留主要程序的退出状态
# other shell commands
# ... ... exit $ret # 任务执行状态,0为成功,非0表示失败

其中,用$bamlist表示 --bam-list 选项的变化取值和--vcf参数取值的变化部分,用$chrvar表示 -r选型的变化取值。

将具体变化的取值,存储在变量名同名的文件中,每一行代表不同的取值,示例中有2个变量,因此需要两个文件——bamlist和chrvar。

$ cat bamlist
bam1_100
bam101_200
bam201_300
bam301_400
bam401_500
bam501_600
bam601_700
bam701_800
bam801_900
... ...
bam901_1000
bam1001_1100
$ cat chrvar
chr01:1-1000
chr01:1001-2000
chr03:100-200
chr12:1000-2000
chr02:100-1100
chr03:1000-2000
chr05:1000-2000
chr08:1000-2000
chr08:3000-6000
... ...
chr01:8000-9000
chr06:1000-2000

任务运行与追踪

在批处理任务定义后之后,需要实现任务与作业映射、变量文件的解析和赋值。这些通用功能,E-HPC提供了ehpcarrayjob.py python 脚本,进行处理,数组作业的脚本名若为qjob.sh,其内容为:

$ cat qjob.sh
#!/bin/bashPBS -N bayes.job
#PBS -l nodes=1:ppn=1
#PBS -J 1-Njcd $PBS_O_WORKDIR # 表示打开提交作业的目录。python ehpcarrayjob.py -n Nj -e ./task.sh bamlist chrvar

通过qsub命令提交到集群上,有PBS进行调度,实现批量执行(其中Nj为作业的数目,根据需求进行替换)。

$ python ehpcarrayjob.py -h
usage: ehpcarrayjob.py [-h] -n NJOBS -e EXECFILE argfiles [argfiles ...]positional arguments:argfilesoptional arguments:-h, --help            show this help message and exit-n NJOBS, --njobs NJOBSnumber of jobs-e EXECFILE, --execfile EXECFILEjob command file

其中:

-n表示有多少个作业

-e指明每个任务的处理脚本(需要带路径)

argfiles 一个或多个,指定多个参数文件。

作业提交后,数组作业会分配一个作业id,如“1[].manager”,每个子作业都有自己的子作业编号,如从1-Nj。

ehpcarrayjob.py会生成以”作业id“为名的目录(如1[].manager),每个子作业在该目录下有“log.子作业编号”命名的日志文件,记录每个作业的执行情况。

当任务的返回作状态为非0(失败)时,会将任务变量的取值在”作业id“目录下记录到名为”fails.变量名.子作业编号“的文件中。待确定失败原因,修改处理脚本后,方便重新提交作业。

总结

站在用户的角度,每次数值计算任务来了,除了要划分好批量的任务,即使有遗留的脚本,还需要改写每个任务的处理脚本。

此外,还要面对以下运行场景的问题:

​ 这次计算需要多少资源?
​ 到那里找这些资源?
​ 任务能运行起来吗,出错了怎么找原因?
​ 任务会不会重算、漏算?
​ 机器利用能不能衔接上,会不会出现长时间空闲?

使用阿里云弹性高性能计算(E-HPC)的批处理处理方案可以解决以上问题,让工作更专注。

可以看出,借助E-HPC方案用户仅需要通过以下几个步骤:

  1. 将批处理任务中变化的取值提取出来,单独存储到一个文件中,文件名符合shell规范,如bamlist, chrvar。
  2. 编写任务处理的脚本,使用变量名(文件名同名)替换任务中的变化取值,如task.sh。
  3. 编写数组作业脚本,指明每个作业的资源需求,总作业数,调用 ehpcarrayjob.py启动批处理任务执行,如qjob.sh。

用qsub提交作业,进入”作业id“的目前查看任务处理进度以及又问题的任务列表。作业的运行状态根据集群的资源状态进行判断,如果集群节点充足,所有作业均可以运行;如果资源不满足,少量作业可以先执行。

同时E-HPC“云”超算方案还有以下优势:

  1. 具备HPC集群原有特性,方便用户登陆集群进行编译和调试单个任务的处理逻辑,并通过E-HPC内置应用级监控模块集谛进行监控、分析、优化应用运行行为。
  2. 借助E-HPC,可以直接将配置好的环境扩展到新加的计算节点上。同时,使用低配置的登陆和管控节点长久保留已配置环境。
  3. 根据当前的任务处理效率,在“云”上动态地更换计算实例类型,并扩充计算资源来调整任务的处理时间,以应对紧急的任务处理。

作者: 云熵
原文链接
本文为云栖社区原创内容,未经允许不得转载。

转载于:https://my.oschina.net/yunqi/blog/3014631

使用EHPC实现“完美并行”的高效批处理方案相关推荐

  1. python多功能文本编辑器_多功能高效 批处理式 Python IDE Python 编辑器 新时代新理念...

    计算机被发明以来,IDE 理念从最初的文本式,到后来的带图形界面式,再是图形可交互式,之后再无突破 (虽然有人说 AI 也可编程,但其可控性差). 这几年由于云计算兴起的在线 IDE,当使用云时会有一 ...

  2. 企业级分布式批处理方案

    前言 先来讲解下在分布式任务调度SchedulerX中的MapReduce模型是什么,从字面来理解MapReduce就是一个任务切分多个子任务并行处理.在简单单机场景下就是开启多线程来同时处理一个大任 ...

  3. mysql数据范围什么意思_数据都在mysql里的话,基于经纬度的范围查询有什么高效的方案吗...

    [今日话题] 数据都在mysql里的话,基于经纬度的范围查询有什么高效的方案吗 – yingang 1. 经纬度搜索(1)-Geohash算法原理 http://hankesi2000.iteye.c ...

  4. 完美高性能遥感数据图形工作站方案

    XASUN图形工作站是为行业软件量身定制的高速静音级计算机,借助最新X86 64位.多核高速计算技术,帮助从事各种创意.设计和制造机构的高级设计师和数字艺术家,在高性能计算.建筑/工程设计/施工(AE ...

  5. 红图新媒体-完美的新媒体矩阵方案需要这样做

    什么是新媒体矩阵?新媒体营销矩阵是现在信息化时代营销过程中重要的管理工具与传播途径,它以网络媒介传播无限制性.受众接受信息便捷.高效的原理为基础.通过社会化媒体内容和信息数据为依据,从新媒体策略.创作 ...

  6. 工业机器人位置精度高效测量方案

    随着工厂智能化转型的深入,"无人工厂"."黑灯工厂"不断涌现,工厂车间"少人化"."无人化",取而代之的是大量工业机器人 ...

  7. Flink SQL高效Top-N方案的实现原理

    Top-N是我们应用Flink进行业务开发时的常见场景,传统的DataStream API已经有了非常成熟的实现方案,如果换成Flink SQL,又该怎样操作?好在Flink SQL官方文档已经给出了 ...

  8. 内容组织高效项目方案是如何产生的 !

    时间紧张,先记一笔,后续优化与完善. 昨天下午3点接到GM(总理经)的任务,天今以内要提交一个省级部门目项设建计划,一唯的信息只有一封分公司理经从户客那懂得到的几句话,MY GOD ! GM的任务就像 ...

  9. 高效update方案

    --方案1: 如果有索引,先把索引删除后,再update,最后把索引重新创建一下 因为索引对update影响很大. --方案2: 1.create table newA as select id,na ...

最新文章

  1. 解释@Component @Controller @Service @Repository
  2. OpenWrt——satisfy_dependencies_for: Cannot satisfy the following dependencies
  3. python 读取json为list及向json文件追加数据
  4. java ajax简单实例_JAVA编写的AJAX例子,很简单,但是很容易理解详解
  5. HUAWEI USG6000系列 NGFW Module V100R001 典型配置案例
  6. newifimini出厂固件_newifi mini固件
  7. day 26 学习Linux-01天
  8. CTF题记——取证小集合
  9. win服务器系统安全模式,安全模式详解
  10. 再读 Laravel 5.5 文档
  11. Visual Studio Code 新手教程
  12. Unified Batch All Triplet Loss for Visible-Infrared Person Re-identification
  13. 全志H616方案香橙派orangepi zero2的26pin接口 SPI测试
  14. 谷歌因安卓涉嫌垄断被罚51亿美元,上诉称:没看到我们在和苹果竞争?
  15. nRF52832使用spi或者twi出现静态400-450ua电流的问题,由GPIOTE引起
  16. 零基础学画画从什么开始学起
  17. linux驱动学习笔记(九)SPI
  18. qt写python教程视频_GitHub - qtg666/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
  19. [洛谷3041]视频游戏的连击Video Game Combos
  20. 贾扬清离职 Facebook,即将加盟阿里硅谷研究院

热门文章

  1. 46亿一辆的戴森电动车,「卖」给英国首富了
  2. 自动驾驶汽车撞死行人前的10秒,将行人识别为汽车和“其他”,美国官方公布Uber案细节...
  3. 超过Google,微信AI在NLP领域又获一项世界第一
  4. 入门Python神经机器翻译,这是一篇非常精简的实战指南
  5. Spring4整合Hibernate4出现的错误的解决
  6. qt 软件发布在别的机器不能运行(IDE为vs2005)
  7. [异常解决] MPU6050启动异常读出陀螺仪和加速度计的值全为0的解决办法
  8. 大数据,只是为了赚钱么?
  9. Java为什么需要保留基本数据类型
  10. 使用cpau.exe让不是管理员的用户也有权限运行哪些需要管理员权限的软件。