Tutorial: faça a gestão de contas e do agendamento de tarefas num cluster

Se tiver interesse em clusters de preparação do Vertex AI, contacte o seu representante de vendas para aceder.

Este guia demonstra como usar as funcionalidades de contabilidade e qualidade de serviço (QOS) do Slurm para gerir eficazmente um único cluster de preparação partilhado por várias equipas com diferentes prioridades e necessidades de recursos.

O objetivo

No final deste tutorial, terá uma estrutura para gerir recursos de cluster que podem:

  • Aplique limites de recursos por equipa.
  • Priorizar e antecipar trabalhos com base na urgência.
  • Fornecer uma contabilidade clara do consumo de recursos.
  • Maximizar a utilização do cluster, mantendo a equidade.

Pré-requisitos

  • Um cluster de preparação em execução com a contabilidade, a prevenção e a prioridade configuradas para gerir contas, agendar e priorizar trabalhos.

  • Orchestrate

  • Definições avançadas do Slurm

  • sudo no nó de início de sessão do cluster para executar comandos de administrador.

Conceitos principais: os elementos básicos da contabilidade do Slurm

O Slurm usa uma hierarquia clara e flexível para gerir recursos. Compreender estes quatro elementos principais é fundamental.

Componente Exemplo Finalidade
Conta Uma equipa ou um projeto A unidade principal para agrupar utilizadores e definir limites de recursos gerais (por exemplo, team_ace pode usar um máximo de 10 nós).
Utilizador Um investigador individual A pessoa que envia um trabalho. Todos os utilizadores têm de pertencer a uma conta predefinida.
Partição Uma fila de hardware Um agrupamento lógico de nós. Para máxima flexibilidade, recomendamos uma única partição que contenha todos os seus nós.
QOS Um livro de regras Um conjunto de regras com nome que define limites de tarefas (por exemplo, "as tarefas nesta QOS só podem usar 2 nós") e a prioridade de agendamento.

Com este modelo, pode definir uma quota de nível elevado para uma conta inteira e aplicar um limite por tarefa mais detalhado através de uma QOS.

As personagens: administrador versus investigador

Existem duas funções distintas que interagem com este sistema: o administrador do cluster e o investigador.

Administrador do cluster

  • Ferramenta principal: sacctmgr (gestor de contas do Slurm)
  • A sua tarefa: criar a "estrutura" de contas, utilizadores e regras de QOS. Normalmente, esta é uma tarefa de "configuração única e atualização conforme necessário".
  • Principais tarefas: criar contas, atribuir utilizadores a contas, definir manuais de regras de QOS e associá-los.

Investigador

  • Ferramentas principais: sbatch, squeue e sinfo
  • O trabalho do investigador: enviar e monitorizar os seus trabalhos de investigação.
  • A magia: quando um investigador envia uma tarefa, o Slurm verifica automaticamente as regras associadas à respetiva conta e QOS. Se a tarefa violar algum limite, o Slurm rejeita-a com uma mensagem de erro clara.

O tutorial: um guia passo a passo progressivo

O tutorial seguinte coloca estes conceitos em prática através de uma série de cenários progressivos. Para esta explicação passo a passo, assuma a função de administrador do cluster. A sua tarefa é configurar uma conta, team_ace, e um utilizador, user_alice. Os cenários começam sem limites e adicionam progressivamente camadas de controlo.

Parte 1: configuração inicial (sem limites)

Crie a conta e associe o utilizador.

  • O objetivo: criar a hierarquia básica para team_ace e user_alice.
  • O método: use o sacctmgr para adicionar uma conta e, em seguida, adicione um utilizador associado a essa conta.
# --- (Run as Admin) ---

# 1. Create the 'team_ace' account
sudo sacctmgr add account team_ace Description="The Ace Team"

# 2. Create the 'user_alice' user and map them to their default account
# (Note: 'user_alice' must already exist as a Linux user on the node)
sudo sacctmgr add user user_alice Account=team_ace

# 3. Show the hierarchy we just built to confirm
sacctmgr show associations where account=team_ace

Resultado: como utilizador user_alice, já pode enviar uma tarefa grande. Uma vez que não existem limites, um trabalho de 7 nós é aceite e executado imediatamente (partindo do princípio de que 7 nós estão inativos).

Parte 2: adicione limites ao nível do grupo a uma conta

Em seguida, aplique um limite de recursos à conta team_ace, limitando toda a equipa a um máximo de 6 nós e 4 tarefas no total.

  • O objetivo: definir um limite de recursos total para uma equipa inteira.

  • O método: aplicamos este limite à team_ace conta que usa GrpJobs (tarefas de grupo) e GrpTRES (recursos rastreáveis de grupo, neste caso, node=6).

# --- (Run as Admin) ---

# 1. Add group-level job and node limits to the 'team_ace' account
sudo sacctmgr modify account where name=team_ace set GrpJobs=4 GrpTRES=node=6

# 2. View the limits to confirm the change
sacctmgr show association where account=team_ace

Resultados: para verificar se os novos limites estão a funcionar, faça os seguintes testes como user_alice:

  1. Limite de nós: o envio de uma tarefa de 7 nós falha agora. A tarefa é colocada num estado pendente (PD) com o motivo (AssocGrpNodeLimit).
  2. Limite de tarefas: o envio de 5 tarefas de nó único resulta na execução de 4 tarefas (R) e na 5.ª tarefa pendente (PD) com o motivo (AssocGrpJobsLimit).

Os limites ao nível da conta estão a funcionar perfeitamente.

Parte 3: adicione um limite por tarefa com QOS

O limite de grupos ao nível da conta é eficaz para limitar a utilização total de recursos de uma equipa. No entanto, não impede que um utilizador envie uma única tarefa que consuma toda a quota da equipa. Para controlar o tamanho das tarefas individuais, o passo seguinte é usar uma Qualidade de Serviço (QOS).

  • O objetivo: restringir o tamanho máximo de qualquer tarefa individual enviada pela equipa.
  • O método: vamos criar uma qualidade de serviço (QOS) denominada qos1 com uma regra MaxTRESPerJob=node=2. Em seguida, vamos tornar esta a QOS predefinida para toda a conta team_ace.
# --- (Run as Admin) ---

# 1. Create a QOS with a per-job limit of 2 nodes
sudo sacctmgr add qos qos1 MaxTRESPerJob=node=2

# 2. Allow the 'team_ace' account to use this QOS
sudo sacctmgr modify account where account=team_ace set QOS=qos1

# 3. Set 'qos1' as the DEFAULT QOS for all users in this account
sudo sacctmgr modify account where account=team_ace set DefaultQOS=qos1

Resultado: agora, se user_alice enviar um trabalho de 3 nós, o trabalho é colocado num estado pendente com o motivo (QOSMaxNodePerJobLimit). O utilizador continua dentro da sua quota da conta total (6 nós), mas violou a regra de QOS por trabalho.

Parte 4: adicione uma substituição específica do utilizador

E se user_alice for estagiário e precisar de ser restrito a tarefas ainda mais pequenas, sem afetar o resto da equipa?

  • O objetivo: aplicar um limite mais restritivo a um único utilizador.
  • O método: vamos criar uma QOS nova e mais restritiva (qos_intern) e aplicá-la como predefinição especificamente para user_alice. Esta opção substitui a QoS predefinida da conta.

# --- (Run as Admin) ---

# 1. Create a more restrictive QOS with a 1-node limit
sudo sacctmgr add qos qos_intern MaxTRESPerJob=node=1

# 2. Allow the account to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_intern

# 3. Apply 'qos_intern' as the default QOS for the specific user association
sudo sacctmgr modify user where name=user_alice account=team_ace set DefaultQOS=qos_intern

Resultado: se user_alice tentar enviar a tarefa de 2 nós que foi permitida anteriormente em qos1, falha com (QOSMaxNodePerJobLimit). A regra ao nível do utilizador mais específica substituiu com êxito a regra geral ao nível da conta.

Parte 5: configure a prioridade e a preempção

Por último, configure a prioridade e a preempção das tarefas para garantir que as tarefas críticas podem ser executadas imediatamente, mesmo que o cluster esteja cheio.

  • O objetivo: criar um QOS "urgente" de alta prioridade que possa pausar ou cancelar uma tarefa de prioridade inferior para libertar recursos.
  • O método:

    1. Crie um novo qos_urgent com um valor Priority elevado.
    2. Diga a qos_urgent que tem permissão para Preempt tarefas em execução em qos1.
    3. Configure o qos1 para REQUEUE as respetivas tarefas quando forem antecipadas.

# --- (Run as Admin) ---

# 1. Create a new 'qos_urgent' with a high priority that can preempt 'qos1'
sudo sacctmgr add qos qos_urgent Priority=1000 Preempt=qos1

# 2. Configure 'qos1' to requeue preempted jobs after a 10-second grace period
sudo sacctmgr modify qos where name=qos1 set PreemptMode=REQUEUE GraceTime=10

# 3. Allow the 'team_ace' account and 'user_alice' to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_urgent
sudo sacctmgr modify user where name=user_alice account=team_ace set QOS+=qos_urgent

# 4. For this scenario, remove the group limits so preemption is easier to trigger
sudo sacctmgr modify account where name=team_ace set GrpJobs=-1 GrpTRES=node=-1

Resultado:

  1. Num terminal, user_alice envia uma tarefa de execução prolongada com o valor qos1 predefinido. Começa a ser executado (R).
  2. Num segundo terminal, user_alice envia um trabalho grande com o QOS (sbatch --qos=qos_urgent ...) urgente.
  3. Em segundos, o estado da primeira tarefa muda de em execução (R) para pendente (PD) com o motivo (Preempted). Em seguida, a tarefa urgente começa a ser executada.

Êxito! Configurou um sistema em que o trabalho de alta prioridade substitui automaticamente o trabalho de baixa prioridade.

Resumo e passos seguintes

Ao seguir este tutorial, aprendeu a usar as funcionalidades de contabilidade hierárquica do Slurm para alcançar um controlo detalhado sobre um cluster partilhado. Agora, pode:

  • Defina limites globais: use contas para definir quotas de recursos totais para equipas inteiras.
  • Aplique regras por tarefa: use a QOS para controlar o tamanho e a prioridade de tarefas individuais.
  • Criar substituições específicas: aplique uma QOS diferente a um utilizador para um controlo detalhado.
  • Garantir prioridade: configure a preempção para garantir que as cargas de trabalho críticas podem ser sempre executadas.

Este modelo em camadas oferece uma forma flexível e poderosa de gerir os recursos do cluster de forma justa e eficiente. Para configurações ainda mais avançadas, consulte a documentação oficial do Slurm.