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 (hpc
htc
e 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
A pasta de instalação foi alterada
/opt/cycle/slurm
->/opt/azurehpc/slurm
Os logs de dimensionamento automático agora estão em
/opt/azurehpc/slurm/logs
vez de/var/log/slurmctld
. Observe queslurmctld.log
ainda estará nessa pasta.cyclecloud_slurm.sh
não existe mais. Em vez disso, há uma novaazslurm
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.
Os nós não são mais preenchidos previamente no CycleCloud. Eles só são criados quando necessário.
Todos os binários slurm estão dentro do
azure-slurm-install-pkg*.tar.gz
arquivo, emslurm-pkgs
. Eles são extraídos de uma versão binária específica. As versões binárias atuais são 2023-03-13Para 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. |