天气和气候预测的准确性越来越重要。 提前对极端天气做出预测可以帮助人们准备从而减少极端天气带来的负面影响,HPC和天气与气候的建模能力的增强是天气和气候预测的关键。其中NEMO是EU和UK最知名的海洋建模和作业预报应用程序。
传统意义上来讲,像NEMO这样的模型需要使用具有1000个计算核心的大型本地HPC系统运行的,但是越来越多的气象研究人员正在寻找将应用程序迁移到云中的方法[1]。本文讨论了NEMO在基于Arm's Neoverse N1内核的AWS Graviton2处理器上的性能。
NEMO的背景
NEMO(欧洲海洋建模核心)给海洋学研究,海洋学季节性预报和气候研究提供了一个广泛的框架。自2008年以来,NEMO由以下五个欧洲机构组成的财团开发:
- 欧洲地中海气候变化基金会(CMCC)
- 国家科学研究中心或CNRS(国家科学研究所中心)
- Mercator Ocean
- 英国气象局
- 英国自然环境研究委员会国家海洋学中心(NERC-NOC)
NEMO 海洋模型主要由三部分组成:
- 海洋动力学和热力学以及原始方程组求解器(NEMO-OPA)
- 具有亚网格规模的海冰热力学模拟器和原始方程求解器(NEMO-SI3)
- 在线/离线海洋示踪剂输运和生物地球化学过程求解器(NEMO-TOP / PISCES)
- 这种灵活的框架使NEMO成为在各种时间和空间范围内学习海洋和它与地球气候系统其他组成部分(如大气,海冰,生物地球化学示踪剂)之间相互作用的工具。
NEMO源代码
可通过SVN获得NEMO版本4.0.1:
svn co http://forge.ipsl.jussieu.fr/nemo/svn/NEMO/releases/release-4.0.1
该代码在带有MPI的Fortran中实现并行化。 NEMO还需要以下外部库:MPI发行版(例如Open MPI,MPICH等),HDF5,NetCDF-C和NetCDF-Fortran。
构建NEMO
我们将使用Gnu编译器工具链(GCC)来保证在使用不同CPU架构的情况下进行公平的代码生成和性能对比。下面我们将要描述怎样构建NEMO源,并且我们假设Open MPI 4.0.3,HDF5-1.10.5,NetCDF-C-4.7.0和NetCDF-Fortran-4.4.5的安装已经就绪。
Arm社区的GitLab页面上有如何构建NEMO的说明。 NEMO使用英国气象局开发的FCM系统。 因此,在开始构建之前,我们只需要在目录中创建配置文件。
release-4.0.1/arch/
此例子描述了GCC配置文件(arch-aarch64_gnu.fcm
),对于AWS Graviton2用以下代码设置:
%FCFLAGS -mcpu=neoverse-n1 -fdefault-real-8 -fdefault-double-8 -Ofast -funroll-all-loops -fcray-pointer -ffree-line-length-none -g
请注意对于非基于Arm的处理器,我们需要用-march=native
来代替-mcpu=neoverse-n1
NEMO基准
用于此测试的两个NEMO基准都随NEMO来源一起分发。第一个基准是被称为BENCH-1设置为1°分辨率的BENCH测试。技术报告[2]中对这个有9,013,800个网格点的测试进行了描述。它在实现数值稳定性方面具有鲁棒性,因此非常适合基准测试和性能分析。第二个基准是被称为GYRE\_PISCES\_25设置为25°分辨率的GYRE\_PISCES配置测试。 这是代表北半球双回转的理想配置。使用beta平面时,规则栅格间距为25°,水平分辨率为101个垂直水平面。 该模型受分析热,淡水和风应力场的影响。 该配置具有37,875,000个网格点并与PISCES生物地球化学模型耦合[3]。
这些基准测试可以从release-4.0.1/
目录 建立
BENCH-1
./makenemo -m aarch64_gnu -a BENCH -n 'MY_BENCH_gnu' del_key key_iomput add_key key_nosignedzero<span class="colour" style="color: rgb(51, 62, 72);"><span class="size"></span></span>
GYRE\_PISCES\_25
./makenemo -m aarch64_gnu -r GYRE_PISCES -n 'MY_GYRE_PISCES_gnu' del_key key_iomput add_key key_nosignedzero
构建成功后,一个关于BENCH-1的新目录将被生成。
release-4.0.1/tests/MY_BENCH_gnu/EXP00
以下是GYRE\_PISCES\_25 的新目录
release-4.0.1/cfgs/MY_GYRE_PISCES_gnu/EXP00
在这些目录中,有一个指向可执行 nemo
符号链接。
为了进行性能比较,我们在多个AWS HPC实例(分别是m6g.16xlarge,m5a.16xlarge,m5.16xlarge,m5n.16xlarge和m4.16xlarge)上运行BENCH-1和GYRE\_PISCES\_25。 每个实例类型都有64个vCPU(一个vCPU对应于1个CPU内核),256GiB内存,AWS增强网络和弹性块存储(EBS)文件系统
AWS实例 | 处理器 | 网络带宽(Gbps) | EBS带宽(Gbps) |
m6g.16xlarge | Graviton2 | 25 | 19 |
m5a.16xlarge | AMD EPYC 7571 | 12 | 9.5 |
m5.16xlarge | Intel® Xeon® Platinum 8175m | 20 | 13.6 |
m5n.16xlarge | Intel® Xeon® Platinum 8259m | 75 | 13.6 |
m4.16xlarge | Intel® Xeon® E5-2686 | 25 | 10 |
单节点性能
BENCH-1和GYRE\_PISCES\_25都在单个节点上运行,并且对I / O效应不敏感。 除了m6g.16xlarge(GCC 9.2),我们还使用GCC 9.3在所有实例上构建NEMO。 图1显示了BENCH-1测试用例的解决时间,其中解决时间越短越好。
AWS Graviton2在所有测试目标中达到最好的性能。 Graviton2较大的(64kvs32k)L1高速缓存对其有所帮助,因为使用BENCH-1进行的大多数数据访问都依赖于有效的高速缓存重用,而不是矢量化。
图1:BENCH-1测试的解决时间
如图2所示,使用GYRE\_PISCES\_25的例子中,AWS Graviton2为于两个基于Intel®Xeon®Platinum的实例之后排在第三位。 GYRE\_PISCES\_25受内存带宽限制很大,我们相当于在比较DDR4-2666 / 2933的12个内存通道和DDR4-3200的8个内存通道。 因此,从每个插槽vCPU数量方面比较来看,AWS Graviton2将是最佳选择。 就每次模拟的成本(美元的最低成本和周转时间)而言,AWS Graviton2处于领先地位,如图3所示。
图2:GYRE\_PISCES\_25配置测试的解决时间
图3:GYRE\_PISCES\_25每次配置测试的模拟成本
多节点性能
GYRE\_PISCES\_25适合跨多个节点运行,因此可以测试AWS 增强网络的性能。 图4显示了使用AWS Graviton2实例在多达4个节点上运行此基准测试的结果。每个节点使用64个MPI任务。 由于网格点的总数是固定的,因此随着更多节点的使用,每个MPI任务的网格点数将减少。 由于此测试对内存得限制(如图2所示),可伸缩性将取决于节点间网络的性能。 图中AWS增强网络的性能表现出出色的可扩展性。
图4:使用多个节点运行GYRE\_PISCES\_25配置测试
摘要
本文介绍了在基于Arm Neoverse N1核的AWS Graviton2上运行欧盟/英国领先的海洋建模应用程序NEMO的详细步骤。 使用GCC工具链构建NEMO及其外部软件包是一个简单的过程,优越的性能也很容易实现。
同时比较了所有AWS实例的NEMO性能,AWS Graviton2能达到出色性能最合适的平台。 这是因为它在每个插槽的vCPU数量以及对内存带宽限制的应用程序的性能方面存在优势。 并且在撰写本文时,M6g实例的价格比同等配置的M5实例低20%。 就每次仿真成本而言,NEMO成本比M5实例低至少10%。
作者:Phil Ridley
翻译:Khorina
原文链接:https://community.arm.com/developer/tools-software/hpc/b/hpc-blog/posts/evaluation-of-the-nemo-ocean-model-on-aws-graviton2