slurm: srun и sbatch имеют разную производительность при одинаковых настройках

Вопрос или проблема

В системе 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 в вашем случае, рекомендуем следующее:

  1. Измените команду 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
  2. Используйте sbatch для долговременных задач:
    Если ваше задание долгосрочное или ресурсоемкое, использование sbatch с правильно настроенными параметрами будет более эффективным текущим методом.

  3. Контролируйте количество процессов:
    Убедитесь, что количество процессов не превышает количество доступных ресурсов на узле, чтобы избежать недостатка ресурсов и связанных с этим замедлений в работе.

4. Заключение

Эти различия в производительности между командой srun и sbatch служат иллюстрацией важности правильной настройки параметров запусков для параллельной обработки задач с использованием SLURM. Убедившись в правильной конфигурации, вы сможете оптимизировать производительность своих вычислительных процессов и максимально использовать ресурсы кластера.

Оцените материал
Добавить комментарий

Капча загружается...