Executando verificação de segurança...
5

SLURM: O Gerenciamento Eficiente de Tarefas em Supercomputadores!

Introdução

Com o avanço da computação de alto desempenho (HPC), a administração eficiente de processos e recursos tornou-se essencial para o funcionamento otimizado de supercomputadores. O SLURM (Simple Linux Utility for Resource Management) é um dos principais sistemas de gerenciamento de workload, amplamente utilizado para orquestrar tarefas, alocar recursos e otimizar o uso de grandes clusters e supercomputadores. Neste artigo, exploraremos como o SLURM gerencia tarefas e processos e garante a eficiência do ambiente de supercomputação.

O que é o SLURM?

SLURM é um sistema de gerenciamento de workload open-source projetado para distribuir, agendar e monitorar tarefas em ambientes de HPC. Ele permite a alocação dinâmica de recursos, como CPUs, GPUs, memória e nós, assegurando que as tarefas sejam realizadas de forma eficiente e organizada.

Supercomputadores modernos, compostos por milhares de nós, precisam de um sistema robusto para gerenciar o fluxo de trabalho e evitar gargalos de performance. É aí que entra o SLURM, garantindo que cada tarefa receba os recursos apropriados e que o cluster funcione de forma otimizada.

Como Funciona o Gerenciamento de Tarefas e Processos

SLURM se destaca por sua arquitetura modular e por seu mecanismo distribuído de alocação de recursos e tarefas. O sistema divide-se em três componentes principais:

SLURM

  1. Controlador (Slurm Controller ou slurmctld)
    Este é o componente principal responsável por gerenciar e monitorar o status dos recursos e tarefas no cluster. Ele recebe solicitações dos usuários, organiza as filas e decide quais tarefas serão executadas com base em políticas definidas, como prioridade e disponibilidade de recursos.

  2. Daemons nos Nós (Slurmd)
    Cada nó de processamento executa um daemon chamado slurmd, responsável por receber, iniciar e monitorar as tarefas atribuídas a ele. Esse daemon se comunica com o controlador para garantir a execução correta dos jobs e para reportar o status das operações.

  3. Banco de Dados (SlurmDBD)
    Esse componente armazena informações históricas e métricas das tarefas executadas. Isso é importante para a auditoria, otimização de recursos e análise de desempenho ao longo do tempo.

Políticas de Prioridade

O escalonador do SLURM oferece suporte a várias políticas de priorização, como:

  • FIFO (First-In-First-Out): Jobs são executados na ordem em que são recebidos.
  • Fair-Share: Recursos são distribuídos de maneira equilibrada entre os usuários.
  • Backfilling: Jobs menores são executados à frente de outros maiores, se houver recursos ociosos.

Comandos

ComandoDescrição
sinfoVisualize as informações das partições e nós do supercomputador.
sprioVisualize as informações dos fatores que compõem a prioridade na fila de cada job.
squeueVisualize as informações gerais dos Job's que estão na fila ou executando.
sbatchSubmeta um Job para o supercomputador.
scancelCancele um Job que está na fila ou em execução.

sinfo

sinfo exibe as informações das partições e nós do supercomputador.

Exemplo: sinfo

$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
cluster*     up 20-00:00:0      1  down* r1i2n14
cluster*     up 20-00:00:0     18  alloc r1i0n[1-2,4-7,11-12,14-16],r1i1n[7,9,15],r1i2n[1-2,11],r1i3n1
cluster*     up 20-00:00:0     13    mix r1i0n[0,3,9],r1i1n[4-6,10,14],r1i2n[3-4,10,13],r1i3n2
cluster*     up 20-00:00:0     19   idle r1i0n[10,17],r1i1n[0-3,11-13,16],r1i2n[0,5-7,9,12,15-16],r1i3n0
service      up 20-00:00:0      3    mix service[1,3-4]
service      up 20-00:00:0      1  alloc service2
test         up      30:00      1  down* r1i2n14
test         up      30:00     19  alloc r1i0n[1-2,4-7,11-12,14-16],r1i1n[7,9,15],r1i2n[1-2,11],r1i3n1,service2
test         up      30:00     16    mix r1i0n[0,3,9],r1i1n[4-6,10,14],r1i2n[3-4,10,13],r1i3n2,service[1,3-4]
test         up      30:00     19   idle r1i0n[10,17],r1i1n[0-3,11-13,16],r1i2n[0,5-7,9,12,15-16],r1i3n0
intel-512    up 20-00:00:0      6    mix r1i3n[11-16]
intel-256    up 20-00:00:0      6    mix r1i3n[3-6,9-10]
intel-256    up 20-00:00:0      1   idle r1i3n7
gpu          up 2-00:00:00      2   idle gpunode[0-1]

A lista abaixo mostra o que representa cada campo de saída do comando sinfo.

  • PARTITION: Partições do supercomputador

    • cluster: Partição padrão indicada pelo asterisco, composta por 64 nós
      computacionais em lâmina.

      r1i0n[0-7, 9-12, 14-17], r1i1n[0-7, 9-16], r1i2n[0-7, 9-16] e r1i3n[0-7,
      9-16]
    • test: Partição para testes rápidos, composta por 72 (todos) nós
      computacionais. Jobs rodados na partição teste tem o valor de prioridade
      aumentado em 15000.

      r1i0n[0-7, 9-12, 14-17], r1i1n[0-7, 9-16], r1i2n[0-7, 9-16], r1i3n[0-7,
      9-16], service[1-4, 8-11]
    • service: Partição composta por 4 nós computacionais.

      service[1-4]
    • knl: Partição composta por 2 nós computacionais com grande número de
      núcleos.

      service[8,9]
    • gpu: Partição composta por 2 nós computacionais com 8 GPUs cada.

      service[10,11]
    • full: Partição composta por todos os 72 nós computacionais.

      r1i0n[0-7, 9-12, 14-17], r1i1n[0-7, 9-16], r1i2n[0-7, 9-16], r1i3n[0-7,
      9-16], service[1-4, 8-11]

    Mais detalhes sobre o hardware podem ser vistos em
    Hardware

  • AVAIL: Disponibilidade de cada partição (Available)

  • TIMELIMIT: Tempo limite de execução do job na partição correspondente.
    Todas as partições possuem o tempo limite de 20 dias para execução do job.
    Exceto a partição teste, cujo o tempo limite é de 30 minutos com ganho na
    prioridade para execução.
    Formato do timelimit no comando sinfo: Dias - horas : minutos
    : segundos, exemplo: 20-13:22:21 significa 20 dias, 13 horas, 22 minutos e
    21 segundos

  • NODES: Número de nós de cada partição

  • STATE: Campo mais relevante dado como resposta do comando sinfo. Seu
    resultado pode ter significados diferentes, dependendo da saída fornecida,
    conforme é possível verificar abaixo.

    • alloc: Indica que um conjunto de nós está em uso

    • idle: Indica que um conjunto de nós está ocioso

    • down/drain: Indica que um conjunto de nós se encontra indisponível

    • maint/resv: Indica que um conjunto de nós está reservados

    • mix: Indica que um conjunto de nós está sendo compartilhados por mais de
      um job

  • NODELIST: Representa as listas de nós correspondentes a cada par
    partição/estado

Carregando publicação patrocinada...