使用的工作步骤

概述

粘,很多工作步骤的方式推出不同的平行(最常见)和/或顺序的任务在一个脚本工作。执行工作步骤使用粘命令很多”srun”。

默认情况下,所有工作由至少一个(或更多)的工作步骤。工作时启动一个步骤是自动创建的,即使“srun”不是用来启动不同的任务。回忆的讨论工作的脚本工作脚本包含指令的粘资源管理器,用于指定很多资源使用的工作,如节点的数目,核心,任务,每个任务的cpu等。当工作步骤启动了在使用“srun”全部或部分job-defined每个任务所使用的资源是由“srun”。

工作步骤示例1:并行任务,多个节点

想象我们有以下的工作脚本:

示例1 # #的工作步骤# !/bin/bash——登录# SBATCH——作业名= jobStepEx1= 2 # SBATCH——节点# SBATCH——ntasks = 2# SBATCH——cpus-per-task = 40# = 01:00:00 SBATCH——时间# #启动并行作业步骤srun - n - n 1 - c 40。/ myScript。py -我的数据集。dat - o output1。dat &srun - n - n 1 - c 40。/ anotherScript。py -我input2。dat - o output2。dat &等待/后处理。py -我output1。dat output2.dat回声“结束工作”

解释

在上面的示例中,我们分配2个节点、2个任务,和40 cpus-per-task。在这种情况下,需要至少2任务以来,我们打算运行2平行(同时)任务(用“srun”命令)。因为我们想利用40 cpu核为每一个任务,我们需要确保我们至少分配2节点(40核心玛蒂尔达是通常与计算节点相关联)。注意&“&”结束时,每一个“srun”命令行。在Linux中,这告诉操作系统运行以下命令“背景”(即。,命令提示符返回后立即发出命令)。这允许两个任务同时运行。如果我们忽略了与字符(&),那么第一个“srun”执行,第二会自动等到第一个命令完成。

“等待”的声明是一个bash脚本指令,指示工作暂停,直到所有背景的步骤已经完成。在本例中,我们想要执行一些后处理的输出2并行任务(output1。dat和output2.dat)。因此,我们不希望进行后处理。py”步骤,直到这些任务完全完成。

笔记

想象我们省略了“&”的“srun”命令,将会发生什么?在这种情况下,第一个“srun”任务将执行,但第二个不会因为第一个不会在后台运行。

工作输出

我们的工作脚本的输出(粘- < jobid > .out)很多上述工作将包含类似下面的脚本:

srun: lua:提交:50434.0组件:0使用:srunsrun: lua:提交:50434.1组件:0使用:srun结束工作

在这里,jobid = 50434。后缀”。0”和“。1”表示的每个步骤2的工作。

作业步骤示例2:并行任务,一个节点

假设我们运行以下:

示例2 # #的工作步骤# !/bin/bash——登录# SBATCH——作业名= jobStepEx1= 1 # SBATCH——节点# SBATCH——ntasks = 2# SBATCH——cpus-per-task = 20# = 01:00:00 SBATCH——时间# #启动并行作业步骤srun - n - n 1 - c 40——重叠。/ myScript。py -我的数据集。dat - o output1。dat &srun - n - n 1 - c 40——重叠。/ anotherScript。py -我input2。dat - o output2。dat &等待/后处理。py -我output1。dat output2.dat回声“结束工作”

解释

注意我们已经减少了节点1和维护所有其他资源参数。然而,我们已经添加了一个标志“srun”命令”——重叠”。这个标志许可资源分配给工作并行任务之间的共享。这包括节点、cpu等。在这种情况下,这两个任务将能够使用40芯在单个节点上。这可能不是理想的,因为它可能导致的过度使用的节点,因为进程之间需要交换过程线程。然而,如果其中一个并行任务相当轻,这可以提高我们的效率没有显著影响性能。

笔记

在这种情况下会发生什么,如果我们忽略重叠”——“国旗?因为每个任务要求40个cpu核的使用,我们没有指定,资源可以共享,效果会与前面的示例相同,如果我们省略了“&”。也就是说,每个srun将按顺序运行。

但是,如果我们要减少每个“srun”工作的核心步骤“20”,都可能同时运行,因为每个会用一半的总cpu核心节点上可用。

注意,价值”——cpus-per-task = 20”只影响资源的调度,并且不直接控制cpu的数量为每个“srun”任务可以运行。也就是说,资源计划基于:

  • 1任务节点* 2 * 20 cpus-per-task = 40 cpu核心

鉴于这一事实,将会发生什么如果我们做”——cpus-per-task = 40”?与80年以来没有单人节点核心玛蒂尔达,这份工作不会计划,返回一个错误。

工作输出

上面的脚本工作输出的工作类似于以下几点:

srun:工作步骤的工作——cpus-per-task价值超过40 (> 20)。作业步骤可能永远不会运行。srun:工作步骤的工作——cpus-per-task价值超过40 (> 20)。作业步骤可能永远不会运行。srun: lua:提交:50442.0组件:0使用:srunsrun: lua:提交:50442.1组件:0使用:srun结束工作

注意这里有2警告:每个工作步骤。然而,我们可以看到作业步骤运行。这是因为我们使用允许共享”——重叠”的旗帜。也从粘文档很多考虑以下:

“注意:从22.05开始,srun不会继承——cpus-per-task值salloc或sbatch请求的。必须再次请求调用srun或如果需要设置与SRUN_CPUS_PER_TASK环境变量的任务。”

检查作业步状态

详细的工作步骤的状态,我们可以使用下面的:

squeue - s - u <用户名>

这将产生一个结果如下:

50442.0 myScr s将军用户名0:02 hpc-bigmem-p0150442.1程序s将军用户名0:02 hpc-bigmem-p0250442年。批处理批处理s将军用户名0:05 hpc-bigmem-p0150442年。走读生走读生s将军用户名0:05 hpc-bigmem-p [01-02]

在这里,我们看到的每个并行作业步骤(50442.0和50442.1)除了标准的批处理脚本输出我们通常看到的“squeue - u <用户名>”命令。


CategoryHPC