En esta guía se muestra cómo usar las funciones de contabilidad y calidad del servicio (QoS) de Slurm para gestionar de forma eficaz un clúster de entrenamiento compartido por varios equipos con diferentes prioridades y necesidades de recursos.
El objetivo
Al final de este tutorial, tendrás un marco para gestionar los recursos de clúster que pueda hacer lo siguiente:
- Aplica límites de recursos por equipo.
- Prioriza y anticipa los trabajos en función de la urgencia.
- Proporcionar una contabilidad clara del consumo de recursos.
- Maximizar la utilización del clúster sin dejar de ser justos.
Requisitos previos
Un clúster de entrenamiento en ejecución con las opciones Contabilidad, Preferencia y Prioridad configuradas para gestionar cuentas, programar y priorizar tareas.
sudoen el nodo de inicio de sesión del clúster para ejecutar comandos de administrador.
Conceptos básicos: los componentes básicos de la contabilidad de Slurm
Slurm usa una jerarquía clara y flexible para gestionar los recursos. Es fundamental conocer estos cuatro elementos básicos.
| Componente | Ejemplo | Finalidad |
|---|---|---|
| Cuenta | Un equipo o un proyecto | La unidad principal para agrupar usuarios y definir límites de recursos generales (por ejemplo, team_ace puede usar un máximo de 10 nodos). |
| Usuario | Un investigador | La persona que envía un trabajo. Todos los usuarios deben pertenecer a una cuenta predeterminada. |
| Partición | Una cola de hardware | Una agrupación lógica de nodos. Para disfrutar de la máxima flexibilidad, te recomendamos que uses una sola partición que contenga todos tus nodos. |
| QOS | Un reglamento | Conjunto de reglas con nombre que define los límites de los trabajos (por ejemplo, "los trabajos de esta QOS solo pueden usar 2 nodos") y la prioridad de programación. |
Con este modelo, puedes definir una cuota de alto nivel para toda una cuenta y aplicar un límite más granular, por trabajo, mediante un QOS.
Los perfiles: administrador y investigador
En este sistema interactúan dos roles distintos: el administrador del clúster y el investigador.
Administrador de clústeres
- Herramienta principal:
sacctmgr(gestor de cuentas de Slurm) - Tu trabajo: crear la "estructura" de cuentas, usuarios y reglas de calidad del servicio. Normalmente, se trata de una tarea de "configuración única y actualización según sea necesario".
- Tareas clave: crear cuentas, asignar usuarios a cuentas, definir libros de reglas de calidad del servicio y vincularlos.
Investigador
- Herramientas principales:
sbatch,squeueysinfo - Su trabajo: enviar y monitorizar sus tareas de investigación.
- La magia: cuando un investigador envía un trabajo, Slurm comprueba automáticamente las reglas asociadas a su cuenta y a su calidad del servicio. Si el trabajo infringe algún límite, Slurm lo rechaza con un mensaje de error claro.
Tutorial: una guía progresiva
En el siguiente tutorial se ponen en práctica estos conceptos a través de una serie de situaciones progresivas. En este tutorial, asumiremos el rol de administrador del clúster. Tu tarea consiste en configurar una cuenta, team_ace, y un usuario, user_alice. Los escenarios empiezan sin límites y van añadiendo capas de control progresivamente.
Parte 1: Configuración inicial (sin límites)
Crea la cuenta y asocia el usuario.
- El objetivo es crear la jerarquía básica de
team_aceyuser_alice. - Método: usa
sacctmgrpara añadir una cuenta y, a continuación, añade 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 de gran tamaño. Como no hay límites, se acepta un trabajo de 7 nodos y se ejecuta inmediatamente (siempre que haya 7 nodos inactivos).
Parte 2: Añadir límites a nivel de grupo a una cuenta
A continuación, aplica un límite de recursos a la cuenta team_ace, de modo que todo el equipo tenga un máximo de 6 nodos y 4 tareas en total.
El objetivo es definir un límite total de recursos para todo un equipo.
Método: aplicamos este límite a la
team_acecuenta medianteGrpJobs(tareas de grupo) yGrpTRES(recursos rastreables de grupo, 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 nuevos límites funcionan, realiza las siguientes pruebas comouser_alice:
- Límite de nodos: ahora no se pueden enviar tareas de 7 nodos. El trabajo se pone en estado pendiente (
PD) con el motivo (AssocGrpNodeLimit). - Límite de tareas: si se envían 5 tareas de un solo nodo, se ejecutarán 4 (
R) y la quinta quedará pendiente (PD) por el motivo (AssocGrpJobsLimit).
Los límites a nivel de cuenta funcionan perfectamente.
Parte 3: Añadir un límite por trabajo con QoS
El límite de grupos a nivel de cuenta sirve 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 del servicio (QoS).
- Objetivo: restringir el tamaño máximo de cualquier trabajo enviado por el equipo.
- El método: crearemos una calidad del servicio (QoS) llamada
qos1con una reglaMaxTRESPerJob=node=2. A continuación, lo convertiremos en el QoS predeterminado de toda lateam_acecuenta.
# --- (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 sigue estando dentro de su cuota de cuenta total (6 nodos), pero ha infringido la regla de calidad del servicio por trabajo.
Parte 4: Añadir una anulación específica de un usuario
¿Qué ocurre si user_alice es un becario y necesita que se le restrinjan aún más las tareas, sin que esto afecte al resto del equipo?
- Objetivo: aplicar un límite más restrictivo a un solo usuario.
- El método: crearemos un nuevo QOS más restrictivo (
qos_intern) y lo aplicaremos como predeterminado específicamente parauser_alice. Esto anula la calidad del servicio 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, se produce un error (QOSMaxNodePerJobLimit). La regla más específica a nivel de usuario ha anulado correctamente la regla general a nivel de cuenta.
Parte 5: Configurar la prioridad y la preferencia
Por último, configura la prioridad y la preferencia de las tareas para asegurarte de que las tareas críticas se puedan ejecutar inmediatamente, aunque 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:
- Crea un
qos_urgentcon un valor dePriorityalto. - Indica a
qos_urgentque puedePreempttareas que se estén ejecutando enqos1. - Configura
qos1para queREQUEUEsus tareas cuando se interrumpan.
- Crea un
# --- (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:
- En una terminal,
user_aliceenvía un trabajo de larga duración con el valor predeterminadoqos1. Empieza a ejecutarse (R). - En una segunda terminal,
user_aliceenvía un trabajo grande con la calidad de servicio urgente (sbatch --qos=qos_urgent ...). - En cuestión de segundos, el estado del primer trabajo cambia de en ejecución (R) a pendiente (
PD) con el motivo (Preempted). A continuación, se inicia el trabajo urgente.
¡Listo! Has configurado un sistema en el que el trabajo de alta prioridad desplaza automáticamente al de baja prioridad.
Resumen y próximos pasos
En este tutorial, has aprendido a usar las funciones de contabilidad jerárquica de Slurm para controlar de forma granular un clúster compartido. Ahora puedes:
- Definir límites globales: usa cuentas para definir cuotas de recursos totales para equipos enteros.
- Aplicar reglas por trabajo: usa QoS para controlar el tamaño y la prioridad de los trabajos individuales.
- Crear anulaciones específicas: aplica una calidad del servicio diferente a un usuario para tener un control más preciso.
- Garantizar la prioridad: configura la preferencia para asegurarte de que las cargas de trabajo críticas siempre se puedan ejecutar.
Este modelo por capas proporciona una forma flexible y potente de gestionar los recursos del clúster de forma justa y eficiente. Para obtener configuraciones aún más avanzadas, consulta la documentación oficial de Slurm.