Запуск задач
Основные правила выполнения расчетов на суперкомпьютере:
- На головным сервере (sms) можно выполнять лишь такие запуски, которые не требует значимых вычислительных ресурсов: компиляция, сборка, тесты запуска и т.п.
- Все вычислительные задачи должны выполняться только на вычислительных узлах.
- Все задачи пользоваталей выполняются через систему очередей с использованием менедежа Slurm (описывается далее).
Базовые команды, необходимые для работы с очередью задач:
sbatch - позволяет запустить задачу в "пакетном" режиме (с возможностью полной подготовки окружения и тп), приоритетный способ;
srun - позволяет выполнить задачу в интерактивном режиме, обычно используется для отладки;
squeue - отобразить все задачи в очереди;
mj - отобразить состояние только своих задач;
scancel <job_id> - отменить указанную (свою) задачу;
Запуск задачи с помощью sbatch:
Общий синтаксис запуска следующий: sbatch [опции] <script_name> или sbatch [опции] --wrap="команда запуска"
Синтаксис скрипта для передачи в sbatch (параметр <script_name>):
#!/bin/bash
#SBATCH <ключ sbatch> <значение>
…
#SBATCH <ключ sbatch> <значение>
<пользовательские команды>
…
<пользовательские команды>
* ключи опций могут быть как переданы в опциях команды, так и указаны в самом скрипте (#SBATCH ...)
Например, для запуска python-расчета, требующего подготовки окружения:
#!/bin/bash
#SBATCH -c 4 -G 2
#SBATCH --output=result.out
module load Python/Anaconda_v11.2021 # подгрузим системное окружение на базе Anaconda
python /home/testuser/my_numpy_task.py # запускаем расчет привычным способом
Если для выполнения задачи не требуется каких-то подготовительных действий, скрипт можно не писать, а выполняемую команду "обернуть" через опцию "--wrap", например:
sbatch -n 1 -c 2 --wrap="/home/testuser/my_program arg1 arg2"
Запуск задачи с помощью srun:
srun, в отличие от sbatch, выполняет задачу интерактивно - т.е. можно перенаправить ввод и вывод или напрямую взаимодействовать с программой через консоль.
Принцип выделения аналогичный, за тем исключением, что в очередь ставится задача на выделение ресурсов, а не сам расчет. А уже после выделение необходимых для запуска ресусрсов и начинается интерактивное выполнение программы.
Важной особенность srun является возможность автоматического управления пуллом MPI-процессов. Например, вместо запуска mpi программы привычным путем вида
"mpirun my_mpi_task" можно выполнить "srun [опции] my_mpi_task"
* srun может быть выполнен внутри sbatch (может быть полезно для MPI задач)
Основные опции sbatch, srun:
-n <число> (он же --ntasks=<число>) - число запускаемых процессов;
-c <число> (он же --cpus-per-task=<число>) - количество CPU-ядер на каждый процесс;
-G <число> (он же --gpus=<число>) - количество GPU;
-N <число> (он же --nodes=<число>) - минимальное количество узлов, выделяемых для задачи;
--ntasks-per-node=<число> - количество процессов на каждый узел (например, "-n 4 --ntasks-per-node=2" - значит, нужно 2 узла для выполнения этих 4 процессов);
--gpus-per-task=<число> - количество GPU на каждый запускаемый процесс;
--gpus-per-node=<число> - количество GPU на каждый выделяемый узел;
--cpus-per-gpu=<число> - количество CPU на каждую выделяемую GPU;
--time=<число> - необходимое время выполнения задачи (в минутах), может быть задано форматами:
[ минуты | минуты:секунды | часы:минуты:секунды | дни-часы | дни-часы:минуты | дни-часы:минуты:секунды]
* Подробная информация по использованию планировщика Slurm доступна на официальном сайте - https://slurm.schedmd.com/quickstart.html
Нашли опечатку?
Выделите её, нажмите Ctrl+Enter и отправьте нам уведомление. Спасибо за участие!
Сервис предназначен только для отправки сообщений об орфографических и пунктуационных ошибках.