工作的脚本

系列单线程

这个示例演示了一个工作脚本设计一个计算节点上运行一个简单的单线程的进程:

# = = = = = = =示例作业脚本# ! / bin / bash# SBATCH——作业名= mySerialjob= 1 # SBATCH——节点# SBATCH——ntasks-per-node = 1# SBATCH——cpus-per-task = 1# = 0-00:20:00 SBATCH——时间# SBATCH - mem = 3102cd $ {SLURM_SUBMIT_DIR}模块加载someApp someApp

解释

一个进程运行只需要1个节点,以及1 cpu核心和一个任务。这些都是反映在示例脚本。我们改变的同一目录提交的工作($ {SLURM_SUBMIT_DIR})来产生输出。然后我们加载模块“someApp”并执行它。

注意,$ {SLURM_SUBMIT_DIR}是许多可用的环境变量从粘工作很多脚本。一个全面的列表,请参阅粘的文档很多

多线程单节点

在这个例子中,我们能够利用多个进程线程的应用程序运行在单个节点上(爆炸):

# = = = = = = =示例作业脚本# ! / bin / bash# SBATCH——作业名= myBLASTjob= 1 # SBATCH——节点# SBATCH——ntasks-per-node = 1# SBATCH——cpus-per-task = 8# = 0-01:00:00 SBATCH——时间# SBATCH - mem = 3102cd $ {SLURM_SUBMIT_DIR}模块加载爆炸blastn——num_threads 8 <…>

解释

在这种情况下,我们仍然有一个任务(我们blastn运行),但我们需要8 cpu核容纳8线程我们在命令行上指定。尖括号之间的椭圆代表我们的命令行参数的平衡。

多个连续的工作

这里我们展示可以运行同一应用程序的多个副本,并利用粘的很多“srun”命令在多个节点分配任务:

# = = = = = = =示例作业脚本# ! / bin / bash= 2 # SBATCH——节点# SBATCH——ntasks-per-node = 2# SBATCH——cpus-per-task = 1# = 0-01:00:00 SBATCH——时间# SBATCH - mem = 3102模块加载someApppython myScript srun - n 2。py & srun - n 2 someApp &等待

解释

我们指定2节点和任务每个节点(总4任务)。“srun”命令是用来直接2每个应用程序应该运行的副本。srun与粘推出很多每个任务和进度在我们指定的节点。与字符(&)使每个任务运行“背景”,这样所有任务可以并行启动,不阻塞等待其他任务完成。“等待”指令告诉粘等到很多后台任务都完成了。

MPI的工作

重要的笔记

在编译应用程序时使用OpenMPI,建议用户使用OpenMPI / 4.1.1c或更高版本(版本以下4.4.1和你应该避免)。此外,当运行任何应用程序,使用或与OpenMPI编译,不要使用SRUN。OpenMPI专门的开发人员不鼓励使用“srun”和经验表明它可能导致的过度使用问题(负载将高于指定的核心的数量)。相反,使用“mpirun”没有“np < #核>”旗帜。

因为OpenMPI编译使用粘,很多工作脚本中指定数量的任务是充分的,并添加“np”标志可能会导致性能问题,包括过度使用。事实上,只有一个可以选择指定“ntasks”独立的每个节点,节点或任务的数量自粘会自动分配必要的很多的节点数量和分配相应的核心当调用“mpirun”。

MPI的例子

这是工作的一个例子脚本运行一个MPI应用程序跨多个节点分布式内存:

# = = = = = = =示例MPI作业脚本# ! / bin / bash= 2 # SBATCH——节点# SBATCH——ntasks-per-node = 14# SBATCH——ntasks = 28# SBATCH——cpus-per-task = 1# SBATCH——mem-per-cpu = 1 g# = 0-10:00:00 SBATCH——时间模块加载OpenMPI / 4.1.1cmpirun。/ my_mpi_app

解释

每个节点和14两个节点分配任务(28)的任务。每个CPU和1 GB的RAM分配mpirun用于启动我们的mpi程序。因为OpenMPI编译与粘库,很多“mpirun”命令作为包装,确保将正确的数量的任务分配给应用程序基于“ntasks”规范工作提供的脚本。

互动的工作

srun

可以安排一个交互式工作在集群上。这可以通过使用“srun”并指定资源在命令行参数:

srun - n - c 1 - t 30:00——企业/bin/bash登录

解释

1节点指定为核心,与walltime 30分钟。的平衡给了我们一个bash登录shell的命令,将由一个粘上很多计划计算节点。

在推出srun和工作资源分配,您将连接交互会话在计算节点上。一旦您退出计算节点,工作会话终止。

salloc

如果你想创建一个交互式会话连接和断开的工作没有终止它在达到walltime限制之前,您可以使用“salloc”:

salloc - n - c 1 - t 30:00

这将返回类似如下:

18187年salloc:授予的工作分配

现在连接到计算节点上的资源分配,使用“srun”:

srun——jobid = 18187——企业/bin/bash

当然,代入你的实际工作由salloc返回数量。

解释

使用salloc和srun分离的资源分配实际的交互计算节点会话。这允许用户分配资源,并连接或断开会话没有杀死工作(只要walltime不超过)。

X11转发

玛蒂尔达现在允许X11转发互动运行的节点。要使用转发,您必须首先建立一个X11会话登录节点:

ssh - x(电子邮件保护)

或者:

使用ssh - y(电子邮件保护)

注意:“- x”对待玛蒂尔达作为一个“不可信”主机,可能更安全,但可能导致更多的错误。“可能是”对待玛蒂尔达作为一个“可信的”主机和不太可能产生错误(但可能有点不太安全)。一般经验法则,使用“- x”,除非你找到你的应用程序不运行使用它,在这种情况下,使用“- y”。有时“- x”将崩溃特定GUI应用程序,因为它限制了某些功能,可能需要为应用程序正常工作。

一旦一个X11会话建立在玛蒂尔达,您可以使用“srun”启动交互式工作如下(允许X11转发节点):

srun - n - c 1 - t 30:00——x11——企业/bin/bash——登录

类似地,如果您正在使用“salloc-srun”的方法,您可以使用:

salloc - n - c 1 - t 30:00——x11srun——jobid = < jobnumber >——xll——企业/bin/bash

解释

上面的命令下提交的是几乎完全相同的部分srunsalloc,除了”——x11“国旗被添加到每个命令,你必须首先建立一个x会话登录节点。

工作数组

工作数组是一个方便的方式来执行相同的程序集或任务在多个数据集,而无需发射不止一项工作。这样可以减少工作脚本所需的数量,并允许工作并行运行一个脚本。在下面的示例中,我们在4种不同的输入文件执行相同的过程:

# = = = = = = =示例作业脚本# ! / bin / bash# SBATCH——作业名= myArrayest= 1 # SBATCH——节点# SBATCH——ntasks-per-node = 1# SBATCH——cpus-per-task# = 0-10:00:00 SBATCH——时间# SBATCH——数组= 1 - 4文件= $ (awk“NR = = $ {SLURM_ARRAY_TASK_ID}”file_list.txt)python /home/someUser/myscript.py文件> myoutput_ {SLURM_ARRAY_TASK_ID} .out美元

解释

  1. 行“# SBATCH——数组= 1 - 4”指定我们运行4个任务,编号1 - 4
  2. 线开始“file = "使用脚本语言“awk”阅读相对应的行号SLURM_ARRAY_TASK_ID file_list(1 - 4)的文件”。txt”,这是包含在工作目录中
  3. myscript python脚本”。py”操作返回的值为" $文件”(文件名)和输出存储在一个文件名为“myoutput_ #。”,“#”对应的工作数组ID粘的任务很多。

GPU的工作

运行一个基于gpu的工作,我们只需要添加一个SBATCH通用资源请求“格蕾丝”“gpu”如下所示:

# = = = = = = =示例作业脚本# ! / bin / bash# SBATCH——作业名= myArrayest= 1 # SBATCH——节点# SBATCH——ntasks-per-node = 1# SBATCH——cpus-per-task = 1# SBATCH——格蕾丝= gpu: 1。/ myGPUapp

解释

在上面的示例中,”——格蕾丝= gpu: 1”请求一个gpu。这项工作将自动分配给一个HPC GPU节点。


CategoryHPC