风雨当前,万众一心。天气预测是科技界的难题,我们一直在努力尝试,用新的云科技来继续尝试。
WeatherResearchandForecastingModel(WRF)被誉为是次世代的中尺度天气预报模式,很多气象机构都使用WRF来做气象方面的研究与预测。由于地理信息与实时气象数据量庞大,以及计算逻辑复杂,需要高性能的计算集群作为基础设施。Amazon可以提供丰富的、弹性扩展的高性能计算资源,如64位ArmNeoverse内核定制而成,为在AmazonEC2中运行的云工作负载提供更高的性价比的Graviton2实例。
AmazonGraviton2与第一代AmazonGraviton处理器相比,AmazonGraviton2处理器不管在性能还是功能上都实现了巨大的飞跃。它们都支持AmazonEC2T4g、M6g、C6g和R6g实例,及其具有本地基于NVMe的SSD存储的变体,而且与当前这一代基于x86的实例1相比,这些实例为各种工作负载(包括应用程序服务器、微服务、高性能计算、电子设计自动化、游戏、开源数据库和内存中的缓存)提供高达40%的性价比提升。
充分利用公有云的弹性,可以使得气象研究和预测既高效、又经济,并可以以更灵活的方式提供给客户。
本文将详细向您介绍在Amazon上使用AmazonGraviton2实例搭建AmazonParallelCluster集群、构建WRF、并介绍如何通过WRF并行计算做气象预测的整个流程,让您更轻松地在Amazon中国区开启气象的研究和预测。
AmazonParallelCluster是一个Amazon支持的开源集群管理工具,它在开源CfnCluster项目上构建,根据您提交的任务自动设置和管理计算资源和共享文件系统。在AmazonParallelClusterv2.8.0或更高的版本上,ParallelCluster启用了Ubuntu18.04和AmazonLinux2上的Arm实例支持,使得我们可以实现更高性价比的高性能计算(HPC)。
此外,AmazonParallelCluster支持各种批处理计划程序,如AmazonBatch、SGE、Torque和Slurm,本文将使用Slurm作为批处理程序,ParallelCluster还支持自动化集成AmazonFSxforLustre并行文件系统和DCV远程桌面。以下是ParallelCluster架构图:
1.启动跳板机实例
打开Amazon管理控制台,选择EC2服务,点击【启动实例】启动一个新的实例。这台实例对应上图中的跳板机,用于ParallelCluster的集群配置和管理,对性能没有高要求,使用T2.micro或同类型的机型即可。
2.安装AmazonCLI与ParallelCluster
$pip3installawscli-U--user$pip3installaws-parallelcluster-U--user在安装之前可以用pip—version查看是否已经安装pip,如果没有安装可以使用以下命令安装,参见:
3.配置IAM凭证
打开Amazon控制台,选择IAM服务,选择一个有足够权限的IAM用户(如Administrator权限),创建新的访问密钥,并记录创建的访问密钥的ID与私有访问密钥(AccessKey与SecretKey),用于配置实例的访问权限。
回到控制实例中,配置IAMCredentials,AccessKeyID与SecretAccessKey分别填写之前生成的密钥ID与私有访问密钥。
$awsconfigureAWSAccessKeyID[None]:ABCD***********AWSSecretAccessKey[None]:wJalrX********Defaultregionname[us-east-1]:cn-northwest-1Defaultoutputformat[None]:json4.初始化ParallelCluster
通常,要配置ParallelCluster集群,您可以使用命令pclusterconfigure,然后提供请求的信息,例如Region、Scheduler和EC2实例类型,最后生成~/.parallelcluster/config配置文件。
此外,您也可以通过创建一个基本配置文件,然后定制该文件以包含ParallelCluster特定选项来实现快速配置。
下面的命令生成一个新的密钥对,查询跳板机实例的元数据以获得子网ID、VPCID,最后生成配置文件。此外,您也可以直接编辑这个配置文件来添加和更改配置选项。
设置默认区域Amazon_DEFAULT_REGION
$awsec2create-key-pair--key-namelab-key--queryKeyMaterial--outputtext>~/.ssh/lab-key$chmod600~/.ssh/lab-key获取Amazon网络信息(ParallelCluster集群将会部署在该VPC内)
使用以下命令查看或编辑ParallelCluster配置
$viewwrf-on-graviton2.ini
使用单可用区部署,并使用置放群组可以降低集群节点间通信的延迟,提高并行计算效率,在此脚本中均可设置。
7.创建ParallelCluster集群
$pclustercreatewrf-on-graviton2-cwrf-on-graviton2.ini使用命令创建集群,并等待集群创建完成。如果集群创建失败,请检查相应Region的EC2限制是否小于设定的集群最大节点数,如果受限于EC2limit,可以开supportcase提高limit,或者修改设置降低最大节点数。
以下流程图可以看出,WRF模式系统主要包含的组件有:
以下步骤包含了对WRF主程序,WPS,WRFDA,OBSGRID的安装:
首先WRF依赖于gfortan编译器和gcc、cpp的库,在此基础之上依赖于基本库NetCDF和用于并行计算的库MPICH,在运行WRF任务之前,还需要通过WPS(WRFPre-processingSystem)做数据的预处理。
所以在WRF的安装过程中,首先要更新依赖的编译器和库,然后安装NetCDF和MPICH,然后安装和编译WRF,设定好目录后安装和编译WPS。
$mkdir/fsx/wrf-arm$mkdir/fsx/tools
3.安装OpenMPI
查看最新版本的open-mpi源码的下载地址,以下命令下载并编译OpenMPI4.1.0
查看最新版本的HDF5源码的下载地址
Parallel-NETCDF可在官网:
下载最新版本。
7.1安装NetCDF-C
8.1下载WRF
WRF可以在Github上下载:
使用你熟悉的编辑器,例如view编辑文件arch/configure.defaults在行#insertnewstanzahere与#ARCHFujitsuFX10/FX100...之间添加以下内容:
$./configure编译选项选择8.(dm+sm)GCC(gfortran/gcc):Aarch64SelectOption1-Compilefornesting(1=basic,2=presetmoves,3=vortexfollowing)[default1]:8.4执行编译8.4执行编译
$./compile-j$(nproc)em_real2>&1|teecompile_wrf.out编译成功后,你可以在main目录下WRF-4.2.2/main找到WRF的EXE文件:
main/ndown.exe
main/real.exe
main/tc.exe
main/wrf.exe
9.安装WPS4.2
9.1安装Jasper
下载Jasper
$cd$DOWNLOAD/jasper-1.900.1$./configure--prefix=${WRF_INSTALL}/jasper$make-j$(nproc)install9.2安装WPS
以下示例下载并安装4.2版本
#########################################################################################################################ARCHLinuxaarch64,ArmcompilerOpenMPI#serialsmpardmpardm+sm#COMPRESSION_LIBS=CONFIGURE_COMP_LCOMPRESSION_INC=CONFIGURE_COMP_IFDEFS=CONFIGURE_FDEFSSFC=gfortranSCC=gccDM_FC=mpif90DM_CC=mpiccFC=CONFIGURE_FCCC=CONFIGURE_CCLD=$(FC)FFLAGS=-ffree-form-O-fconvert=big-endian-frecord-marker=4-ffixed-line-length-0-fallow-argument-mismatch-fallow-invalid-bozF77FLAGS=-ffixed-form-O-fconvert=big-endian-frecord-marker=4-ffree-line-length-0-fallow-argument-mismatch-fallow-invalid-bozFCSUFFIX=FNGFLAGS=$(FFLAGS)LDFLAGS=CFLAGS=CPP=/usr/bin/cpp-P-traditionalCPPFLAGS=-D_UNDERSCORE-DBYTESWAP-DLINUX-DIO_NETCDF-DBIT32-DNO_SIGNALCONFIGURE_MPIRANLIB=ranlib编译安装
$./configure
编译选项选择
Linuxaarch64,ArmcompilerOpenMPI(dmpar)
若遇到如下的输出提示,忽略即可。
YourversionsofFortranandNETCDFarenotconsistent.
编译之前,我们还需要修改WPS-4.2目录下的文件configure.wps中的WRF_LIB值,将-L$(NETCDF)/lib-lnetcdf更改成-L$(NETCDF)/lib-lnetcdff-lnetcdf-lgomp
如下所示:
WRF_LIB=-L$(WRF_DIR)/external/io_grib1-lio_grib1\-L$(WRF_DIR)/external/io_grib_share-lio_grib_share\-L$(WRF_DIR)/external/io_int-lwrfio_int\-L$(WRF_DIR)/external/io_netcdf-lwrfio_nf\-L$(NETCDF)/lib-lnetcdff-lnetcdf-lgomp执行编译
$./compile|teecompile_wps.out
编译成功后,可以在当前目录下看到3个可执行文件:
geogrid.exe→geogrid/src/geogrid.exe
ungrib.exe→ungrib/src/ungrib.exe
metgrid.exe→metgrid/src/metgrid.exe
10.安装WRFDA
WRFDA是一个统一的模型空间数据同化系统,可以全球或区域,多模型,3/4D-Var。其组成及各组成间的联系如图所示。
在4.0之后的版本,WRFDA的编译安装可以在WRF源码上进行。
解压WRF到目录WRFDA-4.2.2
$source/fsx/wrf-arm/wrf-install.env$cd${WRF_INSTALL}$unzip-d/tmpWRF-v4.2.2.zip$mv/tmp/WRF-4.2.2${WRF_INSTALL}/WRFDA-4.2.2$cd${WRF_INSTALL}/WRFDA-4.2.2编译
$./configurewrfda
3.(dmpar)
执行编译
$./compileall_wrfvar2>&1|teecompile_wrfda.out
编译成功后,你可以在${WRF_INSTALL}/WRFDA-4.2.2/var/build/目录下找到WRFDA的EXE文件da_wrfvar.exe
11.安装OBSGRID
下载OBSGRID
OBSGRID可以在Github下载:
############################################################ARCHLinuxaarch64,gfortrancompiler#FC=gfortranFFLAGS=-ffree-form-O-fconvert=big-endian-frecord-marker=4-ffixed-line-length-0-fallow-argument-mismatch-fallow-invalid-bozF77FLAGS=-ffixed-form-O-fconvert=big-endian-frecord-marker=4-ffree-line-length-0-fallow-argument-mismatch-fallow-invalid-bozFNGFLAGS=$(FFLAGS)LDFLAGS=CC=gccCFLAGS=CPP=/usr/bin/cpp-P-traditionalCPPFLAGS=-D_UNDERSCORE-DBYTESWAP-DLINUX-DIO_NETCDF-DBIT32-DNO_SIGNAL编译
选择
Select1.Linuxaarch64,gfortrancompiler
修改文件configure.oa中NETCDF_LIBS的值
NETCDF_LIBS=-L${NETCDF}/lib-lnetcdff-lnetcdf
$./compile2>&1|tee-acompile_oa.out
目前缺乏NCARGraphicsLibrary,所以编译plot的程序时会收到失败的信息(但不影响OBSGRID的编译)
gfortran-oplot_soundings.exeplot_soundings.omodule_mapinfo.omodule_report.omodule_skewt.odate_pack_module.o-L/lib-lncarg-lncarg_gks-lncarg_c-lX11-lm-lcairo-L/fsx/wrf-arm/netcdf/lib-lnetcdff-lnetcdf-I/fsx/wrf-arm/netcdf/include/usr/bin/ld:cannotfind-lncarg/usr/bin/ld:cannotfind-lncarg_gks/usr/bin/ld:cannotfind-lncarg_c/usr/bin/ld:cannotfind-lcairocollect2:error:ldreturned1exitstatus
编译成功后,你可以在OBSGRID当前目录下${WRF_INSTALL}/OBSGRID找到OBSGRID的EXE文件obsgrid.exe
WPS数据前处理与WRF并行计算
WRF任务运行之前,需要准备数据并进行预处理,数据包括静态地理数据和实时气象数据,都可以从NCEP的官网获取;之后分别用WPS的geogrid、ungrib和metgrid进行数据预处理,产生相应的文件,之后就可以执行WRF任务了,如下示意图:
$gunzipgeog_high_res_mandatory.tar.gz$tar-xfgeog_high_res_mandatory.tar然后修改namelist.wps文件中的&geogrid部分,将静态文件目录提供给geogrid程序。
$cd/fsx/wrf-arm/WPS-4.2$viewnamelist.wpsgeog_data_path='/fsx/data/WPS_GEOG/'2.下载实时气象数据
实时气象数据可从官方网站获取:ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod
在/fsx/data目录下创建一个目录weather_data,将实时数据下载到weather_data中。本例中下载2021年6月22日的f000、f006、f012三个数据作为测试数据,您可以根据自己的需求选择其他实时数据用于测试。
$cd/fsx/data$mkdirweather_data$cdweather_data$wgetftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20210622/00/atmos/gfs.t00z.pgrb2.0p25.f000$mvgfs.t00z.pgrb2.0p25.f000GFS_00h$wgetftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20210622/00/atmos/gfs.t00z.pgrb2.0p25.f006$mvgfs.t00z.pgrb2.0p25.f006GFS_06h$wgetftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20210622/00/atmos/gfs.t00z.pgrb2.0p25.f012$mvgfs.t00z.pgrb2.0p25.f012GFS_12h3.运行geogrid
转到WPS目录中,运行geogrid
$cd/fsx/wrf-arm/WPS-4.2$./geogrid.exe>&log.geogrid这一步运行成功的标志是创建了geo_em.*文件,在本例中为geo_em.d01.nc和geo_em.d02.nc
4.运行ungrib
运行ungrib,首先修改链接到GFS和Vtables的正确位置
$./link_grib.csh/fsx/data/weather_data/$ln-sfungrib/Variable_Tables/Vtable.GFSVtable然后修改namelist.wps文件的start_date和end_date,与实时数据相契合
start_date='2021-06-22_00:00:00','2021-06-22_00:00:00',end_date='2021-06-22_12:00:00','2021-06-22_12:00:00'然后运行ungrib
$./ungrib.exe
这一步运行成功的标志是创建了FILE:*文件,在本例中为FILE:2021-06-22_00、FILE:2021-06-22_06、FILE:2021-06-22_12
5.运行metgrid
$./metgrid.exe>&log.metgrid
这一步运行成功的标志是创建了met_em*文件
进入WRF目录,将met_em.*文件复制到工作目录
start_year=2021,2021,2021,start_month=06,06,06,start_day=22,22,22,start_hour=00,00,00,end_year=2021,2021,2021,end_month=06,06,06,end_day=22,22,22,end_hour=12,12,12,num_metgrid_levels=34,8.运行初始化程序real
$mpirun-np1./real.exe
检查输出文件以确保运行成功,运行成功后会看到每个域的wrfbdy_d01和wrfinput_d0*文件。如果有错误,根据文件中的提示修改namelist.input文件中的参数。
$tailrsl.error.0000
9.运行WRF
可自行修改np参数,但要小于主节点实例的物理核数。
$mpirun-np8./wrf.exe
运行成功的标志是rsl.out.0000文件中有SUCCESS结尾,并生成wrfout*文件。
1.下载测试数据集
$ln-s${WRF_INSTALL}/WRF-4.2.2/main/wrf.exe/fsx/data/conus_2.5km_v4/wrf.exe2.编写并保存测试脚本
在主节点上使用以下命令提交您的作业:
$sbatchwrf.sbatch
使用命令squeue检查队列的状态。作业将首先标记为pending(PD状态),因为正在创建资源(或处于down/drained状态)。如果您检查EC2仪表板,您应该会看到节点正在启动。
$squeue
您还可以使用sinfo命令检查集群中可用节点的数量。
$sinfo
您还可以使用scontrol命令查看详细作业信息。
$scontrolshowjobid-dd
WRF计算结果默认保存在目录数据集目录/fsx/data/conus_2.5km_v4。
4.查看WRF运行进程和输出结果
$cd/fsx/data/conus_2.5km_v4/$tail-frsl.out.0000
运行完成后,查看输出结果文件:
1$ls-lhwrfout*-rw-rw-r--1ec2-userec2-user2.1GApr114:01wrfout_d01_2018-06-17_00:00:00采用ncview或者Panoply等软件查看结果文件的输出变量和可视化化展示,以下是模拟三小时后的10m风速的图形:
综上所述,WRF模式系统全流程组件都可以在基于AmazonGraviton2的Arm架构实例上运行,同时使用ParallelCluster的灵活管理,使得WRF任务的运行既高效,又经济。在云上使用WRF做气象分析和预测不仅可以使您的效率大大提高,成本灵活可控,也使得成果的展示和使用更加便捷。
1.AmazonGraviton官网:
2.AmazonParallelCluster:
3.WRF用户手册:
4.WRF官网地理数据下载:
5.NCEP气象实时数据下载:
ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod
本篇作者
杨志浩
亚马逊云科技解决方案架构师
负责基于亚马逊的云计算方案的咨询与架构设计,目前专注在新能源电力行业。致力于推广HPC,IoT技术领域在风电,光伏等新能源电力行业的应用。
吴金福
亚马逊云科技混合云方案架构师
负责基于亚马逊云科技的混合云方案架构的咨询和设计。在加入亚马逊云科技之前,就职于大型集团企业。负责私有云数据中心的方案设计和建设,在数据中心基础设施、虚拟化、高性能计算和混合云等领域有着多年的经验积累。