如何使用 SLURM 提交并行作业步骤?
How to submit parallel job steps with SLURM?
我有以下名为 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 个中)正在做任何工作。使用 top
我可以看到所有 5 个 srun
命令都已启动(我猜 4 个用于我的任务,1 个隐式用于 sbatch 作业)但是只有一个 Java 进程.我也可以在正在处理的文件上看到它,只写了一个。
我如何管理所有 4 个任务实际上是并行执行的?
感谢任何提示!
问题可能与内存预留有关。在提交脚本中,您设置--mem=70GB
,即作业的全局内存使用。
当在提交脚本中使用 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 ...
This option can also be used when initiating more than one job step
within an existing resource allocation, where you want separate
processors to be dedicated to each job step. If sufficient processors
are not available to initiate the job step, it will be deferred. This
can be thought of as providing a mechanism for resource management to
the job within it's allocation.
我有以下名为 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 个中)正在做任何工作。使用 top
我可以看到所有 5 个 srun
命令都已启动(我猜 4 个用于我的任务,1 个隐式用于 sbatch 作业)但是只有一个 Java 进程.我也可以在正在处理的文件上看到它,只写了一个。
我如何管理所有 4 个任务实际上是并行执行的?
感谢任何提示!
问题可能与内存预留有关。在提交脚本中,您设置--mem=70GB
,即作业的全局内存使用。
当在提交脚本中使用 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 ...
This option can also be used when initiating more than one job step within an existing resource allocation, where you want separate processors to be dedicated to each job step. If sufficient processors are not available to initiate the job step, it will be deferred. This can be thought of as providing a mechanism for resource management to the job within it's allocation.