如何使用SLURM提交并行作业步骤?

时间:2018-09-20 15:53:18

标签: slurm sbatch

我有以下名为gzip2zipslurm.sh的SLURM作业脚本:

#!/bin/bash
#SBATCH --mem 70G
#SBATCH --ntasks 4
echo "Task 1"
srun -n1 java -Xmx10g -jar tar2zip-1.0.0-jar-with-dependencies.jar articles.A-B.xml.tar.gz  &
echo "Task 2"
srun -n1 java -Xmx10g -jar tar2zip-1.0.0-jar-with-dependencies.jar articles.C-H.xml.tar.gz  &
echo "Task 3"
srun -n1 java -Xmx10g -jar tar2zip-1.0.0-jar-with-dependencies.jar articles.I-N.xml.tar.gz  &
echo "Task 4"
srun -n1 java -Xmx10g -jar tar2zip-1.0.0-jar-with-dependencies.jar articles.O-Z.xml.tar.gz  &
echo "Waiting for job steps to end"
wait
echo "Script complete"

我通过sbatch gzip2zipslurm.sh将其提交给SLURM。 完成后,SLURM日志文件的输出为

Task 1
Task 2
Task 3
Task 4
Waiting for job steps to end

tar2zip程序读取给定的tar.gz文件,然后将其重新打包为ZIP文件。

问题:只有一个CPU(空闲节点中有16个可用CPU)正在执行任何工作。使用top,我可以看到全部5条srun命令已经启动(我的任务有4条,sbatch作业有1条隐式),但是只有一个Java进程。我还可以在正在处理的文件上看到它,只写了一个。

如何管理所有4个任务实际上并行执行?

感谢任何提示!

1 个答案:

答案 0 :(得分:0)

问题可能出在内存预留上。在提交脚本中,设置--mem=70GB,即作业的全局内存使用情况。

在提交脚本中使用srun时,它将从sbatch继承参数,包括--mem=70GB。因此,您实际上暗中运行了以下代码。

srun --mem 70G -n1 java -Xmx10g -jar ...

尝试通过以下方式明确声明内存为70GB / 4:

srun --mem 17G -n1 java -Xmx10g -jar ...

此外,根据文档,您还应该在这种情况下将--exclusivesrun一起使用。

srun --exclusive --mem 17G -n1 java -Xmx10g -jar ...
  

启动多个工作步骤时也可以使用此选项   在现有资源分配中,您希望将其分开   专用于每个工作步骤的处理器。如果有足够的处理器   不能启动工作步骤,它将被推迟。这个   可以认为是提供了一种资源管理机制   分配中的工作。