从容面对大规模作业:利用PMI提升作业启用和结束效率
1.进程管理瓶颈
随着集群规模的不断扩大和处理器性能的不断提升,高性能计算HPC(High Performance Computing)系统性能已经进入百亿亿次时代,进程管理是高性能计算的一个重要组成部分,传统进程管理已经不能满足海量处理器的管理需求,迫切需要一种可扩展的管理方式,和进程间快速交换信息的机制。
2.进程管理接口发展
为了满足海量处理器对进程管理的需求,在进程管理中引入进程管理接口PMI(Process Management Interface),用于在启动阶段部署进程的通信方法,通过定义MPI中使用的通用API来执行各类进程管理系统中的启动、监视和控制进程的功能。然而,在超大系统规模下,传统的进程管理接口无法满足在进程启动阶段快速获取通信信息,促使应用程序启动时间过长,系统计算性能下降。为了满足百亿亿次级系统的启动要求,PMI 社区的开发人员进一步研发出 PMIx(Process Management Interface-Exascale, PMIx)版本,以实现在短时间内快速启动大规模应用程序的目标。目前常用的有PMI-1、PMI-2以及PMIx。
- PMI-1
PMI-1被广泛应用在MPICH2及其派生的MPI实现中,其最初设计目标是利用一个接口减少进程管理器与MPI实现之间的耦合。但是,将PMI-1应用于现代高性能计算系统上时,却暴露出PMI-1的很多局限性。
- PMI-2
在PMI-2中,针对PMI-1的几个方面进行了改进1,增加查询功能,2,扩大数据库信息范围3,增加线程安全,4,改善容错机制。
- PMIx
随着超级计算机的发展,高性能计算系统面临多层次的大规模并行处理,为了满足百亿亿次级系统的要求,PMI社区开发出PMIx接口,PMIx是专门设计用于支持百亿亿次级系统的进程管理接口,针对传统应用程序进程启动过程中的耗时因素进行分析,定义新的启动顺序,力求在进程之间快速建立通信通道,缩短并行应用程序启动时间。
3.PMIx的优势
在PMI-2的基础上,PMIx在功能上进行了进一步完善。相对于PMI-2中的数据库信息范围,PMIx将信息作用域增加到进程本地范围、节点本地范围、远程范围和全局范围。另外,在PMI-1与PMI-2中,键值的数据类型仅定义为字符串,PMIx则扩展了数据表示,可对更多类型数据进行存储。PMIx针对同步原语Fence和Get原语都加入了非阻塞版本,以降低操作延迟。同时,PMIx针对稀疏通信情况进行优化,提供按需数据交换模式,缩短通信时间。更为关键的是,针对启动大规模并行应用程序,PMIx定义了新的启动顺序,力求降低传统应用程序启动过程时间成本,加快程序启动。
4.PMIx与调度器结合
4.1 slurm与PMIx结合
将 SLURM 与 PMIx 结合可以提升任务管理和进程间通信的效率,特别是在大规模并行任务中,直接点对点连接用于带外通信。在17.11版本之前,slurm使用其自身的内部RPC机制,这种机制虽然很方便,但存在一些与性能相关的问题。2017年超级计算大会slurm展示的直连案例中显著提升了slurm/PMIx的性能。默认情况下,此模式已开启,并使用基于TCP的实现,对应的环境变量为SLURM_PMIX_DIRECT_CONN。
如果slurm配置为通过 –with-ucx=path-to-UCX-installation选项使用UCX通信框架,PMIx插件将使用基于UCX的Direct-connect传输实现,从而在基于InfiniBand的集群上提供更大的性能提升,对应的环境变量为SLURM_PMIX_DIRECT_CONN_UCX。
“Early-wireup” 选项用于在应用程序启动之前通过带外(OOB)通道预先连接slurm步骤守护进程(即在调用PMI或PMIx接口之前),对应的环境变量为SLURM_PMIX_DIRECT_CONN_EARLY。
对RPC以及PMIx插件支持的DTCP和DUCX进行了点对点基准测试,测试结果如下图:
4.2 MetaStack与PMIx结合
MetaStack作为国产开源调度系统,以原生slurm调度系统为基础,在原生slurm对PMIx兼容的基础上,围绕PMIX做了众多改进,不仅支持了乱序情况下异构作业的运行,并在大规模作业结束时作业的结束时间做了优化。
4.2.1 异构作业支持
当作业组之间产生了节点乱序的现象,这是由于资源选择策略导致的,由于异构作业的所有作业组会在一个通信域中,MetaStack在PMIX服务端通信之前对节点进行了重排,导致PMIX通信时key-value值不对,无法通过NODEID确定当前节点,更无法找到对应正确的通信节点。
针对以上问题,对MetaStack进行优化。1:对排序后的节点列表进行还原,确保PMIX服务端的通信正常2:不光要保证通信正常,还要保证传输key-value值是正确的,修改openmpi接受的环境变量,解析task-to-node mapping值,并对其修正。
4.2.2 大规模作业结束优化
pmix作业启动失败/作业步异常退出/节点宕机时,除了头节点会向管理节点发送REQUEST_CANCEL_JOB_STEP外,所有计算节点清理完作业进程,都会再次向管理节点发送REQUEST_CANCEL_JOB_STEP,管理节点需要一一回复,大规模作业将会直接导致MetaStack服务端消息处理数量暴增从而影响MetaStack服务端的响应速率。
将作业的节点列表分为几个区域;每个区域中选出一个节点作为通讯节点;当某节点因此pmix启动失败或者errhandler需要发送REQUEST_CANCEL_JOB_STEP时,先发送消息到通讯节点,通讯节点将消息去重后,发送管理节点;如果通讯节点连不上,计算节点直接发消息到管理节点。
如果你对大规模下进程管理感兴趣,不妨试一试MetaStack调度系统,开源路径:https://github.com/cluslab/metastack。
原文地址:https://blog.csdn.net/qq_21394345/article/details/144313228
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!