标签: slurm

Slurm 的 srun 比 mpirun 慢

如果在下面我用 'srun' 替换 'mpirun',我的 mpi+openmp 作业运行速度会慢 3 倍!

#!bin/bash
#
#SBATCH --job-name=locstack4d_mpi
#SBATCH --output=./res_locstack4d_mpi.txt
#
#SBATCH --ntasks=3
#SBATCH --cpus-per-task=16
#SBATCH --ntasks-per-node=1
#SBATCH --time=10:00
#SBATCH --mem-per-cpu=100
#SBATCH --verbose
export OMP_NUM_THREADS=28

mpirun  ./locstack4d  ./locstack4d_input.dat
Run Code Online (Sandbox Code Playgroud)

mpi 实现细节:

Version:                                 3.1
Release Date:                            Thu Feb 20 11:41:13 CST 2014
CC:                              gcc  -m64 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC -Wl,-z,noexecstack 
CXX:                             g++  -m64 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC -Wl,-z,noexecstack 
F77:                             gfortran -m64 -O2 -g -pipe …
Run Code Online (Sandbox Code Playgroud)

mpi slurm

2
推荐指数
1
解决办法
5466
查看次数

如何按提交时间使 squeue 排序

我试图了解如何使用 squeue 按提交时间排序。我知道我可以使用队列如下,所以它会显示提交时间,

squeue -O "stepid:6,username:8,account:7,name:53,partition:15,submittime:20"
Run Code Online (Sandbox Code Playgroud)

但我如何让它按 sumbittime 排序。

谢谢。

slurm

2
推荐指数
1
解决办法
1351
查看次数

由于时间限制,作业意外取消

我工作的集群上有几个分区。随着sinfo我可以看到每个分区的时间限制。我把我的代码放在mid1有时间限制的分区上8-00:00:00,我知道时间限制是 8 天。我不得不等待,1-15:23:41这意味着将近 1 天 15 小时。但是,我的代码仅运行了00:02:24近 2.5 分钟(并且解决方案正在收敛)。另外,我没有在提交的文件中设置时间限制sbatch我的代码停止的原因如下:

 JOB 3216125 CANCELLED AT 2015-12-19T04:22:04 DUE TO TIME LIMIT
Run Code Online (Sandbox Code Playgroud)

那么,如果我没有超过时间限制,为什么我的代码被停止了?我向负责集群的人提出了这个问题,但他们没有回来。

time limit slurm

2
推荐指数
1
解决办法
3485
查看次数

如何更新作业以允许我在作业完成运行后收到电子邮件 (slurm)

我已经在计算集群上提交了几个作业,但没有设置 --mail-user。我现在可以更新规范吗?希望在作业完成后收到电子邮件。非常感谢!

linux jobs cluster-computing slurm

2
推荐指数
1
解决办法
883
查看次数

如何通过配置文件在 SLURM 中使用 sbatch

我想使用 sbatch 运行 python 脚本,但是,似乎使用 sbatch 运行 python 脚本的唯一方法是拥有一个 bash 脚本,然后运行 ​​python 脚本。就像有batch_main.sh

#!/bin/bash
#SBATCH --job-name=python_script

arg=argument

python python_batch_script.sh
Run Code Online (Sandbox Code Playgroud)

然后运行:

sbatch batch_main.sh
Run Code Online (Sandbox Code Playgroud)

问题是我希望有一个单独的参数配置文件(因为它通常不是单个数字或参数)并且还能够使用数组选项。另外,我通常同时运行多个不同的sbatch 作业(使用不同的配置),因此,如果更改配置文件不会使不同的 sbatch 运行相互妨碍(因为如果作业排队,然后配置文件稍后更改,它将运行最新的配置文件,而不是我运行 sbatch 时的配置副本)。为了解决这个问题,我发现当我运行 sbatch 脚本时,SLURM 实际上会将提交脚本复制到其内部数据库(我在询问后发现了这一点:在运行期间更改发送到 slurm 中的 bash 脚本是一个坏主意吗?)。因此,我实际上决定将配置硬编码到 bash 提交脚本中(本质上使提交脚本成为配置文件)。这样我只需编辑提交脚本,然后运行该文件。然而,我想阻止这个,因为这让我用 bash 编写,我想不惜一切代价避免。

理想情况下,我想运行一个直接运行 python 的 sbatch。

由于这可能不可能,我想知道还有哪些其他选项可以解决这个问题。例如,是否可以让 slurm 将不同的文件(如 python 配置文件)复制到其内部数据库,以便当它对作业进行排队时,它运行我确切想要运行的作业?(请注意,运行 sbatch 作业然后更改配置文件不是执行此操作的方法,因为这可能会在更改配置文件时导致问题,slrum 将读取配置的最新副本而不是配置的副本当作业运行时)。或者我还有什么其他选择?我真的坚持编写 bash 还是我可以做其他事情来处理 python 中的配置而不是其他一些奇怪的黑客?

总的来说,我还想知道人们在现实世界中为此做了什么,或者对此有什么好的实践/标准。

python bash shell slurm sbatch

2
推荐指数
1
解决办法
2510
查看次数

从触发者启动的作业中获取 SLURM 作业 ID

我有一个由三部分组成的 R 分析(partApartBpartC)。我将每个部分提交给 SLURM(例如sbatch partA),并且每个部分都通过 并行化#SBATCH --array=1-1500。这些零件是连续的,所以我需要等待一个零件完成才能开始下一个零件。现在我正在手动启动每项工作,但这不是一个很好的解决方案。

我想自动化这三个批处理调用。例如:

  1. sbatch partA
  2. 什么时候partA完成,sbatch partB
  3. 什么时候partB完成,sbatch partC

我使用此解决方案获取 的作业 ID partA,并将其传递给strigger完成上面的步骤 2。然而我陷入了困境,因为我不知道如何获取partBfromstrigger的工作 ID 。我的代码如下所示:

#!/bin/bash

# step 1: sbatch partA
partA_ID=$(sbatch --parsable partA.sh)

# step 2: sbatch partB
strigger --set --jobid=$partA_ID --fini --program=/path/to/partB.batch

# step 3: sbatch partC
... ?
Run Code Online (Sandbox Code Playgroud)

我该如何完成第 3 步?

linux hpc r batch-processing slurm

2
推荐指数
1
解决办法
2129
查看次数

从命令行/ bash测试是否正在使用Matlab许可证

我正在运行CentOS 6.9。我想从命令行测试当前是否正在使用Matlab许可证。目前,我能想到的最好方法是

/opt/matlab/R2018b/bin/matlab -nodesktop -nosplash -r "exit;"
export RETURN_VALUE=$?
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?也许从Matlab本身捕获了实际的许可错误?我不想在这种情况下使用grep方法。

我正在寻找可以使用Matlab可执行文件(或其他Mathwork的可执行文件)来仅测试许可证是否可用的东西。

编辑:Matlab发出不同的许可错误,具体取决于许可证是否不可用以及您是否是未授权用户。能够区分两者很重要,因为我最终希望为Slurm编写一个序言脚本来处理两者之间的差异。允许某些用户使用许可证,而其他用户则不允许。这就是我上面的示例不足的原因。

bash matlab command-line slurm

2
推荐指数
1
解决办法
124
查看次数

是否有 sbatch 错误消息的输出日志/目录?

我正在运行一个 sbatch 脚本,它已成功提交。

sbatch sbatch_script.sh

Submitted batch job 309376

squeue -u <my_username>但是当我运行并且没有生成输出时它不会显示。

有没有办法检查出了什么问题?例如,我可以检查一些环境变量设置/输出日志吗?

cluster-computing scientific-computing job-scheduling slurm

2
推荐指数
1
解决办法
1万
查看次数

运行 bash 函数

为了轻松更改我在软件中使用的软件包的版本,我生成了一个bash带有调用底层软件的函数的接口。这样,我的主脚本可以保持相同的界面,我只需要更改/添加每个要使用的版本的帮助程序脚本:

助手_v1.sh:

method1() {
    cmd1 params
}

method2() {
    cmd1 other_params
}
Run Code Online (Sandbox Code Playgroud)

helper_v2.sh:

method1() {
    cmd2 params
}

method2() {
    cmd2 other_params
}
Run Code Online (Sandbox Code Playgroud)

现在我需要通过启动这些命令来srun将工作分配到不同的节点上。所以我正在尝试(在使用 启动的脚本内sbatch):

source helper_v2.sh
srun method1 params
Run Code Online (Sandbox Code Playgroud)

但它失败并出现错误:

slurmstepd: error: execve(): method1: No such file or directory
Run Code Online (Sandbox Code Playgroud)

有什么办法可以使用这些bash功能吗srun?不得不将它们全部重新实现为单独的脚本将是一种遗憾。

bash slurm

2
推荐指数
1
解决办法
858
查看次数

如何将 SLURM 脚本的配置参数保存/记录到输出文件?

我对 HPC 和 SLURM 尤其是新手。下面是我用来运行 python 脚本的示例代码:

#!/bin/bash

# Slurm submission script, serial job

#SBATCH --time 48:00:00
#SBATCH --mem 0
#SBATCH --mail-type ALL
#SBATCH --partition gpu_v100
#SBATCH --gres gpu:4
#SBATCH --nodes 4
#SBATCH --ntasks-per-node=4


#SBATCH --output R-%x.%j.out
#SBATCH --error R-%x.%j.err

export NCCL_DEBUG=INFO
export PYTHONFAULTHANDLER=1

module load python3-DL/torch/1.6.0-cuda10.1

srun python3 contrastive_module.py \
      --gpus 4 \
      --max_epochs 1024 \
      --batch_size 256 \
      --num_nodes 4 \
      --num_workers 8 \

Run Code Online (Sandbox Code Playgroud)

现在,每次我使用它运行此脚本时,sbatch run.sl它都会生成两个 .err 和 .out 文件,我只能将“run.sl”文件名和作业 ID 编码到这两个文件名中。但是如何保存我在上面的脚本中设置的所有参数的副本,无论是 slurm 配置还是与作业 ID 以及生成的 …

hpc slurm

2
推荐指数
1
解决办法
337
查看次数