Tutorial: Administra cuentas y la programación de trabajos en un clúster

Si te interesan los clústeres de entrenamiento de Vertex AI, comunícate con tu representante de ventas para obtener acceso.

En esta guía, se muestra cómo usar las funciones de contabilidad y calidad del servicio (QoS) de Slurm para administrar de manera eficaz un solo clúster de entrenamiento compartido por varios equipos con diferentes prioridades y necesidades de recursos.

El objetivo

Al final de este instructivo, tendrás un framework para administrar los recursos del clúster que puede hacer lo siguiente:

  • Aplicar límites de recursos por equipo
  • Prioriza y adelanta trabajos según la urgencia.
  • Proporcionar una contabilidad clara del consumo de recursos
  • Maximizar la utilización del clúster y, al mismo tiempo, mantener la equidad

Requisitos previos

  • Un clúster de entrenamiento en ejecución con la configuración de Contabilidad, Desalojo y Prioridad para administrar cuentas, programar y priorizar trabajos.

  • Organizar

  • Configuración avanzada de Slurm

  • Acceso sudo en el nodo de acceso del clúster para ejecutar comandos de administrador

Conceptos básicos: Los componentes fundamentales de la contabilidad de Slurm

Slurm usa una jerarquía clara y flexible para administrar los recursos. Comprender estos cuatro componentes básicos es fundamental.

Componente Ejemplo Objetivo
Cuenta Un equipo o proyecto Es la unidad principal para agrupar usuarios y establecer límites generales de recursos (por ejemplo, team_ace puede usar un máximo de 10 nodos).
User Un investigador individual Es la persona que envía un trabajo. Todos los usuarios deben pertenecer a una cuenta predeterminada.
Partición Una fila de hardware Es una agrupación lógica de nodos. Para obtener la máxima flexibilidad, te recomendamos que uses una sola partición que contenga todos tus nodos.
QOS Un libro de reglas Es un conjunto de reglas con nombre que define los límites de los trabajos (por ejemplo, "los trabajos en esta QoS solo pueden usar 2 nodos") y la prioridad de programación.

Con este modelo, puedes establecer una cuota de alto nivel para toda una cuenta y aplicar un límite más detallado, por trabajo, con una QOS.

Los arquetipos: administrador y persona investigadora

Dos roles distintos interactúan con este sistema: el administrador del clúster y el investigador.

Administrador del clúster

  • Herramienta principal: sacctmgr (administrador de cuentas de Slurm)
  • Tu trabajo: Debes crear la "estructura" de las cuentas, los usuarios y las reglas de QoS. Por lo general, esta es una tarea de "configurar una vez y actualizar según sea necesario".
  • Tareas clave: Crear cuentas, asignar usuarios a las cuentas, definir libros de reglas de CdC y vincularlos.

Investigador

  • Herramientas principales: sbatch, squeue, sinfo
  • Su trabajo: Enviar y supervisar sus trabajos de investigación
  • La magia: Cuando un investigador envía un trabajo, Slurm verifica automáticamente las reglas asociadas con su cuenta y su QOS. Si el trabajo incumple algún límite, Slurm lo rechaza con un mensaje de error claro.

El instructivo: Una explicación progresiva

En el siguiente instructivo, se ponen en práctica estos conceptos a través de una serie de situaciones progresivas. Para esta explicación, asume el rol de administrador del clúster. Tu tarea es configurar una cuenta, team_ace, y un usuario, user_alice. Los casos de uso comienzan sin límites y agregan capas de control de forma progresiva.

Parte 1: Configuración inicial (sin límites)

Crea la cuenta y asocia al usuario.

  • El objetivo es crear la jerarquía básica para team_ace y user_alice.
  • El método: Usa sacctmgr para agregar una cuenta y, luego, agrega un usuario asociado a esa cuenta.
# --- (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 usuario user_alice, ahora puedes enviar un trabajo grande. Como no existen límites, se acepta un trabajo de 7 nodos y se ejecuta de inmediato (siempre que haya 7 nodos inactivos).

Parte 2: Agrega límites a nivel del grupo en una cuenta

A continuación, aplica un límite de recursos a la cuenta de team_ace, lo que limitará a todo el equipo a un máximo de 6 nodos y 4 trabajos en total.

  • El objetivo es establecer un límite de recursos total para todo un equipo.

  • El método: Aplicamos este límite a la cuenta de team_ace con GrpJobs (agrupa trabajos) y GrpTRES (agrupa recursos rastreables, en este 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 que los límites nuevos funcionen, realiza las siguientes pruebas como user_alice:

  1. Límite de nodos: Ahora falla el envío de un trabajo de 7 nodos. El trabajo se pone en estado pendiente (PD) con el motivo (AssocGrpNodeLimit).
  2. Límite de trabajos: Si se envían 5 trabajos de un solo nodo, se ejecutarán 4 trabajos (R) y el 5º trabajo quedará pendiente (PD) con el motivo (AssocGrpJobsLimit).

Los límites a nivel de la cuenta funcionan perfectamente.

Parte 3: Agrega un límite por trabajo con la QoS

El límite de grupos a nivel de la cuenta es eficaz para limitar el uso total de recursos de un equipo. Sin embargo, no impide que un usuario envíe un solo trabajo que consuma toda la cuota del equipo. Para controlar el tamaño de los trabajos individuales, el siguiente paso es usar una Calidad de servicio (QoS).

  • El objetivo es restringir el tamaño máximo de cualquier trabajo individual que envíe el equipo.
  • El método: Crearemos una calidad de servicio (QoS) llamada qos1 con una regla MaxTRESPerJob=node=2. Luego, estableceremos esta configuración como la QoS predeterminada para toda la cuenta de 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: Ahora, si user_alice envía un trabajo de 3 nodos, el trabajo se coloca en estado pendiente con el motivo (QOSMaxNodePerJobLimit). El usuario aún se encuentra dentro de su cuota total de la cuenta (6 nodos), pero incumplió la regla de QOS por trabajo.

Parte 4: Agrega una anulación específica del usuario

¿Qué sucede si user_alice es pasante y debe restringirse a trabajos aún más pequeños, sin afectar al resto del equipo?

  • El objetivo es aplicar un límite más restrictivo a un solo usuario.
  • El método: Crearemos una nueva y más restrictiva QoS (qos_intern) y la aplicaremos como predeterminada específicamente para user_alice. Esto anula la QoS predeterminada de la cuenta.

# --- (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: Si user_alice intenta enviar el trabajo de 2 nodos que se había permitido anteriormente en qos1, falla con (QOSMaxNodePerJobLimit). La regla más específica a nivel del usuario anuló correctamente la regla general a nivel de la cuenta.

Parte 5: Configura la prioridad y la preferencia

Por último, configura la prioridad y la preferencia del trabajo para garantizar que los trabajos críticos se puedan ejecutar de inmediato, incluso si el clúster está lleno.

  • El objetivo es crear una QOS "urgente" de alta prioridad que pueda pausar o cancelar un trabajo de menor prioridad para liberar recursos.
  • El método:

    1. Crea un nuevo qos_urgent con un valor de Priority alto.
    2. Indícale a qos_urgent que puede Preempt los trabajos que se ejecutan en qos1.
    3. Configura qos1 para que REQUEUE sus trabajos cuando se interrumpan.

# --- (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. En una terminal, user_alice envía un trabajo de larga duración con el valor predeterminado qos1. Comienza a ejecutarse (R).
  2. En una segunda terminal, user_alice envía un trabajo grande con la QoS urgente (sbatch --qos=qos_urgent ...).
  3. En cuestión de segundos, el estado del primer trabajo cambia de en ejecución (E) a pendiente (PD) con el motivo (Preempted). Luego, comienza a ejecutarse el trabajo urgente.

¡Listo! Configuraste un sistema en el que el trabajo de prioridad alta desplaza automáticamente el trabajo de prioridad baja.

Resumen y próximos pasos

Si seguiste este instructivo, aprendiste a usar las funciones de contabilidad jerárquica de Slurm para lograr un control detallado sobre un clúster compartido. A partir de ahora, podrá hacer lo siguiente:

  • Establece límites globales: Usa cuentas para establecer cuotas de recursos totales para equipos completos.
  • Aplicar reglas por trabajo: Usa la QoS para controlar el tamaño y la prioridad de los trabajos individuales.
  • Crear anulaciones específicas: Aplica una QOS diferente a un usuario para tener un control detallado.
  • Garantiza la prioridad: Configura la preferencia para garantizar que las cargas de trabajo críticas siempre se puedan ejecutar.

Este modelo en capas proporciona una forma flexible y potente de administrar los recursos del clúster de manera justa y eficiente. Para obtener configuraciones aún más avanzadas, consulta la documentación oficial de Slurm.