Поделиться через


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 : Edit Nodearray

и добавьте в раздел следующие атрибуты 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 Время (в секундах), в течение времени, затрачиваемого на то, чтобы узел сидел в режиме простоя перед выполнением заданий перед уменьшением масштаба.