如何使用 SLURM 提交并行作业步骤?
Posted
技术标签:
【中文标题】如何使用 SLURM 提交并行作业步骤?【英文标题】:How to submit parallel job steps with SLURM? 【发布时间】:2018-09-20 15:53:18 【问题描述】:我有以下名为 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 个用于我的任务,1 个用于sbatch 作业)但只有一个Java 进程。我也可以在正在处理的文件上看到它,只写了一个。
如何管理所有 4 个任务实际上是并行执行的?
感谢任何提示!
【问题讨论】:
【参考方案1】:问题可能与内存预留有关。在提交脚本中,你设置--mem=70GB
,即job的全局内存使用量。
在提交脚本中使用srun
时,它会从sbatch
继承参数,包括--mem=70GB
。所以你实际上隐式运行了以下内容。
srun --mem 70G -n1 java -Xmx10g -jar ...
尝试将内存显式声明为 70GB/4:
srun --mem 17G -n1 java -Xmx10g -jar ...
此外,根据文档,您应该在这种情况下使用 --exclusive
和 srun
。
srun --exclusive --mem 17G -n1 java -Xmx10g -jar ...
启动多个作业步骤时也可以使用此选项 在现有资源分配中,您希望在其中单独 专用于每个作业步骤的处理器。如果有足够的处理器 无法启动作业步骤,它将被推迟。这 可以被认为是提供一种资源管理机制 在其分配范围内的工作。
【讨论】:
啊当然。我有点傻。我猜仍然在“工作”、“步骤”和“任务”上苦苦挣扎;-) 非常感谢。我还阅读了有关--exclusive
开关的信息。我把它排除在外是为了避免更复杂。但是现在我按照您的建议使用它并且它工作正常。谢谢!以上是关于如何使用 SLURM 提交并行作业步骤?的主要内容,如果未能解决你的问题,请参考以下文章