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


CycleCloud Slurm 3.0

Поддержка планировщика Slurm была перезаписана в рамках выпуска CycleCloud 8.4.0. Ключевые возможности:

  • Поддержка динамических узлов и динамических секций через динамические узлы с поддержкой как одного, так и нескольких размеров виртуальных машин.
  • Новые версии slurm 23.02 и 22.05.8
  • Отчеты о затратах через azslurm CLI
  • azslurm Средство автомасштабирования на основе cli
  • Поддержка Ubuntu 20
  • Удалена потребность в подключаемом модуле топологии и, следовательно, любом подключаемом модуле отправки

Кластеры Slurm в CycleCloud версии < 8.4.0

Дополнительные сведения см. в разделе Переход с версии 2.7 на 3.0 .

Внесение изменений в кластер

Кластер Slurm, развернутый в CycleCloud, содержит cli azslurm для упрощения внесения изменений в кластер. После внесения изменений в кластер выполните следующую команду от имени root на узле планировщика Slurm, чтобы перестроить azure.conf и обновить узлы в кластере:

      $ sudo -i
      # azslurm scale

Это должно создать секции с правильным количеством узлов, правильный gres.conf и перезапустить slurmctld.

Больше нет предварительного создания узлов выполнения

Начиная с версии 3.0.0 проекта CycleCloud Slurm, мы больше не будем предварительно создавать узлы в CycleCloud. Узлы создаются при azslurm resume вызове или путем их создания вручную в CycleCloud с помощью CLI.

Создание дополнительных секций

Шаблон по умолчанию, поставляемый с Azure CycleCloud, htc содержит три секции (hpcи dynamic), и можно определить пользовательские узлы, которые сопоставляют непосредственно с секциями 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:3.0.1]]]
      [[[network-interface eth0]]]
      AssociatePublicIpAddress = $ExecuteNodesPublic

Динамические секции

С версии 3.0.1мы поддерживаем динамические секции. Вы можете создать nodearray сопоставление с динамической секцией, добавив следующую команду. Обратите внимание, что myfeature может быть любым нужным описанием компонента. Это также может быть несколько функций, разделенных запятой.

      [[[configuration]]]
      slurm.autoscale = true
      # Set to true if nodes are used for tightly-coupled multi-node jobs
      slurm.hpc = false
      # This is the minimum, but see slurmd --help and [slurm.conf](https://slurm.schedmd.com/slurm.conf.html) for more information.
      slurm.dynamic_config := "-Z --conf \"Feature=myfeature\""

При этом будет создана динамическая секция, как показано ниже.

# Creating dynamic nodeset and partition using slurm.dynamic_config=-Z --conf "Feature=myfeature"
Nodeset=mydynamicns Feature=myfeature
PartitionName=mydynamicpart Nodes=mydynamicns

Использование динамических секций для автомасштабирования

По умолчанию мы не определяем узлы в динамической секции. Вместо этого можно запустить узлы через CycleCloud или вручную, azslurm resume и они присоединятся к кластеру с любым выбранным именем. Однако Slurm не знает об этих узлах, поэтому не может автоматически масштабировать их.

Вместо этого можно также предварительно создать записи узлов, например так, что позволяет Slurm автоматически масштабировать их.

scontrol create nodename=f4-[1-10] Feature=myfeature State=CLOUD

Еще одним преимуществом динамических секций является то, что в одной секции можно поддерживать несколько размеров виртуальных машин. Просто добавьте имя размера виртуальной машины в качестве функции, а затем azslurm сможете определить, какой размер виртуальной машины вы хотите использовать.

Примечание Размер виртуальной машины добавляется неявно. Вам не нужно добавлять его в slurm.dynamic_config

scontrol create nodename=f4-[1-10] Feature=myfeature,Standard_F4 State=CLOUD
scontrol create nodename=f8-[1-10] Feature=myfeature,Standard_F8 State=CLOUD

В любом случае, после создания этих узлов в State=Cloud теперь они доступны для автомасштабирования, как и другие узлы.

Для поддержки нескольких размеров виртуальных машин в объекте nodearray CycleCloud можно изменить шаблон, чтобы разрешить несколько размеров виртуальных машин, добавив Config.Mutiselect = true.

        [[[parameter DynamicMachineType]]]
        Label = Dyn VM Type
        Description = The VM type for Dynamic nodes
        ParameterType = Cloud.MachineType
        DefaultValue = Standard_F2s_v2
        Config.Multiselect = true

Динамическое масштабирование

По умолчанию все узлы в динамической секции будут масштабироваться так же, как и другие секции. Сведения об отключении этого параметра см. в разделе SuspendExcParts.

Масштабирование вручную

Если cyclecloud_slurm обнаружит, что автомасштабирование отключено (SuspendTime=-1), оно будет использовать состояние FUTURE для обозначения узлов, которые отключены, а не полагаться на состояние питания в Slurm. Т. е. если автомасштабирование включено, отключенные узлы обозначаются как idle~ в sinfo. Если автомасштабирование отключено, отключенные узлы не будут отображаться в sinfo. Вы по-прежнему можете увидеть их определение с помощью scontrol show nodes --future.

Чтобы запустить новые узлы, выполните команду /opt/azurehpc/slurm/resume_program.sh node_list (например, htc-[1-10]).

Чтобы завершить работу узлов, выполните команду /opt/azurehpc/slurm/suspend_program.sh node_list (например, htc-[1-10]).

Чтобы запустить кластер в этом режиме, просто добавьте SuspendTime=-1 в дополнительную конфигурацию slurm в шаблоне.

Чтобы переключить кластер в этот режим, добавьте SuspendTime=-1 в файл slurm.conf и выполните команду scontrol reconfigure. Затем выполните azslurm remove_nodes && azslurm scale.

Устранение неполадок

Переход с версии 2.7 на 3.0

  1. Папка установки изменена /opt/cycle/slurm ->/opt/azurehpc/slurm

  2. Журналы автомасштабирования теперь /opt/azurehpc/slurm/logs используются вместо /var/log/slurmctld. Обратите внимание, slurmctld.log что будет по-прежнему находиться в этой папке.

  3. cyclecloud_slurm.sh больше не существует. Вместо этого есть новый azslurm интерфейс командной строки, который можно запустить от имени привилегированного пользователя. azslurm поддерживает автозавершение.

    [root@scheduler ~]# azslurm
    usage: 
    accounting_info      - 
    buckets              - Prints out autoscale bucket information, like limits etc
    config               - Writes the effective autoscale config, after any preprocessing, to stdout
    connect              - Tests connection to CycleCloud
    cost                 - Cost analysis and reporting tool that maps Azure costs to Slurm Job Accounting data. This is an experimental feature.
    default_output_columns - Output what are the default output columns for an optional command.
    generate_topology    - Generates topology plugin configuration
    initconfig           - Creates an initial autoscale config. Writes to stdout
    keep_alive           - Add, remove or set which nodes should be prevented from being shutdown.
    limits               - 
    nodes                - Query nodes
    partitions           - Generates partition configuration
    refresh_autocomplete - Refreshes local autocomplete information for cluster specific resources and nodes.
    remove_nodes         - Removes the node from the scheduler without terminating the actual instance.
    resume               - Equivalent to ResumeProgram, starts and waits for a set of nodes.
    resume_fail          - Equivalent to SuspendFailProgram, shuts down nodes
    retry_failed_nodes   - Retries all nodes in a failed state.
    scale                - 
    shell                - Interactive python shell with relevant objects in local scope. Use --script to run python scripts
    suspend              - Equivalent to SuspendProgram, shuts down nodes
    wait_for_resume      - Wait for a set of nodes to converge.
    
  4. Узлы больше не заполняются предварительно в CycleCloud. Они создаются только при необходимости.

  5. Все двоичные файлы slurm находятся внутри azure-slurm-install-pkg*.tar.gz файла в разделе slurm-pkgs. Они извлекаются из определенного двоичного выпуска. Текущий двоичный репозиторий — 13.03.2023

  6. Для заданий MPI единственной границей сети, которая существует по умолчанию, является секция. В каждой секции не существует нескольких групп размещения, таких как 2.x. Таким образом, для каждой секции имеется только один совместно размещаемых виртуальных машин. Подключаемый модуль топологии также не используется, что требует использования подключаемого модуля отправки заданий, который больше не нужен. Вместо этого отправка в несколько секций теперь является рекомендуемой возможностью для вариантов использования, требующих отправки заданий в несколько групп размещения.

CycleCloud поддерживает стандартный набор атрибутов автостопок в планировщиках:

attribute Описание
cyclecloud.cluster.autoscale.stop_enabled Включена ли функция автостопом на этом узле? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs Время (в секундах), в течение времени, затрачиваемого на бездействующий узел после завершения заданий, прежде чем его масштабирование будет уменьшено.
cyclecloud.cluster.autoscale.idle_time_before_jobs Время (в секундах), в течение времени, затрачиваемого на то, чтобы узел сидел в режиме простоя перед выполнением заданий перед уменьшением масштаба.