亚马逊AWS官方博客

使用 AWS ParallelCluster 轻松构建 WRF 集群进行气象预报

背景介绍

Weather Research and Forecasting Model(WRF)被誉为是次世代的中尺度天气预报模式,很多气象机构都使用WRF来做气象方面的研究与预测。由于地理信息与实时气象数据量庞大,以及计算逻辑复杂,需要高性能的计算集群作为基础设施。AWS可以提供丰富的、弹性扩展的高性能计算资源,如型号为C5.18xlarge的EC2实例及相应的计算、网络通信能力;又可以提供灵活的调度工具,如ParallelCluster这一开源集群管理工具。

充分利用公有云的弹性,可以使得气象研究和预测既高效、又经济,并可以以更灵活的方式提供给客户。本文将详细向您介绍在AWS上使用ParallelCluster集群工具、构建WRF、准备数据、通过WRF并行计算做气象预测的整个流程,让您更轻松地在AWS中国区开启气象的研究和预测。

 

构建AWS ParallelCluster集群

AWS ParallelCluster 是一个 AWS 支持的开源集群管理工具,它的前身是著名的由AWS开源并维护的CfnCluster 项目,根据您提交的任务自动设置和管理计算资源和共享文件系统。AWS ParallelCluster 支持各种批处理计划程序,如AWS Batch、SGE、Torque 和 Slurm,本文将使用Torque作为批处理程序。

ParallelCluster 可以根据您提交的任务自动启动EC2资源加入计算节点,完成任务;在任务完成之后一段时间自动释放EC2资源节省费用。我们都知道在很多高性能计算场景中,时间是最重要的指标,通过ParallelCluster充分利用公有云的弹性,在运行任务时快速扩展计算能力,高效完成任务;任务完成后自动缩减计算能力,节约成本;从而使得高性能计算工作如渲染、气象分析等更加敏捷和经济。

除此之外,ParallelCluster还支持使用Spot实例作为计算节点,从而进一步降低成本;也支持指定EBS镜像作为共享卷的启动镜像,从而使得集群的迁移和重新构建更加方便;还支持使用Placement Group将实例置放在低延迟的位置,配合高性能计算节点和增强联网,将并行计算的效率进一步提升。

 

1. 启动控制实例

打开AWS管理控制台,选择EC2服务,点击【启动实例】启动一个新的实例。这台实例用于ParallelCluster的集群配置和管理,对性能没有高要求,使用T2.micro或同类型的机型即可。或者直接使用自己的工作站笔记本都可以。

2. 登录控制实例,安装AWS CLI与ParallelCluster命令

待用于控制集群的EC2实例启动完成,通过ssh登录到实例内,安装parallelcluster命令。

$ pip install awscli --user
$ pip install aws-parallelcluster --user

在安装之前可以用 pip —version 查看是否已经安装pip,如果没有安装可以使用以下命令安装,参见:https://pip.pypa.io/en/stable/installing

如果您使用的是Amazon Linux或Amazon Linux 2,AWS CLI已经默认安装在实例内,可以不用再次安装。

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py --user

3. 配置AWS IAM Credentials

打开AWS控制台,选择IAM服务,选择一个有足够权限的IAM用户(如Administrator权限),创建新的访问密钥,并记录创建的访问密钥的ID与私有访问密钥(Access Key与Secret Key),用于配置实例的访问权限。自己的笔记本或者工作机要安装awscli来进行下一步操作。

 

回到控制实例中,配置IAM Credentials,Access Key ID 与 Secret Access Key 分别填写之前生成的密钥ID与私有访问密钥。

$ aws configure
AWS Access Key ID [None]: ABCD***********
AWS Secret Access Key [None]: wJalrX********
Default region name [us-east-1]: cn-northwest-1
Default output format [None]: json

4. 初始化ParallelCluster

配置好权限后,使用以下命令开始ParallelCluster的初始化。

$ pcluster configure

跟着Configure 向导的步骤,选择区域、VPC、子网、密钥等资源,创建集群配置

Cluster Template [default]: WRFcluster //集群名
Acceptable Values for AWS Region ID:
    cn-north-1
    cn-northwest-1
AWS Region ID []: cn-northwest-1 //选择部署区域,示例选择的是宁夏区域
VPC Name [public]: prod //命名VPC
Acceptable Values for Key Name:
    handson
    key-cn-northwest-1
Key Name []: key-cn-northwest-1 //选择一个密钥,这个可以在EC2创建过程中创建
Acceptable Values for VPC ID:
    vpc-0f1ddb64137540bed
    vpc-503dce39
    vpc-0f48cd7c866f11bf0
VPC ID []: vpc-503dce39 //选择一个VPC
Acceptable Values for Master Subnet ID:
    subnet-41001e39
    subnet-40a46129
    subnet-2486a76e
Master Subnet ID []: subnet-41001e39 //选择子网

5. 创建S3存储桶

打开AWS控制台,选择S3服务,创建一个S3存储桶,用于存储集群运行产生的数据。

 

下载计算节点运行的脚本文件,上传到存储桶中,下载链接:https://wrf-softwares.s3.cn-northwest-1.amazonaws.com.cn/pcluster_postinstall.sh

6. 编辑parallelcluster配置

使用以下命令编辑ParallelCluster配置

$ vim ~/.parallelcluster/config

可以看到上一步初始化时VPC、子网等信息都在此配置文件中,依然沿用之前的设置;从extra_date到volume_size部分可以直接复制粘贴下面的示例脚本,添加到config文件中间部分。

 [aws]
aws_region_name = cn-northwest-1

[cluster WRFcluster]
vpc_settings = prod
key_name = key-cn-northwest-1
extra_json = { "cluster" : { "cfn_scheduler_slots" : "cores", "ganglia_enabled" : "yes" } }
## 自己的脚本地址
post_install = s3://YOUR_S3_BUCKET_NAME/pcluster_postinstall.sh
## 自己的S3桶ARN
s3_read_write_resource = arn:aws-cn:s3:::YOUR_S3_BUCKET_NAME/*
## 计算节点类型
compute_instance_type = c5.18xlarge
## 主节点类型
master_instance_type = m5.xlarge
## 根卷大小
master_root_volume_size = 100
## 计算节点根卷大小,需大于ami需要,选填
compute_root_volume_size = 100
## AutoScailing设置,选填
scaling_settings = WRF-ASG
## 初始队列大小,默认为2,选填
initial_queue_size = 1
## 最大队列容量,默认10,选填
max_queue_size = 5
placement = cluster
placement_group = DYNAMIC
cluster_type = ondemand
base_os = alinux
## 调度工具配置
scheduler = torque
## 数据卷配置
ebs_settings = wrf-ebs

#auto scaling设置
[scaling WRF-ASG]
#节点检测间隔,5分钟无负载则缩减,默认15分钟,选填
scaledown_idletime = 5

[ebs wrf-ebs]  ## Used for the NFS mounted file system,将在Master节点本地创建NFS文件共享卷
## 数据卷类型
volume_type = gp2
## 数据卷大小(GB)
volume_size = 2000

[vpc prod]
master_subnet_id = subnet-41001e39
vpc_id = vpc-503dce39

[global]
update_check = true
sanity_check = true
cluster_template = WRFcluster

[aliases]
ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS}

脚本分为AWS区域、集群信息配置、自动扩展设置、共享数据卷设置、VPC与子网设置等几个部分。重点关注以下几个参数:

  1. post_install 设置的是集群节点启动时运行的脚本位置,修改YOUR_S3_BUCKET_NAME为你自己的存储桶名称,由于WRF不能得益于超线程,因此这个脚本中会关闭EC2实例的超线程,按照物理核来运行。
  2. s3_read_write_resource 设置的是集群访问的S3存储桶,修改YOUR_S3_BUCKET_NAME为你自己的存储桶名称。
  3. compute_instance_type 设置的是计算节点的类型,建议尽可能使用较大的实例类型,在并行计算场景中提高更多的效率,此处设定为18xlarge;默认新账户这个实例类型limit较少,建议提前开support case提高limit
  4. master_instance_type 设置的是主节点的类型,主节点用于安装软件、下载数据,不参与并行计算,所以不需要太大,此处设定为xlarge
  5. max_queue_size 设置的是集群计算节点的数量上限,可以根据需求更改,此处设置为5台
  6. scheduler 设置的是批处理计划,此处使用torque,还可以根据您的习惯选择sge或slurm
  7. volume_size 设置的是共享EBS卷的大小,其他节点会NFS挂载到这个卷的文件系统中,由于数据量较大,建议设置大一些,此处设置为2000G

使用单可用区部署,并使用Placement Group可以降低集群节点间通信的延迟,提高并行计算效率,在此脚本中均已设置。

7. 创建ParallelCluster集群

$ pcluster create WRFcluster

使用命令创建集群,并等待集群创建完成。如果集群创建失败,请检查相应Region的EC2限制是否小于设定的集群最大节点数,点击EC2界面左边“限制”查看。如果受限于EC2 limit,可以开support case提高limit,或者修改设置降低最大节点数。

 

安装WRF

WRF依赖于gfortan编译器和gcc、cpp的库,在此基础之上依赖于基本库NetCDF和用于并行计算的库MPICH,在运行WRF任务之前,还需要通过WPS(WRF Pre-processing System)做数据的预处理。所以在WRF的安装过程中,首先要更新依赖的编译器和库,然后安装NetCDF和MPICH,然后安装和编译WRF,设定好目录后安装和编译WPS。由于大多数库和软件的源在海外,下载速度很慢,我们制作了自动化安装脚本,并将相应安装包搬运到了宁夏区S3,提高在中国区下载安装的速度。如果您在海外区部署,建议修改安装脚本,直接从NCEP的官网下载。

1. 登录主节点

打开AWS控制台,选择EC2服务,找到集群主节点(默认标签为Master),ssh登录。

2. 更新并安装jasper

$ sudo yum upgrade -y \
&& sudo yum install gcc64-gfortran.x86_64 libgfortran.x86_64 jasper jasper-libs.x86_64 jasper-devel.x86_64 libpng-devel.x86_64 -y

3. 下载代码仓库并进入相应目录

代码仓库托管在GitHub,包含安装脚本等资源,建议下载到共享卷目录/shared 下。

$ cd /shared
$ git clone https://github.com/BlastShadowsong/wrf-cluster-on-aws-pcluster.git
$ cd wrf-cluster-on-aws-pcluster/

4. 安装 NetCDF 4.1.3

sh scripts/netcdf_install.sh

5. 安装 MPICH 3.0.4

sh scripts/mpich_install.sh

6. 安装 WRF 4.0

sh scripts/wrf_install.sh

出现选项时

Please select from among the following Linux x86_64 options:

  1. (serial)   2. (smpar)   3. (dmpar)   4. (dm+sm)   PGI (pgf90/gcc)
  5. (serial)   6. (smpar)   7. (dmpar)   8. (dm+sm)   PGI (pgf90/pgcc): SGI MPT
  9. (serial)  10. (smpar)  11. (dmpar)  12. (dm+sm)   PGI (pgf90/gcc): PGI accelerator
 13. (serial)  14. (smpar)  15. (dmpar)  16. (dm+sm)   INTEL (ifort/icc)
                                         17. (dm+sm)   INTEL (ifort/icc): Xeon Phi (MIC architecture)
 18. (serial)  19. (smpar)  20. (dmpar)  21. (dm+sm)   INTEL (ifort/icc): Xeon (SNB with AVX mods)
 22. (serial)  23. (smpar)  24. (dmpar)  25. (dm+sm)   INTEL (ifort/icc): SGI MPT
 26. (serial)  27. (smpar)  28. (dmpar)  29. (dm+sm)   INTEL (ifort/icc): IBM POE
 30. (serial)               31. (dmpar)                PATHSCALE (pathf90/pathcc)
 32. (serial)  33. (smpar)  34. (dmpar)  35. (dm+sm)   GNU (gfortran/gcc)
 36. (serial)  37. (smpar)  38. (dmpar)  39. (dm+sm)   IBM (xlf90_r/cc_r)
 40. (serial)  41. (smpar)  42. (dmpar)  43. (dm+sm)   PGI (ftn/gcc): Cray XC CLE
 44. (serial)  45. (smpar)  46. (dmpar)  47. (dm+sm)   CRAY CCE (ftn/cc): Cray XE and XC
 48. (serial)  49. (smpar)  50. (dmpar)  51. (dm+sm)   INTEL (ftn/icc): Cray XC
 52. (serial)  53. (smpar)  54. (dmpar)  55. (dm+sm)   PGI (pgf90/pgcc)
 56. (serial)  57. (smpar)  58. (dmpar)  59. (dm+sm)   PGI (pgf90/gcc): -f90=pgf90
 60. (serial)  61. (smpar)  62. (dmpar)  63. (dm+sm)   PGI (pgf90/pgcc): -f90=pgf90
 64. (serial)  65. (smpar)  66. (dmpar)  67. (dm+sm)   INTEL (ifort/icc): HSW/BDW
 68. (serial)  69. (smpar)  70. (dmpar)  71. (dm+sm)   INTEL (ifort/icc): KNL MIC

选择“34” (dmpar),然后再选择 “1”

Enter selection [1-71] : 34
------------------------------------------------------------------------
Compile for nesting? (1=basic, 2=preset moves, 3=vortex following) [default 1]: 1

之后进行编译,以下是编译选项

em_real (3d real case)
em_quarter_ss (3d ideal case)
em_b_wave (3d ideal case)
em_les (3d ideal case)
em_heldsuarez (3d ideal case)
em_tropical_cyclone (3d ideal case)
em_hill2d_x (2d ideal case)
em_squall2d_x (2d ideal case)
em_squall2d_y (2d ideal case)
em_grav2d_x (2d ideal case)
em_seabreeze2d_x (2d ideal case)
em_scm_xy (1d ideal case)

在本次实验中选择em_real模式

$ cd /shared/WRF/WRF
$ source ~/.bashrc
$ ./compile em_real 2>&1 | tee compile.log

如果安装成功,则可以看到如下信息

==========================================================================
build started:   Fri Jul 19 12:16:09 UTC 2019
build completed: Fri Jul 19 12:21:41 UTC 2019

--->                  Executables successfully built                  <---

-rwxrwxr-x 1 ec2-user ec2-user 38094992 Jul 19 12:21 main/ndown.exe
-rwxrwxr-x 1 ec2-user ec2-user 37975624 Jul 19 12:21 main/real.exe
-rwxrwxr-x 1 ec2-user ec2-user 37595344 Jul 19 12:21 main/tc.exe
-rwxrwxr-x 1 ec2-user ec2-user 41805008 Jul 19 12:21 main/wrf.exe

==========================================================================

7. 安装 WPS 4.0

$ sh scripts/wps_install.sh

出现选项列表时

Please select from among the following supported platforms.

   1.  Linux x86_64, gfortran    (serial)
   2.  Linux x86_64, gfortran    (serial_NO_GRIB2)
   3.  Linux x86_64, gfortran    (dmpar)
   4.  Linux x86_64, gfortran    (dmpar_NO_GRIB2)
   5.  Linux x86_64, PGI compiler   (serial)
   6.  Linux x86_64, PGI compiler   (serial_NO_GRIB2)
   7.  Linux x86_64, PGI compiler   (dmpar)
   8.  Linux x86_64, PGI compiler   (dmpar_NO_GRIB2)
   9.  Linux x86_64, PGI compiler, SGI MPT   (serial)
  10.  Linux x86_64, PGI compiler, SGI MPT   (serial_NO_GRIB2)
  11.  Linux x86_64, PGI compiler, SGI MPT   (dmpar)
  12.  Linux x86_64, PGI compiler, SGI MPT   (dmpar_NO_GRIB2)
  13.  Linux x86_64, IA64 and Opteron    (serial)
  14.  Linux x86_64, IA64 and Opteron    (serial_NO_GRIB2)
  15.  Linux x86_64, IA64 and Opteron    (dmpar)
  16.  Linux x86_64, IA64 and Opteron    (dmpar_NO_GRIB2)
  17.  Linux x86_64, Intel compiler    (serial)
  18.  Linux x86_64, Intel compiler    (serial_NO_GRIB2)
  19.  Linux x86_64, Intel compiler    (dmpar)
  20.  Linux x86_64, Intel compiler    (dmpar_NO_GRIB2)
  21.  Linux x86_64, Intel compiler, SGI MPT    (serial)
  22.  Linux x86_64, Intel compiler, SGI MPT    (serial_NO_GRIB2)
  23.  Linux x86_64, Intel compiler, SGI MPT    (dmpar)
  24.  Linux x86_64, Intel compiler, SGI MPT    (dmpar_NO_GRIB2)
  25.  Linux x86_64, Intel compiler, IBM POE    (serial)
  26.  Linux x86_64, Intel compiler, IBM POE    (serial_NO_GRIB2)
  27.  Linux x86_64, Intel compiler, IBM POE    (dmpar)
  28.  Linux x86_64, Intel compiler, IBM POE    (dmpar_NO_GRIB2)
  29.  Linux x86_64 g95 compiler     (serial)
  30.  Linux x86_64 g95 compiler     (serial_NO_GRIB2)
  31.  Linux x86_64 g95 compiler     (dmpar)
  32.  Linux x86_64 g95 compiler     (dmpar_NO_GRIB2)
  33.  Cray XE/XC CLE/Linux x86_64, Cray compiler   (serial)
  34.  Cray XE/XC CLE/Linux x86_64, Cray compiler   (serial_NO_GRIB2)
  35.  Cray XE/XC CLE/Linux x86_64, Cray compiler   (dmpar)
  36.  Cray XE/XC CLE/Linux x86_64, Cray compiler   (dmpar_NO_GRIB2)
  37.  Cray XC CLE/Linux x86_64, Intel compiler   (serial)
  38.  Cray XC CLE/Linux x86_64, Intel compiler   (serial_NO_GRIB2)
  39.  Cray XC CLE/Linux x86_64, Intel compiler   (dmpar)
  40.  Cray XC CLE/Linux x86_64, Intel compiler   (dmpar_NO_GRIB2)

选择“1”完成配置。由于 metgrid.exe 和 geogrid.exe 程序以来WRF的I/O库,需要编辑 configure.wps 文件中的相关路径

$ vim configure.wps

找到其中指定WRF路径的两行,修改为

WRF_DIR = ../../WRF/WRF

编译WPS

$ source ~/.bashrc
$ ./compile 2>&1 | tee compile.log

如果安装成功则,能看到WPS目录下有如下三个文件

  • exe -> geogrid/src/geogrid.exe
  • exe -> ungrib/src/ungrib.exe
  • exe -> metgrid/src/metgrid.exe

到此,我们完成WRF的全部安装过程。

 

数据准备与WRF运行

WRF任务运行之前,需要准备数据并进行预处理,数据包括静态地理数据和实时气象数据,都可以从NCEP的官网获取;之后分别用WPS的geogrid、ungrib和metgrid进行数据预处理,产生相应的文件,之后就可以执行WRF任务了。

1. 下载静态地理数据

在/shared 目录下新建文件夹Build_WRF,下载到其中,可从官方网站获取:http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html,也可以从我们制作的中国镜像站获取:https://wrf-data.s3.cn-north-1.amazonaws.com.cn/geog_high_res_mandatory.tar.gz

$ cd /shared
$ mkdir Build_WRF
$ cd Build_WRF
$ wget https://wrf-data.s3.cn-north-1.amazonaws.com.cn/geog_high_res_mandatory.tar.gz

然后解压缩静态地理数据,并取消tar文件,2.6G的文件最终会成为29G的文件。文件较大,需要等待一段时间。解压缩后的文件名称为WPS_GEOG

$ gunzip geog_high_res_mandatory.tar.gz
$ tar -xf geog_high_res_mandatory.tar

然后修改 namelist.wps 文件中的 &geogrid 部分,将静态文件目录提供给geogrid程序。

$ cd /shared/WPS/WPS
$ vim namelist.wps
$ geog_data_path =' shared/Build_WRF/WPS_GEOG/'

2. 下载实时气象数据

实时气象数据可从官方网站获取:ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod 考虑到NOAA官方数据在海外,推荐使用AWS海外账户来就近分析,节省数据迁移时间。

在 /shared/Build_WRF 目录下创建一个目录 DATA,将实时数据下载到 DATA 中。 本例中下载2019年8月1日的f000、f006、f012三个数据作为测试数据,您可以根据自己的需求选择其他实时数据用于测试。

$ cd /shared/Build_WRF
$ mkdir DATA
$ cd DATA
$ wget ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20190801/00/gfs.t00z.pgrb2.0p50.f000
$ mv gfs.t00z.pgrb2.0p50.f000 GFS_00h
$ wget ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20190801/00/gfs.t00z.pgrb2.0p50.f006
$ mv gfs.t00z.pgrb2.0p50.f006 GFS_06h
$ wget ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.20190801/00/gfs.t00z.pgrb2.0p50.f012
$ mv gfs.t00z.pgrb2.0p50.f012 GFS_12h

3. 运行geogrid

转到WPS目录中,运行geogrid

$ cd /shared/WPS/WPS
$ ./geogrid.exe>&log.geogrid

这一步运行成功的标志是创建了 geo_em.* 文件,在本例中为 geo_em.d01.nc 和 geo_em.d02.nc

4. 运行ungrib

运行ungrib,首先修改链接到GFS和Vtables的正确位置

$ ./link_grib.csh /shared/Build_WRF/DATA/
$ ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable

然后修改 namelist.wps 文件的 start_date 和 end_date,与实时数据相契合

start_date = '2019-08-01_00:00:00','2019-08-01_00:00:00',
end_date   = '2019-08-01_12:00:00','2019-08-01_12:00:00',

然后运行ungrib

$ ./ungrib.exe

这一步运行成功的标志是创建了 FILE:* 文件,在本例中为 FILE:2019-08-01_00、FILE:2019-08-01_06、FILE:2019-08-01_12

5. 运行metgrid

$ ./metgrid.exe>&log.metgrid

这一步运行成功的标志是创建了 met_em* 文件

6. 复制数据到WRF工作目录

进入WRF目录,将 met_em.* 文件复制到工作目录

$ cd /shared/WRF/WRF/run
$ cp /shared/WPS/WPS/met_em* /shared/WRF/WRF/run/

7. 修改namelist.input文件

修改 namelist.input 文件中的开始和结束时间,每一行三项设置为相同时间,开始和结束时间与实时数据相契合;修改 num_metgrid_levels 参数为34,与实时数据相契合。

8. 运行real程序

$ mpirun -np 1 ./real.exe

检查输出文件以确保运行成功,运行成功后会看到每个域的 wrfbdy_d01 和 wrfinput_d0* 文件。如果有错误,根据文件中的提示修改 namelist.input 文件中的参数。

$ tail rsl.error.0000

9. 运行WRF

可自行修改 np 参数,但要小于主节点实例的物理核数。

$ mpirun -np 8 ./wrf.exe

运行成功的标志是 rsl.out.0000 文件中有 SUCCESS结尾,并生成 wrfout* 文件。

 

提交WRF并行计算任务

现在我们已经能通过 mpirun 运行WRF任务,但直接执行是运行在主节点上,接下来我们通过任务脚本和torque命令,将WRF任务提交到计算节点并行完成。

1. 制作任务脚本

$ vim job.sh

任务脚本的内容为

#!/bin/bash
#PBS -N WRF
#PBS -l nodes=1:ppn=18
#PBS -o wrf.out
#PBS -e wrf.err
echo "Start time: "
date
cd /shared/WRF/WRF/run
/shared/mpich/bin/mpirun /shared/WRF/WRF/run/wrf.exe
echo "End time: "
date

其中 PBS -N 为任务名称,-l 控制并行节点数和每个节点的计算核数,-o 和 -e 为结果日志和错误日志的输出位置。这些参数都可以结合实际需求灵活更改。

2. 提交任务到计算节点

通过以下命令提交任务

$ qsub job.sh

之后可以用 qnodes 命令查看节点情况,用 qstat 命令查看任务运行情况,通过 rsl.out.0000 查看运行过程。 任务运行完成后,可以在生成的 wrf.out 文件中查看运行起止时间,来计算实际运行时长。

任务提交后,ParallelCluster会根据任务需求自动启动计算实例,添加到集群中,并行执行任务;任务完成后,一段时间内如果没有任务运行在计算节点,ParallelCluster会将计算节点终止,节约成本。

上图是我运行的结果在ganglia中的图表,2个节点并行执行,每个节点16核计算,在几秒钟的时间内完成了任务。

 

上图是这次运行的部分步长数据,您也可以对比一下不同CPU数量下步长的变化,会发现在CPU数量更多做并行计算时,步长会进一步降低。当然,本文中启动的任务计算量很小,可能不具备太多的参考意义;您可以增加实时数据、调整WRF任务、增大计算节点数,来运行真正的测试或生产任务。

 

小结

综上所述,使用ParallelCluster的灵活管理,使得WRF任务的运行既高效,又经济。在云上使用WRF做气象分析和预测不仅可以使您的效率大大提高,成本灵活可控,也使得成果的展示和使用更加便捷。

为了提高在中国区构建和运行WRF的效率,本文制作了一些软件和数据的镜像,放在宁夏区的S3存储桶中,从而使您在加载数据时不会感受到明显的加载等待时间。在实际生产环境中,由于官方提供的软件和数据都在海外,使用AWS海外区域构建集群与运行WRF任务是更快捷的选择。

 

参考资料

  1. AWS ParallelCluster:https://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/what-is-aws-parallelcluster.html
  2. How to Compile WRF (From NCAR):http://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php
  3. WRF 官网地理数据下载:http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html
  4. NCEP 气象实时数据下载:ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod

本篇作者

李思源

AWS解决方案架构师,负责基于 AWS 的云计算方案的咨询与架构设计,同时致力于 AWS 云服务知识体系的传播与普及。在网络、软件开发等领域有实践经验,加入AWS 之前曾任软件开发工程师、Scrum master、项目经理等角色,PMI认证PMP。目前关注游戏、高性能计算等领域。