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.
sudono 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,squeueesinfo - 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_aceeuser_alice. - O método: use o
sacctmgrpara 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_aceconta que usaGrpJobs(tarefas de grupo) eGrpTRES(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:
- 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). - 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
qos1com uma regraMaxTRESPerJob=node=2. Em seguida, vamos tornar esta a QOS predefinida para toda a contateam_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 parauser_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:
- Crie um novo
qos_urgentcom um valorPriorityelevado. - Diga a
qos_urgentque tem permissão paraPreempttarefas em execução emqos1. - Configure o
qos1paraREQUEUEas respetivas tarefas quando forem antecipadas.
- Crie um novo
# --- (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:
- Num terminal,
user_aliceenvia uma tarefa de execução prolongada com o valorqos1predefinido. Começa a ser executado (R). - Num segundo terminal,
user_aliceenvia um trabalho grande com o QOS (sbatch --qos=qos_urgent ...) urgente. - 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.