Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Léame del proyecto de clúster de CycleCloud Slurm
Slurm es un administrador de cargas de trabajo de código abierto altamente configurable. Para obtener más información, consulte la información general sobre el sitio del proyecto Slurm.
Nota:
A partir de CycleCloud 8.4.0, reescribimos la integración de Slurm para admitir nuevas características y funcionalidades. Para obtener más información, consulte la documentación de Slurm 3.0 .
Para habilitar Slurm en un clúster de CycleCloud, modifique el "run_list", disponible en la sección de configuración de la definición del clúster. Un clúster de Slurm tiene dos partes principales: el nodo maestro (o programador), que ejecuta el software Slurm en un sistema de archivos compartido y los nodos ejecutados, que montan ese sistema de archivos y ejecutan los trabajos enviados. Por ejemplo, un fragmento de código de plantilla de clúster simple puede tener el siguiente aspecto:
[cluster custom-slurm]
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:master]]]
[[[configuration]]]
run_list = role[slurm_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_master_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
Para habilitar Slurm en un clúster de CycleCloud, modifique en run_list la sección de configuración de la definición del clúster. Un clúster de Slurm tiene dos partes principales: el nodo del programador, que proporciona un sistema de archivos compartido y ejecuta el software Slurm y los nodos de ejecución, que montan el sistema de archivos compartido y ejecutan los trabajos enviados. Por ejemplo, un fragmento de código de plantilla de clúster simple podría tener el siguiente aspecto:
[cluster custom-slurm]
[[node scheduler]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:scheduler]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
Edición de clústeres de Slurm existentes
Los clústeres de Slurm que se ejecutan en CycleCloud versiones 7.8 y posteriores usan una versión actualizada de las API de escalado automático que permite a los clústeres usar varias matrices de nodos y particiones. Para que esta funcionalidad funcione en Slurm, CycleCloud rellena previamente los nodos ejecutados en el clúster. Debido a esta prepoblación, debe ejecutar un comando en el nodo planificador de Slurm después de realizar cambios en el clúster, como cambiar los límites de escalado automático o los tipos de máquina virtual.
Realización de cambios en el clúster
El clúster de Slurm implementado en CycleCloud contiene un script que facilita los cambios. Después de realizar cambios en el clúster, ejecute el siguiente comando como raíz (por ejemplo, ejecutando sudo -i) en el nodo programador de Slurm para recompilar el slurm.conf archivo y actualizar los nodos del clúster:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Nota:
Para las versiones de CycleCloud anteriores a la versión 7.9.10, el cyclecloud_slurm.sh script se encuentra en /opt/cycle/jetpack/system/bootstrap/slurm.
Importante
Si realiza algún cambio que afecte a las máquinas virtuales de los nodos de una partición de MPI (como el tamaño de máquina virtual, la imagen o cloud-init), primero debe finalizar todos los nodos.
El remove_nodes comando imprime una advertencia en este caso, pero no sale con un error.
Si cambia las máquinas virtuales de los nodos de una partición de MPI (por ejemplo, el tamaño de la máquina virtual, la imagen o cloud-init) mientras se ejecutan los nodos, los nodos nuevos no se pueden iniciar y verá el error This node doesn't match existing scaleset attribute.
/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes
Nota:
Para las versiones de CycleCloud < 8.2, el script de cyclecloud_slurm.sh se encuentra en /opt/cycle/jetpack/system/bootstrap/slurm.
Si cambia las máquinas virtuales de los nodos de una partición de MPI (por ejemplo, el tamaño de la máquina virtual, la imagen o cloud-init) mientras se ejecutan los nodos, los nodos nuevos no se pueden iniciar y verá el error This node doesn't match existing scaleset attribute. Por este motivo, el apply_changes comando garantiza que los nodos finalizan. Si los nodos no finalizan, se produce un error en el comando con este mensaje de error: Los nodos siguientes deben finalizar completamente antes de aplicar los cambios.
Si va a realizar un cambio que no afecta a las propiedades de la máquina virtual para los nodos MPI, no es necesario finalizar primero los nodos en ejecución. En este caso, puede realizar los cambios mediante estos dos comandos:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Nota:
El apply_changes comando solo está disponible en CycleCloud 8.3+. En versiones anteriores, debe usar los remove_nodes comandos y scale para realizar un cambio. Asegúrese de que el remove_nodes comando no imprime una advertencia sobre los nodos que deben finalizarse.
Creación de particiones complementarias
La plantilla predeterminada que se incluye con Azure CycleCloud tiene dos particiones (hpc y htc) y puede definir matrices de nodos personalizadas que se asignan directamente a particiones de Slurm. Por ejemplo, para crear una partición de GPU, agregue la siguiente sección a la plantilla de clúster:
[[nodearray gpu]]
MachineType = $GPUMachineType
ImageName = $GPUImageName
MaxCoreCount = $MaxGPUExecuteCoreCount
Interruptible = $GPUUseLowPrio
AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs
[[[configuration]]]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = false
[[[cluster-init cyclecloud/slurm:execute:2.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
Configuración de memoria
CycleCloud establece automáticamente la cantidad de memoria disponible para que Slurm se use con fines de programación. Dado que la memoria disponible puede variar ligeramente debido a las opciones del kernel de Linux, y el sistema operativo y la máquina virtual usan una pequeña cantidad de memoria, CycleCloud reduce automáticamente el valor de memoria en la configuración de Slurm. De forma predeterminada, CycleCloud conserva 5% de la memoria disponible reportada en una máquina virtual, pero puede sobrescribir este valor en la plantilla de clúster estableciendo slurm.dampen_memory en el porcentaje de memoria que se va a retener. Por ejemplo, para retener un 20 % de memoria de una máquina virtual:
slurm.dampen_memory=20
Deshabilitación del escalado automático para nodos o particiones específicos
Aunque la característica integrada CycleCloud "KeepAlive" no funciona actualmente para los clústeres de Slurm, puede deshabilitar la escalabilidad automática para un clúster de Slurm en ejecución editando el archivo slurm.conf directamente. Puede excluir nodos individuales o particiones completas de la escalabilidad automática.
Exclusión de un nodo
Para excluir uno o varios nodos del escalado automático, agregue SuspendExcNodes=<listofnodes> al archivo de configuración de Slurm. Por ejemplo, para excluir los nodos 1 y 2 de la hpc partición, agregue el código siguiente a /sched/slurm.conf:
SuspendExcNodes=hpc-pg0-[1-2]
A continuación, reinicie el servicio slurmctld para que la nueva configuración surta efecto.
Exclusión de una partición
Para excluir particiones completas del escalado automático, use un proceso similar para excluir nodos. Para excluir la partición hpc completa, agregue el siguiente código a /sched/slurm.conf:
SuspendExcParts=hpc
A continuación, reinicie el servicio slurmctld.
Solución de problemas
Conflictos de UID para los usuarios de Slurm y munge
De forma predeterminada, este proyecto usa un UID y GID de 11100 para el usuario de Slurm y 11101 para el usuario munge. Si estos valores predeterminados provocan un conflicto con otro usuario o grupo, puede invalidarlos.
Para invalidar los valores UID y GID, seleccione el botón editar para ambos nodos scheduler :
Y la nodearray execute: 
Agregue los siguientes atributos a la sección Configuration: 
slurm.user.name = slurm
slurm.user.uid = 11100
slurm.user.gid = 11100
munge.user.name = munge
munge.user.uid = 11101
munge.user.gid = 11101
Escalado automático
CycleCloud usa la característica Elastic Computing de Slurm. Para depurar problemas de escalado automático, compruebe algunos registros en el nodo del programador. En primer lugar, asegúrese de que se están produciendo llamadas de reanudación de ahorro de energía comprobando /var/log/slurmctld/slurmctld.log. Debería ver líneas como:
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
Compruebe /var/log/slurmctld/resume.log. Si se produce un error en el paso de reanudación, compruebe /var/log/slurmctld/resume_fail.log. Si ve mensajes sobre nombres de nodo desconocidos o no válidos, asegúrese de seguir los pasos descritos en la sección "Realizar cambios en el clúster" antes de agregar nodos al clúster.
Referencia de configuración de Slurm
En la tabla siguiente se describen las opciones de configuración específicas de Slurm que puede alternar para personalizar la funcionalidad:
| Opciones de configuración específicas de Slurm | Descripción |
|---|---|
| slurm.version | Predeterminado: 18.08.7-1. Establece la versión de Slurm para instalar y ejecutar. Actualmente, es la versión predeterminada y la única disponible. Es posible que se admita más versiones en el futuro. |
| slurm.autoscale | Predeterminado: false. Una configuración por matriz de nodos que controla si Slurm detiene e inicia automáticamente los nodos dentro de esta matriz de nodos. |
| slurm.hpc | Predeterminado: true. Una configuración por matriz de nodos que controla si los nodos en la matriz de nodos están en el mismo grupo de ubicación. Se usa principalmente para matrices de nodos que usan familias de máquinas virtuales con InfiniBand. Solo se aplica cuando slurm.autoscale se establece en true. |
| slurm.default_partition | Predeterminado: false. Una configuración para cada nodoarray que determina si el nodoarray debe ser la partición predeterminada para los trabajos que no especifican una partición explícitamente. |
| slurm.dampen_memory | Predeterminado: 5. Porcentaje de memoria que se va a retener para la sobrecarga del sistema operativo o la máquina virtual. |
| slurm.suspend_timeout | Predeterminado: 600. Cantidad de tiempo en segundos entre una llamada de suspensión y cuándo se puede volver a usar ese nodo. |
| slurm.resume_timeout | Predeterminado: 1800. Cantidad de tiempo en segundos para esperar a que un nodo arranque correctamente. |
| slurm.install | Predeterminado: true. Determina si Slurm está instalado en el arranque del nodo (true). Si instala Slurm en una imagen personalizada, establezca esta opción de configuración en false (versión de proj 2.5.0+). |
| slurm.use_pcpu | Predeterminado: true. Una configuración por nodearray para controlar la programación con vCPU hiperthreaded. Establezca en false para establecer CPUs=vcpus en cyclecloud.conf. |
| slurm.user.name | Predeterminado: slurm. Nombre de usuario del servicio Slurm que se va a usar. |
| slurm.user.uid | Predeterminado: 11100. Identificador de usuario que se va a usar para el usuario de Slurm. |
| slurm.user.gid | Predeterminado: 11100. Identificador de grupo que se va a usar para el usuario de Slurm. |
| munge.user.name | Predeterminado: munge. Nombre de usuario del servicio de autenticación MUNGE que se va a usar. |
| munge.user.uid | Predeterminado: 11101. Identificador de usuario que se va a usar para el usuario MUNGE. |
| munge.user.gid | Predeterminado: 11101. Identificador de grupo para el usuario MUNGE. |
CycleCloud admite un conjunto estándar de atributos de detención automática en los planificadores.
| Atributo | Descripción |
|---|---|
| cyclecloud.cluster.autoscale.stop_enabled | Habilitar la función de autostop en este nodo. [verdadero/falso] |
| cyclecloud.cluster.autoscale.idle_time_after_jobs | Cantidad de tiempo (en segundos) para que un nodo se quede inactivo después de completar sus trabajos antes de que se detenga automáticamente. |
| cyclecloud.cluster.autoscale.idle_time_before_jobs | Cantidad de tiempo (en segundos) para que un nodo permanezca inactivo antes de completar las tareas y antes de que se detenga automáticamente. |