过段时间就要进所打工了,说到回所,肯定要用所里的服务器学着跑模式,然而身为小白的我,对这块还是云里雾里,老样子,先搞理论,把整个流程理清楚,不然回所上手又是一脸懵逼,浪费时间。
首先应当指出的是,我的标题取得并不严谨,一般来说,我们的数值预报并不是用大型计算机来计算的,而是使用超算计算的,而超算严格来讲也和我们印象中的“计算机”有所差异,更接近于一个操作平台。平时所说的”使用大型机跑模式“,是一种口语化的表达,而这些表达往往会给初学者带来一些误解,致使在初次接触模式运行时,经常会无从下手。
“工欲善其事,必先利其器”,在开始学习模式时,除了对整个流程有所了解外,也应当适当了解我们所使用的平台本身,理清一些底层逻辑,这样我们在实际应用时,将会更加顺手与灵活。
在本文,我会首先给出一些基本概念,简单总结超算工作原理,之后我会给出运行WRF时Linux系统需要用到的一些操作,最后,我会给出WRF示例,并回顾总结整个流程。
注意:本篇文章的仅为入门内容,笔者无意教各位许多深入的知识,而是更想构建一个框架,以便各位在学习时能形成更加系统的知识框架,便于更好理解、应用、纠错。

大型机

大型机(mainframe)最初是指装在非常大的带框铁盒子里的大型计算机系统,随着科技的发展,目前的大型机已经不再是最初定义,从核心而言, 大型机是高性能的计算机,具有大量内存和处理器,能够实时处理数以十亿计的计算和事务。
目前来说,mainframe有了新的意义,已经由我们印象里“大型主机”变成了一种大型商业服务器的代称,不过,最常见的大型机指代的仍然是由IBM所制造的以可靠性、可伸缩性、兼容性和安全性作为核心设计价值的计算机,主要用于商业数据的保存、传输、管理。
从以上我们可以看出,大型机并的主要用户并不是科研运算,它更倾向于商业数据的管理,更加注重安全、兼容与隐私问题,而在使用科学数值模拟时,我们会更注重计算机的运算速度、内存等,这些并不是大型机应用范围,而是超算使用的领域。

超算集群(Cluster)

超算并不是我们一般理解的一台占地极大,运算效率极强的计算机,而是一批性能强大的计算机组成的集群,更接近于一个多用户共享服务平台。
什么是集群?顾名思义,将多个独立计算机,利用高速通信技术,将它们联系起来,这样,这一批高性能计算机服务器与计算能力便集合起来,运算效率提高的同时,也降低了成本。
集群分为许多中,本文所介绍的便是高性能计算集群,也称并行运算,高性能计算集群就是我们一般指代的超级计算机,内部由数十至上万个独立服务器组成,并且在公共消息传递层上进行通信以并行运行应用程序。在生产环境中实际就是把任务切成蛋糕,然后下发到集群节点计算,计算后返回结果,然后继续领新任务计算,如此往复。
用最耳熟能详的一句话来概括超算集群的原理便是“集中力量办大事”,在天气预报、核试验模拟等运算量极大的应用中,一个计算能力强大的计算机是不够的。不过,与这种朴素的原理应用于计算机技术中,仍然需要与现实对应的一套运筹管理方案,我们下面来简单讲解以下。

基本架构

下图是普林斯顿大学的超算集群结构,集群中每一个计算机称为节点(node),节点分为两种:头节点(head node)和计算节点(compute node)。

典型的普林斯顿研究计算集群的通用架构。图由Mukarramahmad绘制,Jon Halverson修改。来源:https://researchcomputing.princeton.edu/faq/what-is-a-cluster
所谓头节点就是用户使用的计算机,在这台计算机上,我们主要编译代码、撰写脚本与提交任务。
计算节点:是运行任务的了计算机,在计算节点上运行作业,我们必须通过作业调度器。通过将作业提交给作业调度器,一旦请求的资源可用,这些作业将自动在计算节点上运行。
在运行模式时,用户应当使用软件将需要的数据、文件上传至cluster上,在撰写相应的脚本进行提交任务,并等待作业运算。

系统:Linux

目前超算使用的系统以Linux系统为主,再入门前我们必然要了解一些Linux基础知识,在本节我会介绍一些使用中需要Linux基本知识,如果想要更加系统了解相关Linux知识的话,推荐b站课程:尚硅谷Linux教程

远程登陆与文件传输

我们已经知道了超算的架构是由多个计算机构成的集群,在实际使用时,用户自然不可能到超算集群所在的机房中使用,为了方便在各地的用户都能使用超算资源,我们首先需要远程登陆到超算的服务器上,以便我们能在自己的计算机上远程操作并使用超算系统。
远程登陆一般使用基于SSH网络协议实现两台计算机间的连接,通过相应的软件远程登陆与操作,许多软件可以完成:mobaxterm ssh secure shell xshell putty SecureCRT等,可以根据喜好选择。
在远程登陆后,我们还需要用基于FTP/SFTP的安全协议完成两个电脑间的文件传输,用来实现自己的电脑和远程服务器之间文件的上传下载。
一般而言,远程登陆软件都带有与自己配套的文件传输软件,如xshell和xftp,在这里我推荐一款比较全能的终端软件:mobaxterm。
mobaxterm是一款增强型的终端软件,功能强大,且带有许多插件、操作方便,其下载安装与使用参考:MobaXterm

基础命令与文本编辑

与Windows以图形界面交互完成各种操作不同,Linux系统需要使用各种命令来完成对应的操作。
对于Linux的基础命令,网上随处可见,按我的理解来看,使用超算运行模式常用的基础命令无非为:目录操作、文件创建于删改、文件连接与查看、文件压缩输出等,初学者在使用时可直接搜索相关命令。
在Windows系统中,记事本可谓是十分强大且方便的文本编辑与查看工具,Linux也有着对应的文本编辑器vi。
许多 Linux 上面的指令都默认使用 vi 作为数据编辑的接口,因此vi的使用是必须掌握的。
vim则是vi文本编辑器的进阶,它类似于我们一般使用的程序编辑器,在相关脚本代码时,vim会根据代码内容与语法使用颜色来突出一些特殊信息,此外vim还加入了多档案编辑、区块复制等功能。

vi/vim使用

vi/vim有三种模式:

  • 命令模式(command mode):一般打开vi的默认模式,在该模式下,你可以:移动光标(键盘按键)、复制粘贴、删除字、字符、整行内容,你不可以:输入、编辑文字。
  • 插入模式(Insert mode):按i可进入该模式,只有在该模式下,才可以做文字输入与编辑,按Esc键可回到命令行模式。
  • 底行模式(last line mode):按“:”进入该模式,该模式下,光标将移至编辑器最低行,该模式下,你可以保存文本、退出vi编辑器,进行字符查找等。

    三种模式关系,来源:https://nscc.mrzhenggang.com/supercomputer-courses/vim/#vim%E4%BD%BF%E7%94%A8%E5%88%9D%E7%BA%A7

了解了vi的三种模式后,可以在不同模式下进行相关的操作,vi/vim的操作主要依靠键盘,需要在键盘上按下相应按键实现操作。
vi相关命令见:vi常见命令或自行搜索。

Shell脚本

计算机的硬件由系统的核心(Kernel),而Shell则意为核心的外壳,这层外壳连接了用户和核心,允许用户操作应用程序。实现对计算机的控制。Linux的许多命令如:ls、cd、pwd就属于Shell命令。
程序化脚本shell scriptsShell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不需要编译,通过解释器解释运行,速度相对来说比较慢,脚本最重要的是理解变量、赋值和条件判断。
Shell脚本最大的用处,在于**批处理文件(batch)**的使用,在运行WRF时,我们不需要撰写复杂的Shell脚本,不过我们仍然应当了解一些Shell的基本命令和脚本调试命令,若想继续探寻Shell脚本的编写,可参考:一篇教会你写90%的shell脚本

Moduel(模块)

按照个人理解与Linux中的moduel与R语言中的Package类似,是可以完成一个独立功能的一组函数的集合,当需要使用该功能时,需要加载相应的模块。
模块命令 来源:https://nscc.mrzhenggang.com/supercomputer-courses/module/#_1-%E4%BB%80%E4%B9%88%E6%98%AFmodule
在使用超算运行WRF时,我们需要配置相应的环境,加载需要的模块才能运行,一般使用Envrionment modules工具加载和卸载modulefile文件可直接改变用户的环境变量。

作业调度/任务提交

前面提到超算集群往往用于计算量极大的科学与军事应用中,并且是一个共享的服务平台,任何拥有平台账户的登陆后即可提交作业使用。
但并不是简单的将所有的计算机用来处理一个任务, 而往往是按需所取,用户需要等调度系统分配好相应的计算资源,才能开始运行,调度系统则是通过这种一些规则分配资源,以达到提高科研利用效率的目的。这与经典问题中的“排队论”似乎异曲同工之妙,对于作业调度通常由专门的作业调度器来安排,这里以Slurm为例简单介绍。

Slurm

Slurm是一个开源,容错,高度可扩展的集群管理和作业调度系统,适用于大型和小型Linux集群。Slurm不需要对其操作进行内核修改,并且相对独立。作为集群工作负载管理器,Slurm有三个关键功能。首先,它在一段时间内为用户分配对资源(计算节点)的独占和/或非独占访问,以便他们可以执行工作。其次,它提供了一个框架,用于在分配的节点集上启动,执行和监视工作(通常是并行作业)。最后,它通过管理待处理工作的队列来仲裁资源争用。

基本架构

Slurm包含在每个计算节点上运行的slurmd守护程序和在管理节点上运行的中央slurmctld守护程序。
slurmctld:控制进程,相当于整个系统的中枢,负责资源状态维护、资源分配、作业调度、作业管理控制等。
slurmd:节点监控进程,负责收集节点上的资源状态并向控制进程报告。slurmd 接收来自控制进程与用户命令的请求,进行作业步任务加载、作业取消等操作。
**slurmstepd :作业管理进程,由 slurmd 在加载作业步任务或批处理作业时派生。 负责计算任务启动、标准 I/O 转发、信号传递、记账信息收集以及并行环境初始化等功能。
** slurmdbd
:记录存储进程,命令工具与控制进程访问记账数据库的中间层。它提供访问记账数据与关联信息的统一接口,并起到用户认证与安全隔离的作用。
Slurm主要通过这些程序管理作业的分配、存储、执行与监视等内容。
Slurm架构
这些Slurm程序管理对象包括我们前文所说的节点(node)、计算资源, 分区(Partition),将节点分组, 作业(Job)或分配给用户的指定数量的资源分配时间和 工作步骤(Job Step)。
为了提高效率,Slurm会进行分区,这个分区类似于排队的队列,每个队列具有不同的特性,如:作业大小限制,作业时间限制,允许使用它的用户,不同队列用以完成不同的任务,队列间并不相互干扰。用户在提交作业时,应当指定作业所属调度器队列,随后,调度器会给对应队列的作业按优先级排序,并分配相应的节点与计算资源进行工作,如对应分区的资源耗尽,则用户作业需要排队等候。

基础命令

关于Sliurm的简介与安装配置,可以查看:Slurm资源管理与作业调度系统安装配置,此处不再赘述,在安装配置好Slurm后,我们可以使用相应的命令进行作业调度、提交等功能,其基本命令概括如下:
sacct用于报告有关活动或已完成作业的作业或作业步骤会计信息。
salloc用于实时为作业分配资源。通常,这用于分配资源并生成shell。然后使用shell执行srun命令以启动并行任务。
sattach用于将标准输入,输出和错误加信号功能附加到当前正在运行的作业或作业步骤。可以多次附加和分离作业。
sbatch用于提交作业脚本以供以后执行。该脚本通常包含一个或多个用于启动并行任务的srun命令。
sbcast用于将文件从本地磁盘传输到分配给作业的节点上的本地磁盘。这可用于有效地使用无盘计算节点或相对于共享文件系统提供改进的性能。
scancel用于取消挂起或正在运行的作业或作业步骤。它还可用于向与正在运行的作业或作业步骤相关联的所有进程发送任意信号。
scontrol是用于查看和/或修改Slurm状态的管理工具。请注意,许多 scontrol 命令只能以root用户身份执行。
sinfo报告由Slurm管理的分区和节点的状态。它具有各种过滤,排序和格式选项。
smap报告由Slurm管理的作业,分区和节点的状态信息,但以图形方式显示反映网络拓扑的信息。
squeue报告工作或工作步骤的状态。它具有各种过滤,排序和格式选项。默认情况下,它按优先级顺序报告正在运行的作业,然后按优先级顺序报告挂起的作业。
srun用于提交作业以便实时执行或启动作业步骤。 srun 有多种选项来指定资源要求,包括:最小和最大节点数,处理器数,要使用或不使用的特定节点,以及特定节点特征(如此多的内存,磁盘空间,某些必需的功能等) 。作业可以包含在作业节点分配中的独立或共享资源上顺序或并行执行的多个作业步骤。
strigger用于设置,获取或查看事件触发器。事件触发器包括节点关闭或作业接近其时间限制等事件。
sview是一个图形用户界面,用于获取和更新Slurm管理的作业,分区和节点的状态信息。
用户可以使用help来查看这些命令的基本描述。

作业提交与运行

当然,在实际运用过程中,我们通常只会用到上述命令中的几个:

sinfo#查看节点与分区状态squeue3查看队列状态scancel#取消作业sacct#查看历史作业信息salloc#分配资源sbatch#提交批处理作业scontrol#系统控制srun#执行作业

首先,在上传任务之前,我们应当先使用sinfo命令查看系统状况,看看分区与节点状态以便选择作业上传的分区。

$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*      up      30:00     100  drain  cn[1-100]
debug*      up      30:00     100  alloc  cn[101-200]
batch       up      30:00     100  idle   cn[200-300]
batch       uo      30:00     100  down*  cn[300-400]


关键词说明,图表来源: slurm作业管理系统使用教学
从上例可以看出,此超算有两个分区,debug和batch,表示提交作业的默认分区,对于相同的分区,可以用多行信息表示,以此来表示不同节点的状态。也就是说,在同一分区中,不同的节点状态也是不同的,如down表示节点不可用,则我们在选择时也可以选择对应分区的对应节点(使用公共前缀adev和标识的数字范围或特定数字来选择),这样在管理可以更加集中。
选择对应的分区节点后,我们开始提交作业。作业提交分为两种交互式作业任务与批处理任务。
交互式任务提交
交互式任务允许用户实时监测程序的输出与运行并允许用户直接调试程序,在对于任务数据处于探索阶段时,或者使用R或python等交互式平台工具时,可以考虑使用交互式任务提交。
交互式任务提交童超就要通过salloc申请到计算节点,再ssh连接到计算节点,srun命令直接执行任务,该模式下,用户可以直接登录到计算节点,此后 所有的操作都在这个节点上进行。
先使用salloc命令申请资源

salloc -p C032M0128G -N1 -n6 -q low -t 2:00:0
%% -N <节点数量>
--cpus-per-task=<单进程 CPU 核心数>
--gres=gpu:<单节点 GPU 卡数>
-t <最长运行时间>
-p <使用的分区>
--qos=<使用的 QoS>

在执行salloc命令成功后,会出现新的shell,返回申请到的节点和作业ID等信息,之后用户可直接连接到节点使用srun执行任务,
srun常用选项有:

-n 指定运行任务数
-c 每个任务所需要的任务器核数
-N 作业分配节点数
-p 指定分区

上述示例表示在三个节点(-N3)上执行 /bin/hostname任务,并在输出(-l)上包含任务编号。将使用默认分区。默认情况下,每个任务一个节点。
交互式计算使用完毕后,先使用 exit 退出节点,再执行 exit 退出 SLURM 分配 的 Shell,可结束这次交互式任务。SLURM 会提示你交互式任务的资源已经被释放。
批处理任务
一般情况下,我们会撰写脚本再进行执行,再通过Sbatch命令执行脚本。
使用vim等文本编辑器创建后缀为,sh的脚本,如:

$ vim myjob.sh

之后开始撰写脚本:

#!/bin/bash #固定行,使脚本作为bash  script执行
# 所有SBATCH 为头的命令用来设置Slurmd调度中需要的参数,可以不进行设置,使用默认值
#SBATCH -J test                   # 作业名为 test
#SBATCH -o test.out               # 屏幕上的输出文件重定向到 test.out
#SBATCH -p gpu                    # 作业提交的分区为 cpu
#SBATCH --qos=debug               # 作业使用的 QoS 为 debug
#SBATCH -N 1                      # 作业申请 1 个节点
#SBATCH --ntasks-per-node=1       # 单节点启动的进程数为 1
#SBATCH --cpus-per-task=4         # 单任务使用的 CPU 核心数为 4
#SBATCH -t 1:00:00                # 任务运行的最长时间为 1 小时
#SBATCH --gres=gpu:1              # 单个节点使用 1 块 GPU 卡
#SBATCh -w comput6                # 指定运行作业的节点是 comput6,若不填写系统自动分配节点
run your command

比如,若要执行某一python脚本,可在命令行写上:

$ python <脚本名>

即可。
将 SLURM 脚本编写完毕并上传工作站后(或直接在工作站编辑),进入SLURM 脚本的目录,直接

sbatch myjob.sh

提交即可。

任务状态查询与取消

通常使用squeue和sacct来监控在SLURM中的作业活动,squeue查看当前运行作业队列情况,sacct查看已结束任务情况。

$ squeue
JOBID    PARTITION  NAME     USER       ST  TIME      NODES NODELIST(REASON)
1454916  debug      sub.sh   zhenggang  R   00:05:00  2     cn[5-6]
#以上分别代表作业号,分区,作业名,用户,作业状态,运行时间,节点数量,运行节点REASON表示正在排队的原因

squeue常见参数有:

--help    # 显示squeue命令的使用帮助信息;
-A <account_list>    # 显示指定账户下所有用户的作业,如果是多个账户的话用逗号隔开;
-i <seconds>     # 每隔相应的秒数,对输出的作业信息进行刷新
-j <job_id_list> # 显示指定作业号的作业信息,如果是多个作业号的话用逗号隔开;
-n <name_list>     # 显示指定节点上的作业信息,如果指定多个节点的话用逗号隔开;
-t <state_list>     # 显示指定状态的作业信息,如果指定多个状态的话用逗号隔开;
-u <user_list>     # 显示指定用户的作业信息,如果是多个用户的话用逗号隔开;
-w <hostlist>     # 显示指定节点上运行的作业,如果是多个节点的话用逗号隔开;

过使用aact查询特定任务的细节:

sacct -j JOBID
输出:JobID    JobName  Partition    Account  AllocCPUS      State ExitCode
作业号,作业名,分区,计费账户,申请的CPU数量,状态,结束代码

使用scancel取消某一任务:

scancel JobID

WRF安装与运行

环境变量

在自定义安装软件的时候,经常需要配置环境变量,只有在特定环境下,Linux才能运行相应的软件。环境变量可分为:
永久变量:通过修改配置文件,配置之后变量永久生效。
临时性变量:使用命令如export等命令设置,设置之后马上生效。当关闭shell的时候失效(这种主要用于测试比较多)。
在安装WRF时,我们必须将其编译,形成相应的可执行文件,而在编译与运行过程中,我们就需要许多变量的设置

WRF安装

首先你当然应该先安装WRF,但相关教程实在太多,我不想过多赘述,请自行搜索。
我这里总结以下WRF的安装步骤,请各位在安装时一步步对照,以便安装出现错误时便于查找。
1、Window下的Linux系统安装(多种方式,自行选择)
2、安装编译器与系统环境:WRF代码是由C与Fortran写成,使用WRF也安装需要各种各样相关的编译器,可参考:WRF环境与编译器安装
Linux中编译代码只需要:

令[compiler] -flag [sourcefile] -o [executive]。
compiler为编译器名,flag为编译过程中的参数设
置,sourcefile为源代码文件,executive为编译成的可执行文件,默认的文 件是a.out

3、安装库,WRF要实现nc文件的读取、编译WPS,需要装一大堆库,参考:WRF三方库安装
4、安装与编译WRF。
编译WRF前你需要导入相应的环境变量,如:

module load oneapi
export CC=icc
export FC=ifort
export F90=ifort
export CXX=icpc
export DIR=/dssg/home/acct-hpc/hpchgc/software/wrf/WRF_4.1.1_Intel/library
export LD_LIBRARY_PATH=$DIR/wrf_libs_intel/lib:$LD_LIBRARY_PATH
export LDFLAGS=-L$DIR/wrf_libs_intel/lib
export CPPFLAGS=-I$DIR/wrf_libs_intel/include
export NETCDF=$DIR/wrf_libs_intel/
export HDF5=$DIR/wrf_libs_intel/
export NETCDF=$DIR/wrf_libs_intel/
export HDF5=$DIR/wrf_libs_intel/

然后,解压下载的WRF安装包,进入WRF文件夹,开始编译:

tar Wrf v4.0.1.tar.gz
cd WRF-4.0.1/
./configure

然后,出现一大堆东西让你选择相应参数,即选择编译器、构建 WRF 的方式(即,串行或并行),官方给了三种不同类型的并行(smpar、dmpar 和 dm+sm)。

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 MPT9. (serial)  10. (smpar)  11. (dmpar)  12. (dm+sm)   PGI (pgf90/gcc): PGI accelerator13. (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 MPT26. (serial)  27. (smpar)  28. (dmpar)  29. (dm+sm)   INTEL (ifort/icc): IBM POE30. (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 CLE44. (serial)  45. (smpar)  46. (dmpar)  47. (dm+sm)   CRAY CCE (ftn $(NOOMP)/cc): Cray XE and XC48. (serial)  49. (smpar)  50. (dmpar)  51. (dm+sm)   INTEL (ftn/icc): Cray XC52. (serial)  53. (smpar)  54. (dmpar)  55. (dm+sm)   PGI (pgf90/pgcc)56. (serial)  57. (smpar)  58. (dmpar)  59. (dm+sm)   PGI (pgf90/gcc): -f90=pgf9060. (serial)  61. (smpar)  62. (dmpar)  63. (dm+sm)   PGI (pgf90/pgcc): -f90=pgf9064. (serial)  65. (smpar)  66. (dmpar)  67. (dm+sm)   INTEL (ifort/icc): HSW/BDW68. (serial)  69. (smpar)  70. (dmpar)  71. (dm+sm)   INTEL (ifort/icc): KNL MIC72. (serial)  73. (smpar)  74. (dmpar)  75. (dm+sm)   FUJITSU (frtpx/fccpx): FX10/FX100 SPARC64 IXfx/XlfxEnter selection [1-75] :

根据编译器及电脑配置选择 即可。
之后会出现第二给选择,选择1basic,执行完成后,输入:

./compile em_real >& log.compile   %屏幕输出与执行日志
./compile em_real  %将执行时输出的内容直接输出到屏幕

开始编译,等待一段时间,在WRF文件夹main目录下将会生成4个可执行文件,使用
ls -ls main/*.exe
命令查找main文件夹下的4个可执行文件,如果都有的话,WRF安装成功。
如果编译未成功,大概是在选择configure类型时你选错了,系统里没有你选择的编译器或者环境变量出错了,检查编译器电脑配置。
如果想使用MPI编译的话,configure类型选择无编译器的那几个编号,然后修改configure。wrf文件:

DM_FC           =       mpiifort
DM_CC           =       mpiicc

5、安装与编译WPS,WPS是WRF的前处理部分,安装它主要是获得3个可执行文件:geogrid.exe,ungrib.exe 和 metgrid.exe。必须在安装WRF后安装。
以防万一,先加载个环境变量,确保JASPERLIB/路径下有libjasper.a,libpng.a和libz.a这三个文件,且JASPERINC/ 路径下有 jasper/ 目录, png.h 和 zlib.h两个文件。

https://xg1990.com/blog/archives/190:

export DIR=/usr/local/wrf/LIBRARIES
export PATH=$DIR/mpich/bin:$PATH
export PATH=$DIR/grib2/bin:$PATH
export JASPERLIB=$DIR/grib2/lib
export JASPERINC=$DIR/grib2/include
export NETCDF=$DIR/netcdf
export WRF_DIR=/usr/local/wrf/WRFV3/4

把你下载好的WPS压缩包(记得与WRF版本对应)解压至WRF的安装目录,然后进入WPS目录。./configure
和编译WRF时一样,会出现多种configure类型选择,根据编译器选择即可。
修改configure.wps文件中的,zlib、jasper、libpng文件路径,否则可能没有ungrib.exe执行文件。
之后步骤与编译WRF类似,安装成功后会出现3个可执行文件。
之后就可以试着跑了,当然为了方便后处理你也可以装NCL、Anacoda、NCviewer之类的,看需求吧。

WRF运行

安装好WRF后运行流程与namelist的修改可以可以查看我之前的博客:WRF模式入门(Cygwin版),我这里主要讲一下超算上多出来的一些步骤,一般来说,超算服务器上是有安装好的WRF的,你可以跳过安装步骤直接运行。
以天河为例,你可以使用:

module avail wrf

查看当前服务器上的WRF。
之后,创建一个文件夹,用于WRF的运行:

mkdir ~/data && cd ~/data

把你的数据通过fttp上传至创建的文件夹中,把数据拷贝到WPS的目录中,接下来步骤就不讲了,各位可参考我给的博客。WRF入门(cygwin版)
虽然是Cygwin版,但运行步骤是类似的,不同的是Cygwin版本是将WRF整个打包好,在安装上省略了一些步骤。
可以将运行WRF(包括前处理)的所有命令写成一个脚本文件,脚本文件sub.sh,之后:

#!/bin/bash
yhrun -N 1 -n 28 -pTH_HPC1 wrf.exe`-N 节点数
-n 总核数
-p 计算分区名
wrf.exe 可执行程序名称

运行结束可以查看结果,通过前文介绍的Slurm可以查看作业进程,若rsl文件中有SUCCESS COMPLETE WRF则表示运行成功。

总结

接下来我们可以总结一下:在超算中运行WRF,我们应当知道什么?
首先是超算集群的基础构造与基本运行原理,让我们明白自己是在什么样的东西上运行程序。
其次是Linux系统的命令,系统帮助我们让计算机实现各种功能。
然后是一些在运行时我们需要了解到知识:运行WRF时,我们需要安装压缩包与数据,这就需要我们学会远程登陆与数据传输。
运行WRF时整个操作都是在Linux上进行,所以需要基础命令。
配置WPS与WRF的namelist文件需要文本编辑,所以需要vi知识。
我们可以撰写Shell脚本来方便WRF的运行,最后,WRF的运行在服务器上要以任务形式提交,我们自然需要学到作业调度,便于管理我们的WRF任务状态。
以上便是我个人认为在超算上需要了解到知识,当然不止WRF,任何在超算上的模式运行都需要了解一些以上这些知识点。

超算入门笔记:大型机上如何运行WRF模式?一文总结(并行运算、Linux基础、作业调度、WRF运行)相关推荐

  1. 深度学习入门笔记(四):向量化

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  2. 【Python3零基础入门笔记】05 Python时间处理——time库的使用

    time库的使用: time库基本情况 时间获取 时间格式化 程序计时 文本进度条实例 time库基本情况 Time库是python中处理时间的标准库 计算机时间表达 提供获取系统时间并格式化输出功能 ...

  3. WRF模式与Python融合技术在多领域中的应用及精美绘图

    当今从事气象及其周边相关领域的人员,常会涉及气象数值模式及其数据处理,无论是作为业务预报的手段.还是作为科研工具,掌握气象数值模式与高效前后处理语言是一件非常重要的技能.WRF作为中尺度气象数值模式的 ...

  4. Spark基础学习笔记05:搭建Spark Standalone模式的集群

    文章目录 零.本讲学习目标 一.Spark集群拓扑 (一)集群拓扑 (二)集群角色分配 二.搭建集群 (一)私有云上创建三台虚拟机 (二)利用SecureCRT登录三台虚拟机 1.登录master虚拟 ...

  5. WRF模式应用:天气预报、模拟分析观测气温、降水、风场、水汽和湿度、土地利用变化、土壤及近地层能量水分通量、土壤、水体、植被等相关气象变量

    查看原文>>>高精度气象模拟软件WRF(Weather Research Forecasting)技术及案例应用 目录 区域气候模式理论知识梳理 Linux操作系统WRF模式系统实际 ...

  6. 如何查看 Linux 中所有正在运行的服务

    有许多方法和工具可以查看 Linux 中所有正在运行的服务.大多数管理员会在 System V(SysV)初始化系统中使用 service service-name status 或 /etc/ini ...

  7. linux oracle查看服务,技术|如何查看 Linux 中所有正在运行的服务

    有许多方法和工具可以查看 Linux 中所有正在运行的服务.大多数管理员会在 System V(SysV)初始化系统中使用 service service-name status 或 /etc/ini ...

  8. Linux查hudi服务的进程,Linux查看非root运行的进程

    Linux查看非root运行的进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps -U root -u root -N PID TTY TIME CMD ...

  9. Python3入门笔记(1) —— windows安装与运行

    Python3入门笔记(1) -- windows安装与运行 Python的设计哲学是"优雅"."明确"."简单".这也是我喜欢Python ...

  10. python3下载安装windows教程-Python3入门笔记(1) —— windows安装与运行

    Python的设计哲学是"优雅"."明确"."简单".这也是我喜欢Python的理由之一 Python的安装: 点击导航栏的 Downloa ...

最新文章

  1. 给python点颜色青少年学编程_早晨送给自己的句子,句句经典励志!
  2. 金融危机带给我的思考
  3. Linux 第60,61天 ansible的playbook
  4. 马化腾内部分享:三个问题说透如何做产品
  5. 模型摆完pose怎么对称_糖分过浓警告!108个情侣写真pose,太好拍了!
  6. 此版本的应用程序不支持其项目类型 (.etp)_适用于Microsoft Dynamics 365商业中心的VPS和VJS版本1.8...
  7. 动态代理的简单实例.
  8. SAP Fiori Elements 在本地测试模式下如何修改 List Report 里字段标签和图标
  9. html选择器是什么,CSS3选择器是什么?
  10. (转)基于MVC4+EasyUI的Web开发框架形成之旅--权限控制
  11. php 防止url输入,php防止伪造数据从地址栏URL提交的方法
  12. 用AI帮你画新年贺卡:只需输入几个单词,就能模仿大师名作
  13. 某“高人”谈论股市,对现在行情的分析
  14. Linux网络服务之DHCP
  15. mapgis 6.7视频教程
  16. 从无到有axure原型设计_从零开始学Axure原型设计(入门篇)
  17. 五一快乐假期每天都在上课qaq
  18. 同步,异步,直流电机原理
  19. 将 5 万行 Java 代码移植到 Go 学到的经验
  20. 智慧公厕系统让如厕成为一种享受

热门文章

  1. 计算机锁屏如何取消密码,Win10锁屏密码怎么取消?Win10系统取消锁屏密码的方法教程...
  2. 基层教学组织评估系统6_项目完结心得收获、思考人生篇
  3. 产品经理视角下的中国县城
  4. Rockchip瑞芯微UART调试指南
  5. 搞笑很好玩的14个缎子
  6. [id: * L:/* ! R:/*] onUncaughtException(SimpleConnection{channel=[id: *
  7. Scala——函数式编程、面向对象
  8. Amlogic Linux系列(四) 视频解码分析2
  9. 正式工作后的一些变化和感受
  10. 马斯克的“圣战”:阻止人工智能毁灭人类