论文阅读:模式运行工具 ESM-Tools
ESM-Tools version 5.0: a modular infrastructure for stand-alone and coupled Earth system modelling (ESM)
Barbi D, Wieters N, Gierz P, et al. ESM-Tools version 5.0: a modular infrastructure for stand-alone and coupled Earth system modelling (ESM)[J]. Geoscientific Model Development, 2021, 14(6): 4051-4067. https://doi.org/10.5194/gmd-14-4051-2021
论文介绍一款用于地球系统模式工作流和基础设施管理的工具 ESM-Tools,用于在多种不同的 HPC 环境中下载、配置、编译、运行和监控地球系统模式的分量模式和耦合模式。
ESM-Tools 的目标是帮助科研用户快速运行模式,用户仅需提供少量脚本即可运行完整的模拟实验。 该工具利用模式现有的配置接口,不对模式本身进行修改,通过 YAML 配置文件提供对不同模式的支持,核心代码与具体的模式无关。 对于我们正考虑构建模式系统统一运行流程来说,ESM-Tools 是非常合适的参考工具。
以下正文章节摘自论文,并根据笔者个人理解所有删改和整合。
正文
介绍
地球系统模式 (ESM) 应用的完整流程包括:
- 获取并编译所有源代码
- 管理输入数据和配置文件
- 提交可执行程序到一个多处理器系统
- 监控并记录运行过程
- 管理 / 后处理模式输出
ESM-Tools 通过单独的脚本提供典型任务的标准解决方案,例如:
- 日历计算
- 数据后处理
- 监控
- 完整性检查
- 排序和归档输出
- 离线耦合
ESM-Tools 提供标准化框架,用于在不同的 HPC 上为 ESM 提供:
- 下载
- 配置
- 编译
- 运行
- 分析/监视
相关工作:
- ScriptEngine:使用 YAML 配置文件,不提供下载和编译
- MESSy:提供实现 ESM 的通用接口,属于内部工具
- MOSSCO:耦合器
- Mkexp:生成脚本,由用户提交,脚本较长
- ESMF:ESM 框架
概述
ESM-Tools 软件分为三个主要部分。
esm_tools:YAML 配置文件 + 安装 + 文档
包含 YAML 文件集合,提供安装脚本用于安装包含实际代码的 Python 包。
git clone https://github.com/esm-tools/esm_tools.git
cd esm_tools
./install.sh
esm_master:下载、配置和编译
代码不包含特定的模式或 HPC 环境,使用 esm_tools 中的配置文件。 例如 FESOM-2 的示例:
- 硬件和软件栈配置,依赖机器环境的 YAML 文件。对于 mistral.dkrz.de,文件放在
esm_tools/configs/machines/mistral.yaml
- 关于 git 如何工作的信息,
esm_tools/configs/other_software/git.yaml
- 项目名称,默认分支,编译设置和必要的依赖模式的环境变更,component YAML 文件,
esm_tools/configs/components/fesom/fesom-2.0.yaml
命令:
esm_master install-fesom-2.0
esm_runscript:运行 + 工作流
用户提供非常短的运行配置,YAML 文件或 Shell 脚本,esm_runscript 会运行模式模拟的完整工作流。
配置文件示例
general:
setup_name: fesom
compute_time: "00:08:00"
initial_date: '2001-01-01'
final_date: '2001-03-31'
base_dir: "/work/ollie/dbarbi/esm_yaml_test/"
nyear: 0
nmonth: 1
use_venv: False
fesom:
version: 2.0
model_dir: "/work/ollie/dbarbi/modelcodes/fesom-2.0/"
pool_dir: "/work/ollie/pool/FESOM/"
mesh_dir: "/work/ollie/pool/FESOM/fesom2.0/meshes/mesh_CORE2_final/"
res: CORE2
lresume: 0
restart_rate: 1
restart_first: 1
restart_unit: 'm'
post_processing: 0
esm_runscript 也使用 esm_tools 中的 YAML 配置文件获取信息。 运行模拟试验:
esm_runscripts myrunscript.yaml -e EXPID
ESM-Tools 优点:
- 将运行 ESM 试验准备时间从 3-4 周提前到 1-2 天,有经验用户可以在几小时内运行新试验
- 减少切换到不同模式或耦合系统的时间。不同模式工作流保持不变
- 帮助管理模式数据
- 模式研发人员和系统管理员可以共享对模式组件的修改
实现和配置
配置与程序分离,提供模块化、可扩展的工具:
- 配置:独立的 YAML 文件
- 程序:使用 Python 编写,与模式和 HPC 环境无关
Python 实现
ESM-Tools 的 Python 包:
- esm_master:可执行程序
esm_master
,用于下载、配置和编译的工具 - esm_runscripts:可执行程序
esm_runscripts
,解析 runscripts,准备和执行模拟实验,排序结果等 - esm_version_checker:可执行程序
esm_versions
,管理 Python 包版本 - esm_environment:组装编译或运行需要的环境
- esm_parser:YAML 配置文件解析器,执行列表展开,基础数学运算,条件解析等
- esm_calendar:基本日历函数
- esm_plugin_manager:插件功能。用户可以编写自己的 Python 代码,并通过 YAML 配置文件修改
esm_runscripts
的工作流。
下面代码截取自 esm_runscripts.yaml
,展示 compute 作业的工作流
compute:
recipe:
- "venv_bootstrap"
- "_create_setup_folders"
- "_create_component_folders"
- "initialize_experiment_logfile"
- "copy_tools_to_thisrun"
- "compile_model"
- "_copy_preliminary_files_from_experiment_to_thisrun"
- "_show_simulation_info"
- "create_new_files"
- "prepare_coupler_files"
- "add_batch_hostfile"
- "assemble"
- "log_used_files"
- "_write_finalized_config"
- "copy_files_to_thisrun"
- "modify_namelists"
- "modify_files"
- "copy_files_to_work"
- "write_simple_runscript"
- "report_missing_files"
- "database_entry"
- "submit"
YAML 配置
所有已知信息都包含在 YAML 配置文件中,比如:
- 模式分量和耦合安装
- HPC 系统和批处理系统
- 使用的外部软件
- ESM-Tools 自身的配置
YAML 配置文件包含模式的各种信息 (元数据,编译,运行,。。。),可用于生成描述文档或 how-to codebook。
额外的 YAML 解析器具有如下功能:
- 仅解析部分内容
- 变量替换
- 列表解析
- 数学表达式
ESM-Tools 的函数和配置文件满足下列准则:
- 用户友好 (User-friendly):Python + YAML + 插件
- 模块化 (Modular): 模式分量独立,可以任意修改项目 URL。模式、分量可以单独运行。信息和功能分离。
- 可移植 (Portable):可以运行在不同的计算机架构中
- 可维护 (Maintainable):函数简短
- 可扩展 (Extendable):模块化,使用 YAML 配置,插件管理器
- 性能 (Performance):不影响模式性能
结构和架构
编译
esm_master
提供统一的编译方法,用户无需知道编译细节。
esm_master install-awicm-2.0
命令输出,图片来自论文
esm_master 工具的结构,图片来自论文
运行
esm_runscripts
工具实现用于建立运行 ESM 模拟的所有阶段的函数,包括
- 准备模拟安装
- 运行模式,提交到批处理系统
- 监视
- 后处理
esm_runscripts 执行的任务,图片来自论文
在线监视
esm_viz
工具用于调度对 ESM 模拟的自动监控,可以提供
- 绘图:气候平均和时间序列图
- 作业概览:预计完成时间,精确排队时间,实际模式吞吐量和相关日志文件链接
可以运行在超算外。后续论文会有更详细介绍。
图形用户界面
GUI 工具,图片来自论文
支持模式、耦合系统和 HPC 环境
模式分量,图片来自论文
耦合模式,图片来自论文
讨论
ESM-Tools 是一个外部工具,不修改模式本身。该工具 不是什么:
- 耦合器
- 自动耦合工具
- 模式编译系统 / 运行脚本的替代品
- 通用接口的编程标准或集合,该部分属于 esm_interface 项目
讨论
ESM-Tools 的实现方式非常值得借鉴,使用 Python 编写核心功能,并通过 YAML 配置文件保存模式等具体信息。
我们一直在考虑构建一套统一的模式系统运行流程工具库,整合目前分散的业务系统流程,共享通用组件,提高业务系统建设和维护效率。 目前开发的中试平台系统也正朝着这个方向努力。 与 ESM-Tools 工具类似,中试平台为研发人员提供更方便的模式试验运行方式,功能涵盖从源码下载、编译、环境准备、运行监控、诊断分析等模式研发全流程。 中试平台同样直接使用业务运行流程和运行脚本 (基于 ecFlow),不对模式本身进行修改。 我对中试平台非常有信心,随着集成的模式越来越多,困扰我们多年的研发试验和业务运行脚本不统一 (shell vs ecFlow) 的问题有望得到根本解决,从研发到业务的转化也就不会像现在一样耗时费力。
相对于 C/S 架构或 B/S 架构软件平台,我更偏向于 ESM-Tools 这种提供命令行工具集的方式。 集成软件平台的很多功能组件都可以拆成独立使用的工具,小工具往往更容易集成到其它工作流程中。 我们目前开发的软件平台大多采用自顶向下的设计思路,以覆盖全流程为目标,导致项目耦合太紧密,一个项目的组件很难被其他项目使用。 比如,我非常期待中试平台构建试验流程的相关组件可以推广应用到所有业务系统的流程建设中。 可能是因为个人能力,我目前认为软件平台的开发更适合从底向上,通过开发多个类似 ESM-Tools 的小工具,将其最终组合成一个大的软件工程项目。 先有工具集的基础,对常见任务都提供统一的解决方案,才能更好地约束和规范软件工程项目开发,避免重复建设,也更利于我们掌握核心技术。
参考
论文地址:
https://gmd.copernicus.org/articles/14/4051/2021/gmd-14-4051-2021.html
ESM-Tools 项目地址:
https://github.com/esm-tools/esm_tools
ESM-Tools 文档:
https://esm-tools.readthedocs.io/
ESM-Tools 官方网站: