Как отправить параллельные этапы работы с SLURM? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть следующий скрипт задания SLURM с именем gzip2zipslurm.sh:

#!/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"

Я отправляю его в SLURM по sbatch gzip2zipslurm.sh.Когда я это сделаю, вывод файла журнала SLURM будет

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

. Программа tar2zip читает указанный файл tar.gz и перепаковывает его как файл ZIP.

Проблема: только один процессор (из 16 доступных на свободном узле) выполняет какую-либо работу.С top я вижу, что всего 5 srun команд было запущено (я полагаю, 4 для моих задач и 1 неявное для задания sbatch), но есть только один Java-процесс.Я также вижу это на файлах, над которыми работаем, только одна написана.

Как мне сделать так, чтобы все 4 задачи фактически выполнялись параллельно?

Спасибо за любые подсказки!

1 Ответ

0 голосов
/ 21 сентября 2018

Возможно, проблема с резервированием памяти.В сценарии отправки вы устанавливаете --mem=70GB, то есть глобальное использование памяти для задания.

Когда в сценарии отправки используется srun, он наследует параметры от sbatch, включая --mem=70GB.Таким образом, вы фактически неявно выполняете следующее:

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

Попробуйте явно указать память в 70 ГБ / 4 с помощью:

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

Также, согласно документации, вы должны использовать --exclusiveс srun в таком контексте.

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

Этот параметр также можно использовать при запуске более одного шага задания в рамках существующего выделения ресурсов, когда вы хотите, чтобы каждому процессору было выделено несколько отдельных процессоров.шаг работы.Если недостаточно процессоров для запуска шага задания, оно будет отложено.Это можно рассматривать как обеспечение механизма управления ресурсами для задания в пределах его выделения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...