标签: slurm

批处理作业提交失败:将脚本/环境写入文件时出现 I/O 错误

我在工作站上安装了 slurm,它似乎可以工作,我可以使用 slurm 命令,srun 也可以工作。但是,当我尝试使用脚本从脚本启动作业时,sbatch test.sh出现以下错误:批处理作业提交失败:将脚本/环境写入文件时发生 I/O 错误,即使脚本是最简单的,例如 #!/bin/bash srun hostname

jobs submission slurm sbatch

5
推荐指数
1
解决办法
6840
查看次数

如何使用一个 slurm 批处理脚本并行运行作业?

我正在尝试与一个 Slurm 批处理脚本并行运行多个 python 脚本。看一下下面的例子:

#!/bin/bash
#
#SBATCH --job-name=test
#SBATCH --output=/dev/null
#SBATCH --error=/dev/null
#SBATCH --ntasks=2
#SBATCH --cpus-per-task=1
#SBATCH --mem-per-cpu=1G
#SBATCH --partition=All
#SBATCH --time=5:00

srun sleep 60
srun sleep 60
wait
Run Code Online (Sandbox Code Playgroud)

如何调整脚本以便执行仅需 60 秒(而不是 120 秒)?将脚本拆分为两个脚本不是一个选项。

parallel-processing slurm

5
推荐指数
1
解决办法
5062
查看次数

slurm 中的关键字 --exclusive 是什么意思?

这是[如何使用一个 slurm 批处理脚本并行运行作业?] 的后续问题。目标是创建一个 SBatch 脚本,它可以启动多个进程并并行运行它们。damienfrancois给出的答案 非常详细,看起来像这样。

#!/bin/bash
#
#SBATCH --job-name=test
#SBATCH --output=/dev/null
#SBATCH --error=/dev/null
#SBATCH --partition=All

srun -n 1 -c 1 --exclusive sleep 60 &
srun -n 1 -c 1 --exclusive sleep 60 &
....
wait
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解Exclusive关键字。如果我使用该关键字,则会选择集群的一个节点,并在那里启动所有进程。但是,我希望 Slurm 将 [“sleeps”/steps] 分布在整个集群上。

那么关键字Exclusive是如何工作的呢?根据Slurm 文档,不应发生对一个节点的限制,因为该关键字是在一步分配中使用的。

[我是 Slurm 新手]

parallel-processing slurm

5
推荐指数
0
解决办法
6534
查看次数

为什么我的 slurm 作业步骤没有并行启动?

我试图弄清楚“任务”的概念在 SLURM 中意味着什么。我在 SO 上找到了这个答案,它建议我使用以下作业脚本:

#!/bin/bash

#SBATCH --ntasks=2

srun --ntasks=1 sleep 10 & 
srun --ntasks=1 sleep 12 &
wait
Run Code Online (Sandbox Code Playgroud)

作者说这项工作总共需要 12 秒才能运行,因为这两个步骤sleep 10sleep 12并行运行的,但我无法重现这一点。

如果我将上述文件另存为slurm-test并运行

sbatch -o slurm.out slurm-test,
Run Code Online (Sandbox Code Playgroud)

我看到我的作业运行了 23 秒。

这是以下的输出sacct --format=JobID,Start,End,Elapsed,NCPUS -S now-2minutes

       JobID               Start                 End    Elapsed      NCPUS
------------ ------------------- ------------------- ---------- ----------
645514       2021-06-30T11:05:38 2021-06-30T11:06:00   00:00:22          2
645514.batch 2021-06-30T11:05:38 2021-06-30T11:06:00   00:00:22          2
645514.exte+ 2021-06-30T11:05:38 2021-06-30T11:06:00   00:00:22          2
645514.0     2021-06-30T11:05:38 2021-06-30T11:05:48   00:00:10          2
645514.1     2021-06-30T11:05:48 2021-06-30T11:06:00   00:00:12 …
Run Code Online (Sandbox Code Playgroud)

slurm

5
推荐指数
1
解决办法
2706
查看次数

当 --cpus-per-task=1 时,NumCPUs 显示 2

当我提交 1 个 cpu 核心作业时,作业信息显示 NumCPUs=2。

为什么它显示的不是 NumCPUs=1 而是 NumCPUs=2

这是对的吗?

子目录

#!/bin/bash



# Parameters
#SBATCH --error=%j_0_log.err
#SBATCH --job-name=test
#SBATCH -c 1
#SBATCH --output=%j_0_log.out
#SBATCH --partition=dev
#SBATCH --time=4



# command
srun echo "hello world"
Run Code Online (Sandbox Code Playgroud)

职位信息如下所示

scontrol 显示作业 915246

...
...
JobId=915246 JobName=test
...
NumNodes=1 NumCPUs=2 NumTasks=0 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
TRES=cpu=2,node=1,billing=2
...
Run Code Online (Sandbox Code Playgroud)

slurm

5
推荐指数
1
解决办法
1901
查看次数

slurm 上的 R:Rmpi 和 srun

我正在使用带有 Open MPI 的 HPC slurm 集群。管理员希望每个人都使用srun而不是mpirun. 我已经使用了mpirun很多年,几乎所有关于使用 R 和 MPI 的在线讨论都使用mpirun而不是srun. srun使用 R代替有什么缺点吗mpirun?我需要调整代码吗?不幸的是,与我一起工作的集群管理员并不知道这一点,因为他们没有 R 经验。

这是一个mpirun示例,我在 R 外部设置并行进程,然后使用Rmpi包附加到它。

作业脚本:

#!/bin/bash
#SBATCH --job-name=Example
#SBATCH --partition=Something
#SBATCH --nodes=2
#SBATCH --tasks-per-node=30
#SBATCH --time=24:00:00
#SBATCH --mail-user=example@example.com
#SBATCH --mail-type=END,FAIL
#SBATCH --export=NONE
 
module load openmpi
module load r/4.2.2
 
mpirun Rscript --no-save --no-restore $HOME/Example.R
Run Code Online (Sandbox Code Playgroud)

R脚本:

if(!is.loaded("mpi_initialize")) {
  library("doMPI")
}

cl <- startMPIcluster(comm = 0)
registerDoMPI(cl)
 
.Last <- function() { …
Run Code Online (Sandbox Code Playgroud)

r mpi openmpi slurm

5
推荐指数
0
解决办法
324
查看次数

通过walltime杀死之前的批处理作业

我正在使用SLURM运行批处理作业.我在作业文件中开始的过程是迭代的.在每次迭代之后,可以通过创建名为stop的文件轻轻地杀死程序.我希望这个停止命令能够在工作被限制前一小时自动发出.

batch-processing slurm

4
推荐指数
1
解决办法
1990
查看次数

slurm 中的作业数组规范无效

我正在提交一份 slurm 玩具阵列作业。我的命令行是

$ sbatch -p development -t 0:30:0 -n 1 -a 1-2 j1
Run Code Online (Sandbox Code Playgroud)

其中 j1 是脚本:

#!/bin/bash
echo job id is $SLURM_JOB_ID
echo array job id is $SLURM_ARRAY_JOB_ID
echo task id id $SLURM_ARRAY_TASK_ID
Run Code Online (Sandbox Code Playgroud)

当我提交这个时,我收到一个错误:

--> Verifying valid submit host (login1)...OK
--> Verifying valid jobname...OK
--> Enforcing max jobs per user...OK
--> Verifying availability of your home dir (/home1/03400/myname)...OK
--> Verifying availability of your work dir (/work/03400/myname)...OK
--> Verifying availability of your scratch dir (/scratch/03400/myname)...OK
--> Verifying valid ssh keys...OK …
Run Code Online (Sandbox Code Playgroud)

cluster-computing slurm

4
推荐指数
2
解决办法
6035
查看次数

SLURM和python,节点已分配,但代码仅在一个节点上运行

我有一个4 * 64 CPU集群。我安装了SLURM,它似乎正在工作,好像我打电话给sbatch我一样,得到了正确的分配和排队。但是,如果我使用64个以上的内核(基本上是1个以上的节点),则它会完美分配正确数量的节点,但是如果我ssh将这些内核分配到分配的节点中,则只能看到其中一个的实际工作。其余的只是坐在那里什么都不做。

我的代码很复杂,并且使用multiprocessing。我打电话给有300名工人的游泳池,所以我想这应该不是问题。

我想实现的目标是调用sbatch myscript.py200个内核,而SLURM应该在这200个内核上分配我的运行,而不仅仅是分配正确数量的节点,而实际上只使用一个。

我的python脚本的标头如下所示:

#!/usr/bin/python3

#SBATCH --output=SLURM_%j.log
#SBATCH --partition=part
#SBATCH -n 200
Run Code Online (Sandbox Code Playgroud)

我用调用脚本sbatch myscript.py

python python-3.x slurm

4
推荐指数
1
解决办法
1535
查看次数

SLURM sbatch作业数组用于相同的脚本但具有不同的输入参数并行运行

我有一个问题,我需要启动相同的脚本但具有不同的输入参数.

假设我有一个脚本myscript.py -p <par_Val> -i <num_trial>,我需要考虑每个值的N不同par_values(之间x0x1)和M个试验par_values.

M的每次试验几乎都达到我正在进行的集群的时间限制(我没有权利改变它).所以在实践中我需要NxM独立完成工作.

因为每个批处理作业具有相同的节点/ cpu配置,并且调用相同的python脚本,除了更改输入参数外,原则上,在伪语言中我应该有一个sbatch脚本应该执行以下操作:

#!/bin/bash
#SBATCH --job-name=cv_01
#SBATCH --output=cv_analysis_eis-%j.out
#SBATCH --error=cv_analysis_eis-%j.err
#SBATCH --partition=gpu2
#SBATCH --nodes=1
#SBATCH --cpus-per-task=4

for p1 in 0.05 0.075 0.1 0.25 0.5
do
    for i in {0..150..5}
    do
        python myscript.py -p p1 -v i
    done
done
Run Code Online (Sandbox Code Playgroud)

每次调用脚本本身就是一个批处理作业.看看sbatch doc,这个-a --array选项看起来很有希望.但在我的情况下,我需要更改我的每个脚本的输入参数NxM.我怎样才能做到这一点?我不想编写NxM批处理脚本,然后txt按照这篇文章的建议将它们列在一个文件中.这里提出的解决方案似乎也不是理想的,因为这是工作阵列的情况.此外,我想确保所有NxM脚本同时启动,并且调用上面的脚本立即终止,这样它就不会与时间限制冲突,我的整个工作将被系统和保持不完整(然而,由于每个NxM …

arrays slurm sbatch

4
推荐指数
1
解决办法
5145
查看次数