Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
README do Projeto do Cluster Slurm no CycleCloud
O Slurm é um gerenciador de carga de trabalho de código aberto altamente configurável. Para obter mais informações, consulte a visão geral no site do projeto Slurm.
Observação
Começando com o CycleCloud 8.4.0, reescrevemos a integração do Slurm para oferecer suporte a novos recursos e funcionalidades. Para obter mais informações, consulte a documentação do Slurm 3.0 .
Para habilitar o Slurm em um cluster do CycleCloud, modifique o 'run_list', disponível na seção de configuração da sua definição de cluster. Um cluster Slurm tem duas partes principais: o nó mestre (ou agendador), que executa o software Slurm em um sistema de arquivos compartilhado, e os nós executados, que montam esse sistema de arquivos e executam os trabalhos enviados. Por exemplo, um trecho de modelo de cluster simples pode ter a seguinte aparência:
[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
Para habilitar o Slurm em um cluster do CycleCloud, modifique a run_list seção de configuração da sua definição de cluster. Um cluster Slurm tem duas partes principais: o nó do agendador, que fornece um sistema de arquivos compartilhado e executa o software Slurm, e os nós de execução, que montam o sistema de arquivos compartilhado e executam os trabalhos enviados. Por exemplo, um trecho de modelo de cluster simples pode se parecer com:
[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
Editando clusters Slurm existentes
Os clusters Slurm executados nas versões 7.8 e posteriores do CycleCloud usam uma versão atualizada das APIs de dimensionamento automático que permite que os clusters usem várias matrizes e partições de nós. Para que esta funcionalidade funcione no Slurm, o CycleCloud prepopula os nós a executar no cluster. Devido a essa pré-população, necessita executar um comando no nó do agendador Slurm após realizar quaisquer alterações no cluster, como alterar os limites de dimensionamento automático ou os tipos de VM.
Alterar configurações do cluster
O cluster Slurm implantado no CycleCloud contém um script que facilita as alterações. Depois de fazer quaisquer alterações no cluster, execute o próximo comando como root (por exemplo, executando sudo -i) no nó do agendador Slurm para reconstruir o slurm.conf arquivo e atualizar os nós no cluster:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Observação
Para versões do CycleCloud anteriores à 7.9.10, o cyclecloud_slurm.sh script está localizado em /opt/cycle/jetpack/system/bootstrap/slurm.
Importante
Se fizer alterações que afetem as VMs para nodos numa partição MPI (como o tamanho da VM, imagem ou cloud-init), deverá encerrar todos os nodos primeiro.
Neste remove_nodes caso, o comando imprime um aviso, mas não termina com um erro.
Se você alterar as VMs para nós em uma partição MPI (como o tamanho da VM, imagem ou cloud-init) enquanto os nós estão em execução, novos nós não podem iniciar e você vê o erro This node doesn't match existing scaleset attribute.
/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes
Observação
Para as versões < 8.2 do CycleCloud, o cyclecloud_slurm.sh script está localizado em /opt/cycle/jetpack/system/bootstrap/slurm.
Se você alterar as VMs para nós em uma partição MPI (como o tamanho da VM, imagem ou cloud-init) enquanto os nós estão em execução, novos nós não podem iniciar e você vê o erro This node doesn't match existing scaleset attribute. Por esse motivo, o apply_changes comando garante que os nós sejam encerrados. Se os nós não forem encerrados, o comando falhará com esta mensagem de erro: Os nós a seguir devem ser totalmente encerrados antes de aplicar as alterações.
Se você estiver fazendo uma alteração que não afete as propriedades da VM para nós MPI, não precisará encerrar os nós em execução primeiro. Nesse caso, você pode fazer as alterações usando estes dois comandos:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Observação
O apply_changes comando está disponível apenas no CycleCloud 8.3+. Em versões anteriores, você precisa usar os remove_nodes comandos e scale para fazer uma alteração. Verifique se o comando remove_nodes não imprime um aviso sobre os nós que precisam ser terminados.
Criação de partições suplementares
O modelo padrão fornecido com o Azure CycleCloud tem duas partições (hpc e htc), e você pode definir matrizes de nós personalizadas que mapeiam diretamente para partições Slurm. Por exemplo, para criar uma partição GPU, adicione a seguinte seção ao seu 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:2.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
Configurações de memória
O CycleCloud define automaticamente a quantidade de memória disponível para o Slurm usar para fins de agendamento. Como a memória disponível pode variar ligeiramente devido às opções do kernel Linux e o SO e a VM usam uma pequena quantidade de memória, o CycleCloud reduz automaticamente o valor da memória na configuração do Slurm. Por padrão, o CycleCloud retém 5% da memória disponível relatada em uma VM, mas você pode substituir esse valor no modelo de cluster definindo slurm.dampen_memory a porcentagem de memória a ser retida. Por exemplo, para reter 20% da memória de uma VM:
slurm.dampen_memory=20
Desativação do escalamento automático para nós ou partições específicos
Embora o recurso "KeepAlive" integrado do CycleCloud não funcione atualmente para clusters Slurm, você pode desativar o dimensionamento automático para um cluster Slurm em execução editando o arquivo slurm.conf diretamente. Você pode excluir nós individuais ou partições inteiras do dimensionamento automático.
Excluindo um nó
Para excluir um ou mais nós do dimensionamento automático, adicione SuspendExcNodes=<listofnodes> ao arquivo de configuração do Slurm. Por exemplo, para excluir os nós 1 e 2 da hpc partição, adicione o seguinte código a /sched/slurm.conf:
SuspendExcNodes=hpc-pg0-[1-2]
Em seguida, reinicie o slurmctld serviço para que a nova configuração entre em vigor.
Excluindo uma partição
Para excluir partições inteiras do dimensionamento automático, use um processo semelhante à exclusão de nós. Para excluir a partição inteira hpc , adicione o seguinte código a /sched/slurm.conf:
SuspendExcParts=hpc
Em seguida, reinicie o serviço slurmctld.
Solução de problemas
Conflitos de UID para utilizadores Slurm e munge
Por padrão, este projeto usa um UID e GID de 11100 para o usuário Slurm e 11101 para o usuário munge. Se esses padrões causarem um conflito com outro usuário ou grupo, você poderá substituí-los.
Para substituir os valores UID e GID, selecione o botão de edição para ambos os scheduler nós:
E o execute nodearray: 
Adicione os seguintes atributos à Configuration seção: 
slurm.user.name = slurm
slurm.user.uid = 11100
slurm.user.gid = 11100
munge.user.name = munge
munge.user.uid = 11101
munge.user.gid = 11101
Escala automática
O CycleCloud usa o recurso Elastic Computing do Slurm. Para depurar problemas de dimensionamento automático, verifique alguns logs no nó do agendador. Primeiro, certifique-se de que as chamadas de retomada de economia de energia estão acontecendo verificando /var/log/slurmctld/slurmctld.log. Você deve ver linhas como:
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
Consulte /var/log/slurmctld/resume.log. Se a etapa de retomada estiver falhando, marque /var/log/slurmctld/resume_fail.log. Se você vir mensagens sobre nomes de nó desconhecidos ou inválidos, siga as etapas na seção "Fazendo alterações no cluster" antes de adicionar nós ao cluster.
Referência de configuração do Slurm
A tabela a seguir descreve as opções de configuração específicas do Slurm que você pode alternar para personalizar a funcionalidade:
| Opções de configuração específicas do Slurm | Descrição |
|---|---|
| slurm.versão | Padrão: 18.08.7-1. Define a versão do Slurm para instalar e executar. Atualmente, é a versão padrão e única disponível. Mais versões podem ser suportadas no futuro. |
| slurm.autoscale | Padrão: false. Uma configuração por array de nós que controla se o Slurm para e inicia automaticamente os nós neste array de nós. |
| slurm.hpc | Padrão: true. Uma configuração por array de nós que controla se os nós no array de nós estão no mesmo grupo de colocação. Usado principalmente para arrays de nós que utilizam famílias de Máquinas Virtuais com InfiniBand. Aplica-se apenas quando slurm.autoscale está definido como true. |
| slurm.default_partition | Padrão: false. Uma configuração por nodearray que controla se a nodearray deve ser a partição padrão para trabalhos que não solicitam uma partição explicitamente. |
| slurm.dampen_memory | Padrão: 5. A porcentagem de memória a reservar para compensar a sobrecarga do SO/VM. |
| slurm.suspend_timeout | Padrão: 600. A quantidade de tempo, em segundos, entre o momento de uma chamada de suspensão e o instante em que esse nó pode ser novamente utilizado. |
| slurm.resume_timeout | Padrão: 1800. A quantidade de tempo, em segundos, para aguardar a inicialização bem-sucedida de um nó. |
| slurm.instalar | Padrão: true. Determina se o Slurm está instalado durante a inicialização do nó (true). Se você instalar o Slurm em uma imagem personalizada, defina esta opção de configuração como false (proj versão 2.5.0+). |
| slurm.use_pcpu | Padrão: true. Uma configuração por nodearray para controlar o agendamento com vCPUs hyperthreaded. Defina false para definir CPUs=vcpus em cyclecloud.conf. |
| slurm.user.name | Padrão: slurm. O nome de utilizador para usar no serviço Slurm. |
| slurm.user.uid | Padrão: 11100. O ID de usuário a ser usado para o usuário do Slurm. |
| slurm.user.gid | Padrão: 11100. O ID de grupo a ser usado para o usuário do Slurm. |
| munge.user.name | Padrão: munge. O nome de usuário para o serviço de autenticação MUNGE a ser usado. |
| munge.user.uid | Padrão: 11101. O ID de usuário a ser usado para o usuário MUNGE. |
| munge.user.gid | Padrão: 11101. O ID de grupo para o utilizador MUNGE. |
O CycleCloud suporta um conjunto padrão de atributos de parada automática entre agendadores:
| Atributo | Descrição |
|---|---|
| cyclecloud.cluster.autoscale.parar_ativado | Habilita a parada automática neste nó. [verdadeiro/falso] |
| cyclecloud.cluster.autoscale.tempo_inativo_após_tarefas | O período de tempo (em segundos) durante o qual um nó permanece ocioso após concluir trabalhos, antes de parar automaticamente. |
| cyclecloud.cluster.autoscale.idle_time_before_jobs (tempo de inatividade antes dos trabalhos) | A quantidade de tempo (em segundos) que um nó permanece ocioso após concluir os trabalhos, antes de parar automaticamente. |