Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Slurm é um gerenciador de cargas de trabalho de software livre altamente configurável. Para obter mais informações, consulte o site do projeto Slurm de visão geral.
Observação
A partir do CycleCloud 8.4.0, a integração do Slurm foi reescrita para dar 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 CycleCloud, modifique o 'run_list', disponível na seção de configuração da definição do 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 snippet de modelo de cluster simples pode ser semelhante a:
[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
O Slurm pode ser habilitado facilmente em um cluster CycleCloud modificando o 'run_list', disponível na seção de configuração da definição do cluster. Os dois componentes básicos de um cluster Slurm são o nó 'agendador', que fornece um sistema de arquivos compartilhado no qual o software Slurm é executado e os nós 'execute', que são os hosts que montam o sistema de arquivos compartilhado e executam os trabalhos enviados. Por exemplo, um snippet de modelo de cluster simples pode ser semelhante a:
[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 de slurm existentes
Os clusters do Slurm em execução nas versões 7.8 e posteriores do CycleCloud implementam uma versão atualizada das APIs de dimensionamento automático que permite que os clusters utilizem vários nodearrays e partições. Para facilitar essa funcionalidade no Slurm, o CycleCloud pré-popula os nós operacionais no cluster. Por causa do pré-preenchimento, será necessário executar um comando no nó agendador do Slurm após fazer qualquer alteração no cluster, como limites de escala automática ou tipos de VM.
Fazendo alterações no cluster
O cluster Slurm implantado no CycleCloud contém um script que facilita as alterações. Depois de fazer qualquer alteração no cluster, execute o próximo comando como root (por exemplo, executando sudo -i
) no nó agendador do Slurm para recompilar o slurm.conf
e atualizar os nós do cluster:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Observação
Para versões do CycleCloud antes da 7.9.10, o cyclecloud_slurm.sh
script está localizado em /opt/cycle/jetpack/system/bootstrap/slurm.
Importante
Se você fizer qualquer alteração que afete as VMs dos nós em uma partição MPI (como tamanho da VM, imagem ou inicialização na nuvem), todos os nós deverão ser encerrados primeiro.
O remove_nodes
comando imprime um aviso nesse caso, mas não sai com um erro.
Se houver nós em execução, você receberá um erro de This node doesn't match existing scaleset attribute
quando novos nós são iniciados.
/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes
Observação
Para as versões do CycleCloud < 8.2, o script cyclecloud_slurm.sh
está localizado em /opt/cycle/jetpack/system/bootstrap/slurm.
Se você fizer alterações que afetam as VMs dos nós em uma partição MPI (como dimensionar a VM, imagem ou cloud-init) e os nós estiverem em execução, ocorrerá um erro This node doesn't match existing scaleset attribute
ao iniciar novos nós. Por esse motivo, o comando apply_changes
garante que os nós sejam encerrados e exibirá a seguinte mensagem de erro caso contrário: Os seguintes nós 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 de MPI, não será necessário encerrar primeiro o funcionamento dos nós. 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 só existe no CycleCloud 8.3+, portanto, a única forma de realizar uma alteração nas versões anteriores é com os comandos adicionais remove_nodes
+ scale
. Certifique-se de que o comando remove_nodes
não exiba um aviso sobre nós que precisam ser encerrados.
Criando partições complementares
O modelo padrão que vem com o Azure CycleCloud tem duas partições (hpc
e htc
), e você pode definir nodearrays personalizados que mapeiam diretamente para as partições do Slurm. Por exemplo, para criar uma partição de GPU, adicione a próxima 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: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 de kernel do Linux e o sistema operacional e a VM usam uma pequena quantidade de memória, o CycleCloud reduz automaticamente o valor de 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 esse valor pode ser substituído no modelo de cluster definindo slurm.dampen_memory
o percentual de memória a ser retido. Por exemplo, para reter 20% da memória de uma VM:
slurm.dampen_memory=20
Desabilitando o dimensionamento automático para nós ou partições específicos
Embora o recurso interno do CycleCloud "KeepAlive" não funcione atualmente para clusters Slurm, é possível desabilitar 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 de serem dimensionada automaticamente.
Excluindo um nó
Para excluir um nó ou vários nós da autoescala, 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 próximo a /sched/slurm.conf
:
SuspendExcNodes=hpc-pg0-[1-2]
Em seguida, reinicie o serviço slurmctld
para que a nova configuração entre em vigor.
Excluindo uma partição
Excluir partições inteiras do dimensionamento automático é semelhante à exclusão de nós. Para excluir a partição inteira hpc
, adicione o seguinte a /sched/slurm.conf
SuspendExcParts=hpc
Reinicie o serviço slurmctld
.
Resolução de problemas
Conflitos de UID para os usuários Slurm e munge
Por padrão, este projeto usa um UID e GID de 11100 para o usuário do Slurm e 11101 para o usuário do munge. Se isso causar um conflito com outro usuário ou grupo, esses padrões poderão ser substituídos.
Para substituir o UID e o GID, clique no botão de edição do nó scheduler
:
E o execute
nodearray:
Adicione os próximos atributos à seção 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
Escalonamento automático
O CycleCloud usa o recurso Computação Elástica do Slurm. Para depurar problemas de dimensionamento automático, há alguns logs no nó do agendador que você pode verificar. A primeira é verificar se as chamadas de retomada de economia de energia estão sendo feitas 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
O outro log a ser verificado é /var/log/slurmctld/resume.log
. Se a etapa de retomada estiver falhando, haverá /var/log/slurmctld/resume_fail.log
. Se houver mensagens sobre nomes de nós desconhecidos ou inválidos, certifique-se de que os nós não sejam adicionados ao cluster sem avançar pelas etapas da seção "Alterando o Cluster" sobre sobrecarga.
Referência de configuração de slurm
A seguir estão 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.version | Padrão: "18.08.7-1". Isso define a versão do Slurm para instalar e executar. No momento, é a opção padrão e única . Mais versões podem ter suporte no futuro. |
slurm.autoscale | Padrão: "false". Uma configuração por nodearray que controla se o Slurm deverá parar e iniciar nós automaticamente nesse nodearray. |
slurm.hpc | Padrão: 'verdadeiro'. Uma configuração por nodearray que controla se os nós do nodearray serão colocados no mesmo grupo de posicionamento. Usado principalmente para nodearrays usando famílias de VM com InfiniBand. Ele só se aplica quando slurm.autoscale é definido como "true". |
slurm.default_partition | Padrão: "false". Uma configuração por nodearray que controla se o 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 ser retida para sobrecarga de SO/VM. |
slurm.suspend_timeout | Padrão: "600". O período de tempo (em segundos) entre uma chamada de suspensão e o momento em que o nó pode ser usado novamente. |
slurm.resume_timeout | Padrão: "1800". A quantidade de tempo (em segundos) para esperar que um nó seja inicializado com êxito. |
slurm.install | Padrão “true” Define se o Slurm foi instalado na inicialização do nó ('verdadeiro'). Se o Slurm estiver instalado em uma imagem personalizada, essa opção de configuração deverá ser definida 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 com hyperthreading. Defina como "false" para definir CPUs=vcpus em cyclecloud.conf. |
slurm.user.name | Padrão: "slurm". O nome de usuário do serviço Slurm que deve ser utilizado. |
slurm.user.uid | Padrão: "11100". A ID de usuário a ser usada para o usuário do Slurm. |
slurm.user.gid | Padrão: "11100". A ID de grupo a ser usada para o usuário do Slurm. |
munge.user.name | Padrão: "munge". O nome de usuário a ser usado para o serviço de autenticação MUNGE. |
munge.user.uid | Padrão: "11101". A ID de usuário a ser usada para o usuário MUNGE. |
munge.user.gid | Padrão: "11101". A ID do grupo a ser usada para o usuário do MUNGE. |
O CycleCloud oferece suporte a um conjunto padrão de atributos de parada automática entre os agendadores.
Atributo | Descrição |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | A parada automática está habilitada nesse nó? [verdadeiro/falso] |
cyclecloud.cluster.autoscale.tempo_ocioso_após_trabalhos | A quantidade de tempo (em segundos) para que um nó fique ocioso após concluir trabalhos, antes de ser reduzido. |
cyclecloud.cluster.autoscale.tempo_ocioso_antes_dos_trabalhos | A quantidade de tempo (em segundos) para um nó ficar ocioso antes de concluir trabalhos antes de ser reduzido. |