基于工作流的气象超算作业调度应用研究

2022-09-16 06:50赵春燕肖华东
计算机技术与发展 2022年9期
关键词:数值组件节点

赵春燕,孙 婧,肖华东,周 斌,王 彬

(1.国家气象信息中心,北京 100081;2.中国气象局地球系统数值预报中心,北京 100081)

0 引 言

数值天气预报是气象核心业务,当前,中国气象局建立了从全球到对流尺度[1]短时到中期、确定性到集合[2]的GRAPES[3](Global/Regional Assimilation PrEdiction System)国家级数值天气预报业务[4]体系,基于中国气象局“派-曙光”超算系统[5-6]业务运行和研究开发。“派-曙光”于2018年试运行,峰值计算能力为8 189.5 TFLOPS,承担了中国气象局多项数值天气预报业务和科研。数值天气预报系统的运行流程包括数据预处理、资料同化、模式预报、后处理、产品制作、产品分发和归档等多个复杂有依赖的环节,涉及基于超算环境[7]大量科学计算和复杂的流程控制,为了保障数值预报系统的正常高效运行,需要建设高效、稳定的工作流和监控。

科学工作流[8](Scientific Workflow,SWF)将复杂的流程按照逻辑关系与依赖关系进行抽象描述并在约束条件下实现自动化的按序执行,已经成为复杂科学计算流程管理的必要手段。科学工作流管理系统(SWFMS)为科学工作流提供了工作流定义、过程协调、作业调度与执行、资源跟踪和容错功能。在各领域科研发展需求的推动下,国内外发展了多种适用于本领域的工作流管理系统[8-9],探索了基于超算的融合应用[10-13],并延伸到云服务平台[14-15]。

气象领域也对工作流的研究应用进行了探索和发展[16-17],目前广泛采用的有两种工作流引擎,欧洲中期天气预报中心(European Centre for Medium-Range Weather Forecasts,ECMWF)的开源软件ecFlow[18],以及新西兰NIWA(National Institute of Water and Atmospheric Research)和英国气象局开发的开源软件Cylc[19]。二者采用不同的技术路线,ecFlow为C/S架构,主要基于图形界面和命令行使用,在作业定义方面和脚本语言进行了很好地兼容,与模式传统的运行方式更容易耦合实现工作流的开发。Cylc采用分布式体系结构[20],提供图形界面和命令行,具有较低的管理开销,支持跨工作流触发。目前英国气象局采用Cylc进行工作流管理,ECMWF、欧洲成员国、美国国家气象中心、中国气象局、海军海洋水文气象中心、空军气象中心、总参气象局等机构均采用ecFlow进行工作流管理。

数值预报系统传统的编译运行流程采用脚本控制程序的执行,执行过程需要人工干预,难以自动流程化运行,并且缺乏监控管理,繁琐易错。数值预报业务具有定时启动、循环滚动、依赖较强、时效性高且由专门运维团队统一管理维护等特点,而数值预报模式研发则是需求复杂多样,由不同的研发人员开展。为了保障数值预报业务正常高效运行,提高业务运维效率,中国气象局的核心数值天气预报业务系统已基于ecFlow工作流引擎实现了流程化调度运行和监控[21]。而“派-曙光”超算平台上,业务作业与科研作业的资源使用占比约为1∶3,大量的科研作业尚缺乏高效的作业运行管理和监控。因此,基于ecFlow建立超算平台的工作流环境,快速实现业务和科研应用工作流的设计开发,实现工作流的自动化调度运行,对支撑数值预报业务的稳定高效运行和提升数值预报业务科研向业务转化效率至关重要。

1 气象超算工作流环境设计

1.1 气象“派-曙光”超算系统架构

中国气象局“派-曙光”超算系统为Cluster架构,采用通用Intel CPU处理器,划分为业务和科研两个互备的子系统来提高业务可靠性,共享两套Parastor存储集群。每个子系统包含1 504个计算节点,24个前后处理节点,10个登录节点,8个管理节点。内部计算网络采用InfiniBand高速计算网络互联,用户通过局域网接入“派-曙光”超算系统的登录节点访问超算资源。“派-曙光”超算采用Sugon Gridview(Slurm)作业管理软件进行作业在计算节点的分发和调度。

1.2 工作流运行机制

ecFlow为C/S架构的软件,兼容多种平台,主要包括可视化客户端(ecflow_ui)、服务端(ecflow_server)、命令行客户端(ecflow_client)。工作流运行机制如图1所示,命令行客户端主要提供作业的加载、提交运行、作业替换、状态查看、作业删除及与服务器交互等功能。可视化客户端主要提供作业的监控和展示,以及作业信息展示、日志查看、告警等功能,服务端实现作业的编排、生成、提交、状态获取跟踪以及用户管理。

图1 工作流运行机制

工作流定义的规范组件一般包括工作流定义文件(.def)、任务组件(.ecf),以及预处理文件(.h)。命令行客户端加载作业定义文件后,获取全局变量的定义,定位到预处理文件及作业文件,识别关键字信息,解析作业并根据属性及触发关系编排作业任务,形成执行流程及任务的.job实例文件,调度超算的作业管理软件提交运行,并根据定义的异常捕捉模块,触发异常告警。采用工作流描述语言表述工作流定义。各级节点可表示为suite(作业包)、family(作业族)和task(任务)元素。suite为根节点,用来表示整个业务流程;family用来表示某些功能模块的逻辑集合;task代表业务流程中最小的监控管理单元,对应具体作业。定义触发器trigger和节点属性来描述作业之间的触发关系及作业的特性。

1.3 超算工作流环境设计

根据工作流的运行机制、不同的超算架构环境以及应用场景需求,提供三种适用于超算的工作流环境的设计实现方法。

1.3.1 超算内部署设计

命令行客户端及服务端均部署在超算的登录节点(如图2所示),用户启动服务端进程后,在登录节点完成作业定义,调用命令行客户端加载和提交作业,并可直接启动可视化客户端对作业进行监控。该方案的优点是用户可在登录节点便捷的使用,灵活且效率高,缺点是受限于该超算系统内调度,以及受限于超算架构下登录节点的有限性,通常为了保持超算体系的稳定性,很多非科学计算及辅助分析的其他应用类软件会被限制使用。

图2 超算内部部署方案

1.3.2 客户端独立远程部署设计

命令行客户端部署在超算外的Linux服务器(集群),服务端部署在超算系统登录节点,客户端所在Linux服务器或集群节点与服务端超算系统登录节点建立互信,用于实现免密访问及作业传输,技术方案如图3所示。用户在Linux服务器(集群)编写完成作业定义文件并同步到超算系统的共享文件系统,调用命令行实现作业的远程提交。该方案的优点是用户端独立于超算系统部署,对于限制用户直接登录超算的使用方式较为适合,易于扩展对多套超算的支持,同时便于与其他应用软件集成应用,缺点是需要远程操作辅助,安全性要求较高。

图3 客户端独立远程部署方案

1.3.3 共享存储远程部署设计

共享存储的远程部署设计如图4所示。设立接入超算架构的独立Linux集群,该集群一般作为用户交互处理的专用集群,具备和超算登录节点同样的软件环境配置(Slurm软件、编译器等)、与超算系统设有共享文件系统和高速互联网络连接。在该集群部署ecFlow客户端和服务端,并在该集群节点实现作业的定义、提交、分发运行和监控。该方案的优点是Linux集群具备相对的独立性,易扩展调度到多套超算系统,可将用户交互与超算登录节点隔离,集群易扩展不影响超算稳定性。缺点是需维护与超算互联的网络及存储成本。

图4 共享存储远程部署方案

2 数值预报系统流程调度

建立工作流支撑环境后,结合数值预报业务及科研需求,完成模式运行流程设计实现。

2.1 气象数值模式运行流程特征

气象数值模式运行流程一般包括数据准备、数据前处理、资料同化、模式计算、数据后处理、产品加工、归档、运行资源清理等过程,运行流程特征有定时启动、循环运行的特点,作业存在多种触发关系、业务时效性要求高。任务有串行作业、并行作业,运行时间较长的作业,如气候模式积分需要进度监控,小作业如后处理具有并发数大的特点等,业务运行时效性高,故障需要及时告警和处理。运行资源层面,需要结合作业管理软件实现作业分发。模式采用脚本方式运行,控制循环、单次运行、进行参数设置和参数计算处理、提交作业等。

2.2 工作流设计原则

基于数值预报业务系统及科研作业的工作流设计经验,总结了七条设计原则,包括业务流程的模块化结构设计、标准化命名、高可读性属性添加、运行效率调优、高质量的运行日志设计、容错设计和复用设计。

2.2.1 模块化结构设计

按照数值预报模式的运行流程,采用模块化设计,通过对各功能模块进行抽取,将完成同一或类似功能的各功能模块进行归类,使用family表示可逻辑组合的功能模块的集合,形成数值预报业务流程的树形层次结构。

一般将流程规划为数据准备、数据前处理、资料同化、模式计算、数据后处理、产品加工、归档、运行资源清理等过程。模块化的结构设计,能够清晰地表达整体流程的逻辑,快速定位到出现问题的环节,更具可读性和可维护性。

2.2.2 标准化命名

流程、模块及任务的命名实行标准化命名。业务系统的流程以模式名称_版本号_分辨率表示,科研作业的流程以试验ID表示,模块及任务的命名如数据准备阶段的family应命名为get,family下的作业或作业族可命名为“get_*”,*为所操作的具体数据类型。流程和模块和标准化的命名使工作流可读性提高,有助于高效定位故障,提高运维效率。

2.2.3 高可读性属性添加

属性用于给作业包中的作业族或作业添加具体描述,实现模式业务运行流程作业的监视信息提示。包括标签(Label)、标尺(Meter)、延迟(Late)等。标签属性用于在监控界面中显示作业包、作业族和作业的运行信息,并显示在作业的状态日志信息中。延迟属性用于解决作业运行时间超过正常运行时间的情况。标尺用于进度跟踪,如气候、天气模式计算部分需要较长的积分的部分,添加标尺提示积分进度。相应后继工作部分可通过积分进度达到一定进度或比例即可触发。如后处理,在积分数据输出后,就可以开始进行后处理及产品加工等,合理的标尺设计,能够在很大程度上提高运行时效。

2.2.4 运行效率调优

作业数量控制(inlimit)属性用于工作流流程负载管理,对同时提交的作业数量进行限制,如后处理中包含大量的小作业,通过设置inlimit限制作业最多同时运行的个数,以提高运行效率。通常用于串行作业,根据节点核数调整并发数。

2.2.5 高质量运行日志设计

在故障排查时,通常使用监控界面的Output界面功能,查看Task的运行日志及错误日志,高质量的日志设计支撑精确的故障排查。一般包括输出日志、Task运行的节点信息、结果信息等,错误日志一般需要将Task的每步执行输出进行记录。如前述,Task应作为最小的监控粒度,Task内部不再嵌套脚本,嵌套的脚本无法逐行跟踪输出,不利于故障排查。

2.2.6 容错设计

对业务和科研而言,良好的容错设计,是保障运行流程能够正确运行的基础。容错体现在各个流程环节,如数据准备阶段,通常设置数据源的容错,检测到数据缺失,则更换数据源获取方法。计算资源故障容错,如设置业务系统的重交次数,一般设为3,如计算节点故障导致作业提交失败,作业会自动重交。

2.2.7 复用设计

复用设计体现在多个方面,包括变量的复用、路径信息的复用、作业卡定义的复用、作业提交复用,以及任务的复用等。如在后处理中,大量的小任务都是复用的,仅时间变量或数据路径变量发生变化。任务卡一般包括队列信息、节点信息、作业描述、资源量信息等,一般定义为头文件,将可替代的变量进行传递设计,提供给各个任务复用。良好的复用设计,可以支持工作流的快速建立和改造。

2.3 数值预报系统流程设计与实现

为了支撑模式研发、业务和运维的一体化,解决研发试验没有监控的问题,设计实现了数值预报模式集成中试支撑平台[22],开发了模式运行流程的关键模块运行任务组件库,用户基于该交互参数构建工作流并调用任务组件,完成基于工作流的科研作业运行监控管理。

2.3.1 技术路线简述

数值预报模式集成中试支撑平台用户交互界面采用wxPython框架实现,服务端采用Python开发。如图5所示,平台的交互界面设计实现数值模式作业工作流流程的交互构建,并集成了ecFlow的可视化监控界面监控工作流执行过程。平台服务端的工作流生成器负责完成工作流的构建和组织,实现用户交互参数的解析和工作流生成,传递参数并生成工作流定义文件,调用气象数值模式工作流任务组件库相应任务组件,拼装生成工作流。根据气象数值模式运行流程特征和标准化过程,工作流生成器预定义了流程中各个模块之间的触发关系及各个模块需执行的任务。由工作流引擎管理器通过调用ecFlow API实现工作流引擎的交互管理,包括工作流的提交、运行、工作流引擎状态检测、启停等。工作流引擎调度工作流的运行,并将作业提交到超算系统的作业管理软件分发执行。

图5 数值预报模式集成中试支撑平台工作流实现技术路线

2.3.2 流程设计实例

基于数值预报模式集成中试支撑平台界面交互构建气象数值模式的工作流过程主要包括界面交互构建工作流、工作流生成器生成工作流定义、工作流加载执行和运行监控三部分。

(1)界面交互构建工作流。

界面交互勾选气象数值模式运行的模块(如图6所示),并设置循环参数(运行时次)等基本参数、资源参数及各个模块的运行参数等。

(a)流程构建 (b)资源参数设置

(2)工作流生成器生成工作流。

工作流生成器的实现为平台核心部分,采用Python封装ecFlow API二次开发,实现工作流定义文件的生成。包括工作流变量传递、作业提交方法(串行作业、并行作业和直接运行作业)、family生成、task生成和触发器等属性添加方法,如图7所示。

工作流生成器生成以试验ID标识的试验流程suite,根据循环参数设置生成循环时次的family,根据勾选的模块生成每个时次内包含的数据预处理(prep_data)、资料同化(analy)、模式计算(model)和归档(archive)等family,按照预定义添加触发依赖关系,根据交互配置的运行参数,在family中定义需调用的任务组件名称并添加触发关系,生成工作流定义文件,并完成工作流定义文件、参数预处理文件、任务组件的结构化组织。

组件库主要包含工作流所需的预处理文件和任务组件。采用模块化、标准化、可复用标准开发。主要包括编译组件、数据预处理组件、资料同化组件、模式计算组件、归档组件等,如图8所示。以模式计算中的fcst_monitor任务为示例(图7)说明任务组件的实现,包括head.h和tail.h等预定义文件的引用、configure.h参数文件的引用,以及流程定义中MODEL_DT、FCST_LEN变量的引用,中间部分为具体操作的任务脚本实现。

图7 工作流生成器及任务组件实现示意

图8 GRAPES全球模式科研试验工作流任务组件库设计及工作流触发关系

(3)工作流加载执行及运行监控。

通过交互界面提交工作流,工作流引擎管理器调用ecFlow API检测工作流引擎服务状态,将工作流部署到超算的试验空间,与工作流引擎交互执行作业命令,完成工作流的提交运行。通过交互界面调用ecFlow的可视化监控界面实现工作流的运行监控及告警。

3 应用实效

数值预报模式集成中试支撑平台实现了主要天气模式GRAPES全球模式、GRAPES中尺度模式、WRF模式、气候MOM5模式等科研试验工作流的构建运行及监控。图9所示为GRAPES全球模式科研试验工作流监控界面,试验工作流按照设计的流程和组件生成和组织,并调度执行。如模式面输出数据归档模块,在模式积分20步时即开展数据归档,提高了并行度。以不同的颜色标识运行的状态,对异常以红色告警,便于科研人员及时排查故障,根据模块化设计和高质量的日志输出,能够快速定位故障并处理,提高了科研效率和资源效率。

图9 GRAPES全球模式科研试验工作流监控界面

4 结束语

从数值预报业务和科研作业运行需求和问题出发,研究了基于工作流的超算作业调度应用,提出了三种超算平台建立工作流环境的方法并给出了适用的应用场景,根据建设经验提炼总结了工作流设计原则,并给出了工作流设计开发实例,能够较为科学地指导工作流的设计开发,为不同架构超算及不同应用需求的工作流应用提供借鉴。

基于数值预报模式集成中试支撑平台实现了科研作业在“派-曙光”超算上基于工作流的流程化调度应用,可以有效地支持数值预报业务和科研应用的流程控制管理及监控,提高了数值预报业务和科研效率。同时,基于工作流的模式作业信息如资源信息、开始时间、结束时间、运行时间、故障信息,以及基于时间序列的特征等信息能够被更加精细的获取和记录,下一步将开展基于大数据技术及人工智能技术的应用作业数据的分析挖掘和智能分析。

猜你喜欢
数值组件节点
Android系统上移动组件化应用框架设计
体积占比不同的组合式石蜡相变传热数值模拟
分区域的树型多链的无线传感器网络路由算法
数值大小比较“招招鲜”
创建Vue组件npm包实战分析
智能机械臂
舰载雷达TR组件冲击计算方法分析
舰船测风传感器安装位置数值仿真
铝合金加筋板焊接温度场和残余应力数值模拟
基于移动汇聚节点和分簇的改进节能路由算法