Compartilhar via


CycleCloud Slurm 3.0

O suporte ao agendador slurm foi reescrito como parte da versão CycleCloud 8.4.0. Os principais recursos incluem:

  • Suporte para nós dinâmicos e partições dinâmicas por meio de nodearays dinâmicos, dando suporte a tamanhos de VM única e múltipla
  • Novas versões do slurm 23.02 e 22.05.8
  • Relatórios de custos por meio da azslurm CLI
  • azslurm Dimensionador automático baseado em CLI
  • Suporte ao Ubuntu 20
  • Removido a necessidade de plug-in de topologia e, portanto, também qualquer plug-in de envio

Clusters slurm no CycleCloud versões < 8.4.0

Consulte Transição da 2.7 para a 3.0 para obter mais informações.

Fazendo alterações de cluster

O cluster Slurm implantado no CycleCloud contém uma cli chamada azslurm para facilitar a realização de alterações no cluster. Depois de fazer alterações no cluster, execute o seguinte comando como raiz no nó agendador do Slurm para recompilar e azure.conf atualizar os nós no cluster:

      $ sudo -i
      # azslurm scale

Isso deve criar as partições com o número correto de nós, o adequado gres.conf e reiniciar o slurmctld.

Não criar mais nós de execução pré-criação

A partir da versão 3.0.0 do projeto Slurm do CycleCloud, não estamos mais criando previamente os nós no CycleCloud. Os nós são criados quando azslurm resume é invocado ou criando-os manualmente no CycleCloud por meio da CLI.

Criando partições adicionais

O modelo padrão fornecido com o Azure CycleCloud tem três partições (hpchtce dynamic), e você pode definir nodearrays personalizadas que são mapeadas diretamente para partições slurm. Por exemplo, para criar uma partição de GPU, adicione a seguinte seção ao modelo de cluster:

   [[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

Partições dinâmicas

A partir do 3.0.1, damos suporte a partições dinâmicas. Você pode fazer um nodearray mapa para uma partição dinâmica adicionando o seguinte. Observe que myfeature pode ser qualquer descrição de recurso desejada. Ele também pode ser mais de um recurso, separado por uma vírgula.

      [[[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\""

Isso gerará uma partição dinâmica como a seguinte

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

Usando partições dinâmicas para dimensionamento automático

Por padrão, definimos nós na partição dinâmica. Em vez disso, você pode iniciar nós por meio do CycleCloud ou invocando azslurm resume manualmente e eles ingressarão no cluster com qualquer nome escolhido. No entanto, Slurm não sabe sobre esses nós, portanto, ele não pode dimensioná-los automaticamente.

Em vez disso, você também pode pré-criar registros de nó assim, o que permite que Slurm os dimensione automaticamente.

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

Outra vantagem das partições dinâmicas é que você pode dar suporte a vários tamanhos de VM na mesma partição. Basta adicionar o nome tamanho da VM como um recurso e, em seguida azslurm , pode distinguir qual tamanho de VM você deseja usar.

Nota O Tamanho da VM é adicionado implicitamente. Você não precisa adicioná-lo a 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

De qualquer forma, depois de criar esses nós em um State=Cloud , eles agora estão disponíveis para dimensionamento automático como outros nós.

Para dar suporte a vários tamanhos de VM em uma nodearray do CycleCloud, você pode alterar o modelo para permitir vários tamanhos de VM adicionando 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

Redução dinâmica

Por padrão, todos os nós na partição dinâmica serão reduzidos horizontalmente, assim como as outras partições. Para desabilitar isso, consulte SuspendExcParts.

Dimensionamento manual

Se cyclecloud_slurm detectar que o dimensionamento automático está desabilitado (SuspendTime=-1), ele usará o estado FUTURE para indicar nós que são desligados em vez de depender do estado de energia no Slurm. Ou seja, quando o dimensionamento automático está habilitado, os nós desativados são indicados como idle~ no sinfo. Quando o dimensionamento automático estiver desabilitado, os nós desativados não aparecerão em sinfo. Você ainda pode ver a definição deles com scontrol show nodes --future.

Para iniciar novos nós, execute /opt/azurehpc/slurm/resume_program.sh node_list (por exemplo, htc-[1-10]).

Para desligar nós, execute /opt/azurehpc/slurm/suspend_program.sh node_list (por exemplo, htc-[1-10]).

Para iniciar um cluster nesse modo, basta adicionar SuspendTime=-1 à configuração de slurm adicional no modelo.

Para alternar um cluster para esse modo, adicione SuspendTime=-1 ao slurm.conf e execute scontrol reconfigure. Em seguida, execute azslurm remove_nodes && azslurm scale.

Solução de problemas

Transição de 2.7 para 3.0

  1. A pasta de instalação foi alterada /opt/cycle/slurm ->/opt/azurehpc/slurm

  2. Os logs de dimensionamento automático agora estão em /opt/azurehpc/slurm/logs vez de /var/log/slurmctld. Observe que slurmctld.log ainda estará nessa pasta.

  3. cyclecloud_slurm.sh não existe mais. Em vez disso, há uma nova azslurm cli, que pode ser executada como raiz. azslurm dá suporte ao preenchimento automático.

    [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. Os nós não são mais preenchidos previamente no CycleCloud. Eles só são criados quando necessário.

  5. Todos os binários slurm estão dentro do azure-slurm-install-pkg*.tar.gz arquivo, em slurm-pkgs. Eles são extraídos de uma versão binária específica. As versões binárias atuais são 2023-03-13

  6. Para trabalhos de MPI, o único limite de rede que existe por padrão é a partição. Não há vários "grupos de posicionamento" por partição, como 2.x. Portanto, você só tem um VMSS colocalizado por partição. Também não há uso do plug-in de topologia, o que exigiu o uso de um plug-in de envio de trabalho que também não é mais necessário. Em vez disso, enviar para várias partições agora é a opção recomendada para casos de uso que exigem o envio de trabalhos para vários grupos de posicionamento.

O CycleCloud dá suporte a um conjunto padrão de atributos de dimensionamento automático entre agendadores:

Atributo Descrição
cyclecloud.cluster.autoscale.stop_enabled O autostop está habilitado neste nó? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs A quantidade de tempo (em segundos) para um nó ficar ocioso depois de concluir trabalhos antes de ser reduzido horizontalmente.
cyclecloud.cluster.autoscale.idle_time_before_jobs A quantidade de tempo (em segundos) para um nó ficar ocioso antes de concluir trabalhos antes de ser reduzido horizontalmente.