Slurm: используйте любой node из нодлиста

У меня есть несколько тысяч заданий для работы в кластере slurm с 16 узлами. Эти задания должны выполняться только на подмножестве доступных узлов размера 7. Некоторые из задач распараллеливаются, поэтому используют всю мощность процессора одного node, в то время как другие однопоточные. Поэтому несколько заданий должны выполняться одновременно на одном node. Ни одна из задач не должна появляться на нескольких узлах.

В настоящее время я отправляю каждое из заданий с помощью:

sbatch --nodelist=myCluster[10-16] myScript.sh

Однако этот параметр заставляет slurm ждать, пока отправленное задание не завершится, и, следовательно, оставит 3 узла полностью неиспользованными и, в зависимости от задачи (многоточечной или однопоточной), также текущий активный node может находиться под низкой нагрузкой с точки зрения возможностей ЦП.

Каковы наилучшие параметры sbatch, которые заставляют slurm одновременно запускать несколько заданий на указанных узлах?

Ответ 1

Вы можете работать наоборот; вместо того, чтобы указывать, какие узлы использовать, с тем, что каждому заданию назначены все 7 узлов, укажите, какие узлы не использовать:

sbatch --exclude=myCluster[01-09] myScript.sh

и Slurm никогда не будет выделять более 7 узлов для ваших заданий. Убедитесь, что в конфигурации кластера используется node, а ваш myScript.sh содержит #SBATCH --ntasks=1 --cpu-per-task=n с n количеством потоков каждого задания.

Ответ 2

Некоторые из задач распараллеливаются, поэтому используют всю мощность процессора одного node, в то время как другие - однопоточные.

Я понимаю, что вы хотите, чтобы однопоточные задания делились с node, тогда как параллельным должны быть назначены целые node исключительно?

несколько заданий должны запускаться одновременно на одном node.

Что касается моего понимания SLURM, это означает, что вы должны определить ядра ЦП в качестве расходных ресурсов (т.е. SelectType=select/cons_res и SelectTypeParameters=CR_Core в slurm.conf)

Затем, чтобы ограничить параллельные задания для получения целого node, вы можете либо использовать параметр --exclusive (но обратите внимание, что для конфигурации раздела требуется приоритет: вы не можете иметь общие узлы, если раздел настроен для эксклюзивного доступа) или используйте -N 1 --tasks-per-node="number_of_cores_in_a_node" (например, -N 1 --ntasks-per-node=8).

Обратите внимание, что последний будет работать, только если все узлы имеют одинаковое количество ядер.

Ни одна из задач не должна появляться на нескольких узлах.

Это должно быть гарантировано -N 1.

Ответ 3

На самом деле, я думаю, что нужно сначала создать " бронирование". Согласно этой презентации http://slurm.schedmd.com/slurm_ug_2011/Advanced_Usage_Tutorial.pdf (последний слайд).

Сценарий: зарезервируйте десять узлов в разделе SLURM по умолчанию, начиная с полудня и продолжительностью 60 минут, происходящих ежедневно. Бронирование будет доступно только пользователям alan и brenda.

scontrol create reservation user=alan,brenda starttime=noon duration=60 flags=daily nodecnt=10
Reservation created: alan_6

scontrol show res
ReservationName=alan_6 StartTime=2009-02-05T12:00:00
    EndTime=2009-02-05T13:00:00 Duration=60 Nodes=sun[000-003,007,010-013,017] NodeCnt=10 Features=(null) PartitionName=pdebug Flags=DAILY Licenses=(null)
    Users=alan,brenda Accounts=(null)

# submit job with:
sbatch --reservation=alan_6 myScript.sh

К сожалению, я не смог проверить эту процедуру, вероятно, из-за отсутствия привилегий.