ECMWF软件战略和路线图译注:2.2 软件栈重构
本文为《论文阅读:ECMWF软件战略和路线图2023-2027》的译注
原文
译注段落:2.2 软件栈重构
译注
现状
CEMC 基于自主知识产权的 GRAPES 模式已经建立一整套完备的数值天气预报业务体系,包括从全球到区域,从确定性预报到集合预报等 5 套业务系统[1]。 经过多年的系统开发也逐渐形成了一定的软件栈,为不同的业务系统提供支撑。
下图列出了译者了解的部分软件栈,包括 CEMC 内部开发的工具库,CMA 内部平台,以及一些开源库。 图中列出的软件栈主要集中到模式的前端和后端,即观测资源检索和模式数据处理和产品制作。 注意,图中不包括集成到 GRAPES 模式代码库中的组件,也不包括一些仅在内部有限范围内使用的软件平台。 另外,译者没有详细调研内部开发的所有软件,所以会有所遗漏。
图 CEMC 非数值模式组件的软件栈,不包含内部使用的一些 Web 软件平台。其中橙色为 CMA 系统内其他单位开发,蓝色为开源软件。
数据编解码
数据编解码层的核心工具是具有十多年开发历史的 GRIB 编解码工具库 grib-util。 该工具库已应用到所有以 GRAPES 模式为核心的业务系统中,每天生成 CMA 天气预报模式 GRIB2 格式数据产品。 在早期版本,grib-util 库使用 ECMWF 开发的 GRIB-API 实现对 GRIB2 格式的编解码,在 2023 年发的最新版本 V10.0 中,首次摆脱了对 GRIB-API 的替代,形成了具有完全自主知识产权的模式产品编解码库,已应用到最新的 CMA-MESO 1KM 系统中,并将在后续升级中应用到其他业务系统中。
数据编解码层的另一个工具是用于从 CMADaaS 检索观测资料的工具库 get-cmadaasdata。 该工具使用 Fortran 编写,是对 CMADaaS MUSIC 接口 Fortran SDK的封装。 该软件最早通过工程项目由项目承建公司开发,由 CEMC 前身 NWPC 维护,并通过后续工程项目支持进行功能扩展和完善。 在 CEMC 成立后,该工具的维护主体从研发部门逐步转移到译者所在的业务部门,也逐步带来了维护成本的显著上升,也坚定了译者对核心业务软件自研的认识。 软件更新需要首先验证结果的正确性,在缺少自动测试而必须人工验证的情况下,而如果开发者无法独立进行验证,则会因为需要协调专业人员进行验证而导致开发成本显著增加。 部门也尚未找到完善的更新维护方案,当然原因比较复杂,这里仅从译者自身角度出发来尝试说明一些问题。 最重要的一点是我不会 Fortran 编程,工作重点是开发 Python 工具软件,所以缺乏足够的动力仅仅因为维护现有工具类软件而去学习一门全新的编程语言; 另外,我在工程项目的整个周期中都没有参与其中,对该工具的技术路线也完全没有兴趣,也就没有必要在工程项目结束后接手“遗留软件”的后续维护工作。 正如本篇技术报告多次提到的维护成本问题,依赖项目承建方开发的软件一定要考虑后续维护的问题,不能只停留在应该做什么这一层,而需要进一步考虑怎么做的问题。 当然,作为部门承担的任务,get-cmadaasdata 目前也在持续维护中。 不过,部门已经开始使用 Python 重新编写观测资料检索工具库,并计划完全替代 Fortran 版本的 get-cmadaasdata,从而解决这一技术债务。
可视化
气象领域特定层的工具软件大多直接集成到 GRAPES 模式中,这里仅列出译者关注的数据可视化工具。 目前 CEMC 业务系统主要使用开源气象绘图软件包 NCL 和 GrADS 绘制业务图片产品。 CEMC 对 GrADS 进行了一定的扩展,解决了 GrADS 打印中文的问题 [2]。 同时,CEMC 基于 NCL 开发了一套绘图包 ncllib,封装了变量提取、底图绘制、中国地图等相关函数,也在逐步将部分 GrADS 绘图脚本改为 NCL 脚本。 但遗憾的是,因为 CEMC 长久以来都采用按数值模式切分系统的管理模式,绘图脚本分散在多个部门,再加上 NCEP 已经放弃 NCL 开发,业务系统中从 GrADS 到 NCL 的替代过程实际上已经停滞。 另外,因为 NCL 较高的学习成本,业务系统使用的 ncllib 工具库也没有积极在内部推广使用,CEMC 研发工作仍大量使用 GrADS。 这就造成了研发与业务之间在数据可视化上的不一致,研发人员基本无法自行绘制业务图片产品,从而要求业务系统归档图片产品,而业务工具开发人员无法从更广泛的用户中获得正向反馈,从而失去继续更新完善工具的动力。 好在随着气象大模型的火爆发展, Python 在气象领域变得越来越流行。 CEMC 业务系统中的少部分图片使用 Python 开源库 Matplotlib 绘制,图中的 GetPy 也是基于 Python 开发,研发人员也逐渐开始用 Python 进行绘图。 所以,可以再一次尝试统一绘图工具,面向研发和业务需求开发一款基于 Python 的绘图工具包,从而实现业务绘图风格的统一,并在研发工作中推广使用。
应用与服务
在应用和服务方面,CEMC 数值天气预报业务系统使用 ECMWF 开发的工作流调度软件 ecFlow 管理每天近十万个作业。 数据获取和分发由 NMIC 开发的 CMADaaS 平台负责,业务系统使用 CMADaaS 的 MUSIC 接口检索数据,或者直接使用 CTS 推送到 HPC 的观测资料,并将产品通过 CTS 发送给 CMADaaS 平台。 CEMC 开发了多个应用和平台,包括检验评估工具 GetPy [3],数值预报科创平台 ESMI,模式格点数据分析系统 GODAS。 这些平台和应用最初都是独立开发的,但分散开发的工具往往较难推广。 经过 CEMC 成立 2 年以来的实践,目前已将 ESMI 平台作为内部成果的汇集平台,已经集成 GetPy 工具的 MESO 模式检验功能,并正在引入 GODAS 的成果来管理模式试验数据。 下一步将在 ESMI 中集成更多的内部开发工具,借助 ESMI 实现底层工具库的复用,减少重复开发。
计划
虽然 CEMC 的模式产品输出已通过 grib-util 工具库统一为 GRIB2 格式,但作为模式输入的观测资料尚未形成统一的数据格式。 大部分图片产品依赖已经停止更新的 NCL 工具库,并且使用 NCL 和 GrADS 两种绘图包导致业务图片产品的风格不一致,也很难与 CMADaaS 的 MUSIC 接口及 Python 生态系统集成。 应用平台大多依靠第三方来建设,各项目独立设计开发,缺乏模块和工具的复用,造成重复建设。 整体规划项目技术路线属于中心层面的工作,译者仅讨论在缺乏统一技术规划的背景下在 Python 工具栈方面可以开展的一些工作。
图 正在开发中的 cedarkit 系列软件栈,仅包含开源或计划开源的项目。暂定名称,未来可能会有变动。其中绿色为新开发的软件,蓝色为已有软件。
参考文献
[1] 张进, 孙健, 沈学顺, 等. CMA-GFS V4.0模式关键技术研发和业务化. 应用气象学报, 2023, 34(5): 513-526. DOI: 10.11898/1001-7313.20230501.
[2] 邓莲堂, 2010. GrADS绘图汉字显示的技术研究与实现. 气象, 36(11): 115-119. DOI: .
[3] Zhao, B., Hu, J., Wang, D. et al. The GRAPES evaluation tools based on Python (GetPy). CCF Trans. HPC 5, 347–359 (2023). https://doi.org/10.1007/s42514-022-00127-7