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 提供:
相关工作:
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 的示例:
esm_tools/configs/machines/mistral.yaml
esm_tools/configs/other_software/git.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-Tools 的 Python 包:
esm_master
,用于下载、配置和编译的工具esm_runscripts
,解析 runscripts,准备和执行模拟实验,排序结果等esm_versions
,管理 Python 包版本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 配置文件包含模式的各种信息 (元数据,编译,运行,。。。),可用于生成描述文档或 how-to codebook。
额外的 YAML 解析器具有如下功能:
ESM-Tools 的函数和配置文件满足下列准则:
编译
esm_master
提供统一的编译方法,用户无需知道编译细节。
esm_master install-awicm-2.0
命令输出,图片来自论文
esm_master 工具的结构,图片来自论文
运行
esm_runscripts
工具实现用于建立运行 ESM 模拟的所有阶段的函数,包括
esm_runscripts 执行的任务,图片来自论文
在线监视
esm_viz
工具用于调度对 ESM 模拟的自动监控,可以提供
可以运行在超算外。后续论文会有更详细介绍。
图形用户界面
GUI 工具,图片来自论文
模式分量,图片来自论文
耦合模式,图片来自论文
ESM-Tools 是一个外部工具,不修改模式本身。该工具 不是什么:
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 官方网站:
https://www.esm-tools.net/
题图由 Nicolae Baltatescu 在 Pixabay 上发布。