Slurm
Slurm — это высококонфигурируемый диспетчер рабочих нагрузок открытый код. Обзор см. на сайте проекта Slurm .
Примечание
В CycleCloud 8.4.0 интеграция Slurm была переопределена для поддержки новых функций и функций. Дополнительные сведения см. в документации по Slurm 3.0 .
Slurm можно легко включить в кластере CycleCloud, изменив run_list в разделе конфигурации определения кластера. Двумя основными компонентами кластера Slurm являются узел master (или планировщик), который предоставляет общую файловую систему, в которой выполняется программное обеспечение Slurm, и узлы execute, которые являются узлами, которые подключают общую файловую систему и выполняют отправленные задания. Например, фрагмент простого шаблона кластера может выглядеть следующим образом:
[cluster custom-slurm]
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:master]]]
[[[configuration]]]
run_list = role[slurm_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_master_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
Slurm можно легко включить в кластере CycleCloud, изменив run_list в разделе конфигурации определения кластера. Двумя основными компонентами кластера Slurm являются узел планировщика, который предоставляет общую файловую систему, в которой выполняется программное обеспечение Slurm, и узлы execute, которые являются узлами, которые подключают общую файловую систему и выполняют отправленные задания. Например, фрагмент простого шаблона кластера может выглядеть следующим образом:
[cluster custom-slurm]
[[node scheduler]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:scheduler]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
Изменение существующих кластеров Slurm
Кластеры Slurm, работающие в CycleCloud версии 7.8 и более поздних, реализуют обновленную версию API автомасштабирования, которая позволяет кластерам использовать несколько узлов и секций. Чтобы упростить эту функцию в Slurm, CycleCloud предварительно заполняет узлы выполнения в кластере. По этой причине необходимо выполнить команду на узле планировщика Slurm после внесения каких-либо изменений в кластер, таких как ограничения автомасштабирования или типы виртуальных машин.
Внесение изменений в кластер
Кластер Slurm, развернутый в CycleCloud, содержит скрипт, который упрощает эту задачу. После внесения изменений в кластер выполните следующую команду от имени привилегированного пользователя (например, запустив sudo -i
) на узле планировщика Slurm, чтобы перестроить slurm.conf
и обновить узлы в кластере:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Примечание
Для CycleCloud версии < 7.9.10 cyclecloud_slurm.sh
скрипт находится в папке /opt/cycle/jetpack/system/bootstrap/slurm.
Важно!
Если вы внесете изменения, влияющие на виртуальные машины для узлов в разделе MPI (например, размер виртуальной машины, образ или cloud-init), все узлы должны быть прерваны в первую очередь.
В remove_nodes
этом случае команда выводит предупреждение, но не завершает работу с ошибкой.
При наличии запущенных узлов вы получите сообщение об ошибке This node does not match existing scaleset attribute
при запуске новых узлов.
/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes
Примечание
Для CycleCloud версии < 8.2 cyclecloud_slurm.sh
скрипт находится в папке /opt/cycle/jetpack/system/bootstrap/slurm.
Если вы внесете изменения, влияющие на виртуальные машины для узлов в разделе MPI (например, размер виртуальной This node does not match existing scaleset attribute
машины, образ или cloud-init), и узлы работают, вы получите сообщение об ошибке при запуске новых узлов. По этой причине команда проверяет завершение apply_changes
работы узлов и завершает работу со следующим сообщением об ошибке, если нет: Следующие узлы должны быть полностью завершены перед применением изменений.
Если вы вносите изменение, которое не влияет на свойства виртуальных машин для узлов MPI, вам не нужно сначала завершать работу узлов. В этом случае изменения можно внести с помощью следующих двух команд:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Примечание
Команда apply_changes
существует только в CycleCloud 8.3+, поэтому единственный способ внести изменения в более ранних версиях — с помощью приведенных выше remove_nodes
+ scale
команд.
Убедитесь, что remove_nodes
команда не выводит предупреждение об узлах, которые необходимо завершить.
Создание дополнительных секций
Шаблон по умолчанию, поставляемый с Azure CycleCloud, имеет две секции (hpc
и htc
), и вы можете определить пользовательские узлы, которые сопоставляют непосредственно с секциями Slurm. Например, чтобы создать раздел GPU, добавьте следующий раздел в шаблон кластера:
[[nodearray gpu]]
MachineType = $GPUMachineType
ImageName = $GPUImageName
MaxCoreCount = $MaxGPUExecuteCoreCount
Interruptible = $GPUUseLowPrio
AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs
[[[configuration]]]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = false
[[[cluster-init cyclecloud/slurm:execute:2.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
Параметры памяти
CycleCloud автоматически задает объем доступной памяти для Slurm для планирования. Так как объем доступной памяти может немного измениться из-за различных вариантов ядра Linux, а ОС и виртуальная машина могут использовать небольшой объем памяти, который в противном случае был бы доступен для заданий, CycleCloud автоматически уменьшает объем памяти в конфигурации Slurm. По умолчанию CycleCloud удерживает 5 % доступной памяти на виртуальной машине, но это значение можно переопределить в шаблоне кластера, задав для этого slurm.dampen_memory
процент памяти. Например, чтобы удерживать 20 % памяти виртуальной машины, выполните приведенные ниже действия.
slurm.dampen_memory=20
Отключение автомасштабирования для определенных узлов или секций
Хотя встроенная функция CycleCloud KeepAlive в настоящее время не работает для кластеров Slurm, можно отключить автомасштабирование для работающего кластера Slurm, изменив файл slurm.conf напрямую. Можно исключить из автомасштабирования отдельные узлы или целые секции.
Исключение узла
Чтобы исключить узел или несколько узлов из автомасштабирования, добавьте SuspendExcNodes=<listofnodes>
в файл конфигурации Slurm. Например, чтобы исключить узлы 1 и 2 из раздела hpc, добавьте в /sched/slurm.conf
:
SuspendExcNodes=hpc-pg0-[1-2]
Затем перезапустите slurmctld
службу, чтобы новая конфигурация вступила в силу.
Исключение секции
Исключение целых секций из автомасштабирования аналогично исключению узлов. Чтобы исключить всю hpc
секцию, добавьте в /sched/slurm.conf
SuspendExcParts=hpc
Затем перезапустите slurmctld
службу.
Устранение неполадок
Конфликты UID для пользователей Slurm и Munge
По умолчанию этот проект использует UID и GID 11100 для пользователя Slurm и 11101 для пользователя Munge. Если это приводит к конфликту с другим пользователем или группой, эти значения по умолчанию могут быть переопределены.
Чтобы переопределить UID и GID, нажмите кнопку изменить для обоих scheduler
узлов:
И nodearray execute
:
и добавьте в раздел следующие атрибуты Configuration
:
slurm.user.name = slurm
slurm.user.uid = 11100
slurm.user.gid = 11100
munge.user.name = munge
munge.user.uid = 11101
munge.user.gid = 11101
Автомасштабирование
CycleCloud использует функцию эластичных вычислений Slurm. Для отладки проблем автомасштабирования на узле планировщика можно проверка несколько журналов. Во-первых, убедитесь, что вызовы возобновления энергопотребления выполняются путем проверки /var/log/slurmctld/slurmctld.log
. Вы должны увидеть такие строки:
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
Другой журнал для проверка — ./var/log/slurmctld/resume.log
Если шаг возобновления завершается сбоем, также будет иметься /var/log/slurmctld/resume_fail.log
. Если есть сообщения о неизвестных или недопустимых именах узлов, убедитесь, что вы не добавили узлы в кластер, не выполнив действия, описанные в разделе "Внесение изменений в кластер" выше.
Справочник по конфигурации Slurm
Ниже приведены параметры конфигурации Slurm, которые можно включить для настройки функциональных возможностей.
Параметры конфигурации, относящиеся к Slurm | Описание |
---|---|
slurm.version | Значение по умолчанию: '18.08.7-1'. Это версия Slurm для установки и запуска. В настоящее время это параметр по умолчанию и единственный вариант. В будущем могут поддерживаться дополнительные версии программного обеспечения Slurm. |
slurm.autoscale | Значение по умолчанию: false. Это параметр per-nodearray, который определяет, должна ли Slurm автоматически останавливать и запускать узлы в этом узле. |
slurm.hpc | Значение по умолчанию: true. Это параметр per-nodearray, который определяет, будут ли узлы в объекте nodearray размещаться в одной группе размещения. В основном используется для узлов, использующих семейства виртуальных машин с InfiniBand. Он применяется только в том случае, если для slurm.autoscale задано значение true. |
slurm.default_partition | Значение по умолчанию: false. Это параметр per-nodearray, который определяет, должен ли nodearray быть секцией по умолчанию для заданий, которые не запрашивают секцию явным образом. |
slurm.dampen_memory | Значение по умолчанию: "5". Процент памяти, удерживаемой для операционной системы или виртуальной машины. |
slurm.suspend_timeout | Значение по умолчанию: "600". Время (в секундах) между приостановкой вызова и временем повторного использования этого узла. |
slurm.resume_timeout | Значение по умолчанию: "1800". Время (в секундах) ожидания успешной загрузки узла. |
slurm.install | Значение по умолчанию: true. Определяет, установлен ли Slurm при загрузке узла (true). Если Slurm установлен в пользовательском образе, для этого параметра должно быть задано значение false. (proj версии 2.5.0+) |
slurm.use_pcpu | Значение по умолчанию: true. Это параметр для каждого узла для управления планированием с помощью виртуальных ЦП с гиперпотоками. Задайте значение false, чтобы задать cpuus=vcpus в cyclecloud.conf. |
slurm.user.name | Значение по умолчанию: slurm. Это имя пользователя для службы Slurm. |
slurm.user.uid | Значение по умолчанию: "11100". Идентификатор пользователя, используемый для пользователя Slurm. |
slurm.user.gid | Значение по умолчанию: "11100". Идентификатор группы, используемый для пользователя Slurm. |
munge.user.name | Значение по умолчанию: "munge". Это имя пользователя для службы проверки подлинности MUNGE. |
munge.user.uid | Значение по умолчанию: "11101". Идентификатор пользователя, используемый для пользователя MUNGE. |
munge.user.gid | Значение по умолчанию: "11101". Идентификатор группы, используемый для пользователя MUNGE. |
CycleCloud поддерживает стандартный набор атрибутов автостопок в планировщиках:
attribute | Описание |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | Включена ли функция автостопом на этом узле? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | Время (в секундах), в течение времени, затрачиваемого на бездействующий узел после завершения заданий, прежде чем его масштабирование будет уменьшено. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Время (в секундах), в течение времени, затрачиваемого на то, чтобы узел сидел в режиме простоя перед выполнением заданий перед уменьшением масштаба. |