Вопрос или проблема
В системе slurm, когда я использую команду srun для запуска программы, она выполняется очень медленно и кажется, что работает только один процессор.
srun --pty -A free -J test -N 1 -n 1 -c 1 mpirun -np 16
$FEAPHOME8_3/parfeap/feap -log_summary lu.log
Но если я пишу скрипт sbatch, он может выполняться очень быстро, и похоже, что работают все процессоры.
#!/bin/sh -l
#SBATCH --job-name=test
#SBATCH --account=free
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=24
#SBATCH --cpus-per-task=1
#SBATCH --exclusive
#SBATCH --time=6:00:00
echo ' '
echo ' ****** НАЧАЛО ГЛАВНОЙ ЗАДАЧИ ******'
date
srun -n 16 echo y | mpirun -np 16 $FEAPHOME8_3/parfeap/feap -log_summary lu.log
echo ' ****** КОНЕЦ ГЛАВНОЙ ЗАДАЧИ ******'
#Конец скрипта
Не могли бы вы, пожалуйста, сказать, что происходит?
Параметры -N 1 -n 1 -c 1
запрашивают один единственный ЦП на одном узле. Замените их на -n 16
и удалите mpirun
; srun
будет обрабатывать процесс запуска MPI.
Ответ или решение
Проблема, описанная вами, связана с различиями в том, как команды srun
и sbatch
работают в системе управления заданиями SLURM, особенно в контексте параллельного выполнения MPI-программ. Давайте подробно разберем ситуацию и выявим ключевые аспекты, которые влияют на производительность.
1. Понимание команд и их параметров
srun
Команда srun
предназначена для запуска параллельных задач в SLURM. При этом вы используете опции:
-N 1
— указание на один узел.-n 1
— запрос одного процесса.-c 1
— требование одного ядра ЦПУ.
Использование srun
с этими параметрами приводит к тому, что запускается только один процесс, который явно не использует все доступные ресурсы (в вашем случае 16 процессов). Эта причина, вероятно, и объясняет, почему программа работает медленно и кажется, что загружен только один процессор.
sbatch
Скрипт, который вы предоставили для sbatch
, более эффективно распределяет ресурсы:
#SBATCH --ntasks-per-node=24
— позволяет запускать до 24 задач на узле.#SBATCH --exclusive
— гарантирует, что весь узел будет выделен для вашего задания.
Здесь стоит отметить, что srun
внутри скрипта автоматически управляет распределением процессов по всем доступным ядрам, что значительно увеличивает производительность.
2. Проблемы с запуском MPI через mpirun
Использование mpirun
внутри команды srun
может привести к нежелательным последствиям. mpirun
обычно управляет процессами MPI, но в SLURM предпочтительнее полагаться на srun
для этого, так как он лучше интегрирован в систему управления заданиями и отвечает за эффективное распределение процессов на узлах.
3. Рекомендации по оптимизации
Для оптимизации использования SLURM в вашем случае, рекомендуем следующее:
-
Измените команду
srun
:
Вместо данной команды:srun --pty -A free -J test -N 1 -n 1 -c 1 mpirun -np 16
Используйте:
srun -n 16 -A free -J test $FEAPHOME8_3/parfeap/feap -log_summary lu.log
-
Используйте
sbatch
для долговременных задач:
Если ваше задание долгосрочное или ресурсоемкое, использованиеsbatch
с правильно настроенными параметрами будет более эффективным текущим методом. -
Контролируйте количество процессов:
Убедитесь, что количество процессов не превышает количество доступных ресурсов на узле, чтобы избежать недостатка ресурсов и связанных с этим замедлений в работе.
4. Заключение
Эти различия в производительности между командой srun
и sbatch
служат иллюстрацией важности правильной настройки параметров запусков для параллельной обработки задач с использованием SLURM. Убедившись в правильной конфигурации, вы сможете оптимизировать производительность своих вычислительных процессов и максимально использовать ресурсы кластера.