在纵帆船上运行作业
目录表
Schooner's Job Scheduler - SLURM
Schooner使用SLURM来管理集群上的作业。Simple Linux Utility for Resource Management (SLURM)是一个开源的、可扩展的集群管理和作业调度系统,在世界上大约60%的最大的计算集群上使用。
学习SLURM
在线:官方SLURM文档在Schooner上:使用man命令了解有关命令的更多信息。示例:输入man sbatch将显示sbatch命令的手册页
有其他工作负载管理器的脚本吗?
如果您为其他工作负载管理器(如PBS/Torque、LSF等)编写了脚本,请参考本转换指南,了解最常见的SLURM命令、环境变量和作业规范选项。
作业信息(队列)
squeue命令以以下格式提供有关在Schooner上运行的作业的信息:作业ID,分区,名称,用户,作业状态,时间,节点,原因
输入queue列出队列中所有当前(和挂起)的作业。输入queue -u
关于queue命令的更多信息可以在SLURM在线文档中找到,或者在Schooner上输入man queue。
分区信息(sinfo)
sinfo命令提供有关您在Schooner上可以访问的分区(或队列)的信息。显示格式为:分区名称、可用性、时间限制、节点、状态、节点列表
输入sinfo提供关于分配给您访问权限的所有队列的信息,输入sinfo -p <分区名称> 提供指定队列的信息 分区名称>
关于sinfo命令的更多信息可以在SLURM在线文档中找到,或者在Schooner上输入man sinfo。
调试任务(scontrol)
scontrol命令可用于获取有关作业、节点或分区的配置详细信息,在调试作业时特别有用。
Scontrol show job
关于scontrol命令的更多信息可以在SLURM在线文档中找到,或者在Schooner上输入man scontrol。
提交批处理作业(sbatch)
sbatch命令用于向SLURM提交作业。脚本文件中的SBATCH命令可用于指定资源参数,例如:作业名称、输出文件、运行时间等。下面的示例作业部分介绍了一些基本的sbatch命令和sbatch标志。
关于sbatch命令的更多信息可以在SLURM在线文档中找到,或者在Schooner上输入man sbatch。
取消作业(cancel)
使用scancel命令取消挂起的和正在运行的作业。
scancel
<作业号>
取消指定的作业scancel -u
关于scancel命令的更多信息可以在SLURM在线文档中找到,或者在Schooner上输入man scancel。
帆船环境模块系统- LMOD
Schooner拥有大量的软件、编译器和库,以满足用户的需求。通常,我们必须部署同一软件或编译器的多个版本。Lmod通过设置模块来帮助管理这些安装。用户可以通过只加载他们需要的模块来指定他们的自定义环境。
LMOD模块的显示形式如下: <应用名称> / <应用版本> - <编译器类型>编译器类型> 应用版本> 应用名称>
例子:英特尔NAMD / 2.11 - 2016 - a - mpi
未编译的软件将不会有<compiler type>信息。例如:MATLAB / 2015 a
列出了Schooner上所有可用的模块
输入module avail会给出Schooner上安装的所有模块的列表。列表格式如下: <应用程序名称> / <应用程序版本> - <编译器类型> 。 编译器类型> 应用程序版本> 应用程序名称>
你会看到一个类似这样的列表:
你会注意到一些模块旁边有一个(D)。这适用于具有多个可用版本的模块。(D)表示模块的特定版本已被指定为默认模块,如果不指定应用程序版本,则模块的特定版本将加载到环境中。
示例:Autoconf/2.69-intel-2016a已被指定为Autoconf on Schooner的默认模块。Autoconf/2.69-GCC-4.9.2 Autoconf/2.69-GCC-4.9.3-2.25 Autoconf/2.69-GNU-4.9.3-2.25 Autoconf/2.69-goolf-1.4.10 Autoconf/2.69-intel-2016a (D)
加载模块
输入module load
例子:以下版本的Autoconf帆船上安装:Autoconf / 2.69 -gcc-4.9.2 Autoconf / 2.69 gcc - 4.9.3 2.25 - 2.25 Autoconf / 2.69 gnu 4.9.3 Autoconf / 2.69 -goolf-1.4.10 Autoconf英特尔/ 2.69 - 2016 a (D)输入模块加载Autoconf将负载Autoconf英特尔/ 2.69 - 2016如果你想负载Autoconf / 2.69 -gcc-4.9.2,你需要加载Autoconf / 2.69 -gcc-4.9.2类型模块
列出环境中所有加载的模块
输入模块列表显示当前在环境中加载的所有模块
从环境中删除模块
要删除特定模块,输入module unload
样的工作
典型的作业脚本包含两个部分:请求资源和作业步骤。请求资源包括指定所需的CPU数量、运行时间、内存等。这是通过使用SBATCH命令在脚本中完成的。工作步骤描述了必须执行的任务。
场工作
下面的代码是一个简单的非并行作业,它使用hostname命令获取执行该作业的节点的名称。您可以使用皇冠体育app喜欢的编辑器创建或编辑此文件。如果你没有最喜欢的编辑器,我们建议nano。提交脚本的文件名可以是您喜欢的任何名称,但我们建议使用.sbatch扩展名,以便将其与其他shell脚本区分开来。在本例中,我们将其命名为single-test.sbatch。
#!/bin/bash ## SBATCH——partition=normal #SBATCH——ntasks=1 #SBATCH——mem=1024 #SBATCH——output=jobname_%J_stdout.txt #SBATCH——error=jobname_%J_stderr.txt #SBATCH——time=12:00:00 #SBATCH——job-name=jobname #SBATCH——mail-user=youremailaddress@yourinstitution.edu #SBATCH——mail-type=ALL #SBATCH——chdir=/home/yourusername/directory_to_run_in # #################################################主机名
保存这个文件之后——这里称为single-test。Sbatch——您需要使用命令使其可执行
Chmod +x single-test.sbatch
然后你可以提交你的工作
sbatch single-test.sbatch
代码走查
下面的SBATCH指令表示要使用的分区的名称。在大多数情况下,应该使用名为normal的队列。
# SBATCH——分区=正常
下面的SBATCH指令说在1个计算节点上使用1个CPU芯片的1个CPU内核,这意味着这个批处理作业是非并行的(串行的)。
# SBATCH——ntasks = 1
下面的SBATCH指令向调度器指示作业将使用的内容量(以兆为单位)。这是调度非排他性作业的关键信息,因为它可以防止调度器向给定计算节点分配超过该节点内存容量的作业。
# SBATCH - mem = 1024
默认单位是MB,但您也可以指定GB,例如——mem=8G
下面的SBATCH指令告诉SLURM将输出和错误消息发送到下面列出的文件名。注意,在这些文件名中,%J将被批作业ID号替换。
#SBATCH——error=jobname_%J_stderr.txt
下面的SBATCH指令说运行最多12小时(零分钟和零秒)
# = 12:00:00 SBATCH——时间
大多数分区的最大时间限制是48小时,可以指定为48:00:00或2-00:00:00
下面的SBATCH指令表示批处理作业的名称。当您执行一个queue命令时,这个名称将出现在批处理分区中。您可以将jobname重命名为您喜欢的任何名称。
# SBATCH——作业名= jobname
下面的SBATCH指令表示要发送通知的电子邮件地址,应该将其更改为您的电子邮件地址。
# SBATCH——邮件用户= youremailaddress@yourinstitution.edu
下面的SBATCH指令表示在批处理作业完成或失败时通过电子邮件发送通知。如果不包含此SBATCH指令,则只会在批处理作业失败时收到一封电子邮件。
# SBATCH——邮件类型=
切换到要运行的目录。
# SBATCH——=目录/ home / yourusername / directory_to_run_in
在提交作业之前,该目录需要存在。
此命令获取运行作业的计算节点的名称。这只是一个非常简单的例子。你可以把实际的可执行文件放在那里,或者你的作业循环,或者任何你需要运行的有效载荷。
主机名
并行作业
下面的代码是一个简单的并行作业,以每个节点20个MPI进程运行在40个MPI进程上。
从Wikipedia下载样例代码,并将其作为mpi_example.c保存在您的工作目录中
使用以下命令编译它:
模块加载OpenMPI mpicc mpi_example.c -o hello.mpi
现在运行以下代码(有关批处理脚本命名和提交的更多信息,请参阅上面的非并行作业示例):
#!/bin/bash #SBATCH——partition=normal #SBATCH——exclusive #SBATCH——nodes=2 #SBATCH——ntasks=40 #SBATCH——ntasks-per-node=20 #SBATCH——output=jobname_%J_stdout.txt #SBATCH——error=jobname_%J_stderr.txt #SBATCH——time=10:00 #SBATCH——job-name=jobname #SBATCH——mail_user =youremailaddress@yourinstitution.edu #SBATCH——mail_type =ALL #SBATCH——chdir=/home/yourusername/directory_to_run_in module load OpenMPI mpirun hello.mpi
代码走查
下面的SBATCH指令表示要使用的分区的名称。在大多数情况下,应该使用名为normal的队列。
# SBATCH——分区=正常
下面的SBATCH指令要求在参与的计算节点上请求独占访问,以便其他批处理作业(例如,由其他用户提交的批处理作业)不会在与此批处理作业相同的计算节点上运行,因此不会干扰它。
# SBATCH——独家
在每个节点上使用40个MPI进程,每个节点有20个MPI进程,也就是说在普通分区的情况下有2个节点。对于普通分区中的节点,请使用以下模式:对于ntasks <= 20,请使用ntasks-per-node = n,除非您有很好的理由不这样做。对于ntasks >= 20,请使用ntasks-per-node = 20,除非您有很好的理由不这样做。这是因为每个计算节点有2个芯片,每个芯片有10个核心,每个节点总共有20个核心。我们建议每个节点使用相同数量的MPI进程作为核心,除非您已经对代码的性能进行了基准测试,并发现每个节点使用少于20个进程可以减少节点时间。
#SBATCH——ntasks=40 #SBATCH——ntasks-per-node=20
下面的SBATCH指令告诉SLURM将输出和错误消息发送到下面列出的文件名。注意,在这些文件名中,%J将被批作业ID号替换。
#SBATCH——error=jobname_%J_stderr.txt
下面的SBATCH指令说要运行最多10分钟
# SBATCH——时间= 10
下面的SBATCH指令表示批处理作业的名称。当您执行一个queue命令时,这个名称将出现在批处理分区中。您可以将jobname重命名为您喜欢的任何名称。
# SBATCH——作业名= jobname
下面的SBATCH指令表示要发送通知的电子邮件地址,应该将其更改为您的电子邮件地址。
# SBATCH——邮件用户= youremailaddress@yourinstitution.edu
下面的SBATCH指令表示在批处理作业完成或失败时通过电子邮件发送通知。如果不包含此SBATCH指令,则只会在批处理作业失败时收到一封电子邮件。
# SBATCH——邮件类型=
切换到要运行的目录。
# SBATCH——=目录/ home / yourusername / directory_to_run_in
该命令加载执行程序所需的模块。在本例中,我们使用的是OpenMPI。
模块加载OpenMPI
该命令执行hello命令。我们之前编译的Mpi文件
mpirun hello.mpi
成功完成作业后,输出文件应该如下所示:
我们有40个过程。处理1报到工作。流程2报到值班。负责报告工作。流程4报到。处理工作报告。处理6值班报告。负责报告工作。负责工作报告。负责报告工作。流程10值班报告。流程11值班报告。流程12报到。流程13报到。流程14值班报告。负责15份工作报告。流程16报到。流程17值班报告。流程18值班报告。流程19报到。流程20报到。流程21报到。程序22报到。流程23报到。处理24个值日报告。处理25人报到。流程26报到。处理27个值日报告。处理28个值日报告。流程29报到。处理30个值日报告。流程31报到。办理32人报到。流程33报到。处理34个值日报告。处理35个值日报告。处理36个值班报告。处理37个值日报告。处理38人报到。处理39的报到工作。