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.
Slurm es un administrador de cargas de trabajo de código abierto altamente configurable. Para obtener más información, consulte el sitio de proyecto de Slurm de información general.
Nota:
A partir de CycleCloud 8.4.0, la integración de Slurm se reescribió 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
Slurm se puede habilitar fácilmente en un clúster de CycleCloud modificando la "run_list", disponible en la sección de configuración de la definición del clúster. Los dos componentes básicos de un clúster de Slurm son el nodo "scheduler", que proporciona un sistema de archivos compartido en el que se ejecuta el software Slurm y los nodos "execute" que son los hosts 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 puede 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 las versiones 7.8 de CycleCloud y versiones posteriores implementan una versión actualizada de las API de escalado automático que permite a los clústeres usar varias particiones y nodearrays. Para facilitar esta funcionalidad en Slurm, CycleCloud rellena previamente los nodos ejecutados en el clúster. Debido al rellenado previo, debe ejecutar un comando en el nodo programador de Slurm después de realizar cambios en el clúster, como 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, ejecuta el siguiente comando como root (por ejemplo, ejecutando sudo -i
) en el nodo administrador de Slurm para reconstruir slurm.conf
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 (por ejemplo, el tamaño de máquina virtual, la imagen o cloud-init), los nodos deben finalizarse todos primero.
El remove_nodes
comando imprime una advertencia en este caso, pero no sale con un error.
Si hay nodos en ejecución, obtendrá un error de This node doesn't match existing scaleset attribute
cuándo se inician los nuevos nodos.
/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 realiza cambios que afectan a las máquinas virtuales de los nodos de una partición de MPI (por ejemplo, el tamaño de máquina virtual, la imagen o cloud-init) y los nodos se están ejecutando, obtendrá un error This node doesn't match existing scaleset attribute
cuando se inician nuevos nodos. Por este motivo, el comando apply_changes
garantiza que los nodos se han finalizado y, en caso contrario, produce un error con el siguiente mensaje de error: Los nodos siguientes deben finalizarse por completo antes de aplicar los cambios.
Si va a realizar un cambio que no afecta a las propiedades de máquina virtual de 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 existe en CycleCloud 8.3+, por lo que la única manera de realizar un cambio en versiones anteriores es con los comandos de sobrecargaremove_nodes
+ scale
. 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 nodearrays personalizados que se asignan directamente a las 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 el 5 % de la memoria disponible notificada en una máquina virtual, pero este valor se puede invalidar 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, es posible 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 un nodo 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 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
La exclusión de particiones completas del escalado automático es similar a la exclusión de nodos. Para excluir toda la partición hpc
, agregue lo siguiente 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 esto provoca un conflicto con otro usuario o grupo, estos valores predeterminados se pueden invalidar.
Para invalidar UID y GID, haga clic en el botón editar para el nodo 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, hay algunos registros en el nodo del programador que puede comprobar. Lo primero es asegurarse de que se realizan las 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
El otro registro que se va a comprobar es /var/log/slurmctld/resume.log
. Si se produce un error en el paso de reanudación, hay /var/log/slurmctld/resume_fail.log
. Si hay mensajes sobre nombres de nodo desconocidos o no válidos, asegúrese de no agregar nodos al clúster sin seguir los pasos descritos en la sección "Realizar cambios en el clúster" anterior.
Referencia de configuración de Slurm
A continuación se muestran 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 | Valor predeterminado: "18.08.7-1" Esto establece la versión de Slurm para instalar y ejecutar. En este momento, es la opción predeterminada y única . Es posible que se admita más versiones en el futuro. |
slurm.autoscale | El valor predeterminado: "false" Una configuración específica de la agrupación de nodos que controla si Slurm debe detener e iniciar automáticamente los nodos en esta agrupación de nodos. |
slurm.hpc | Valor predeterminado: "true". Configuración por array de nodos que controla si los nodos del array de nodos se colocan en el mismo grupo de ubicación. Se usa principalmente para nodearrays mediante familias de máquinas virtuales con InfiniBand. Solo se aplica cuando slurm.autoscale se establece en "true". |
slurm.default_partition | El valor 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 | Valor predeterminado: "5" Porcentaje de memoria que se va a retener para la sobrecarga del sistema operativo o la máquina virtual. |
slurm.suspend_timeout | Valor 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 | Valor predeterminado: "1800" Cantidad de tiempo (en segundos) que se espera a que un nodo arranque correctamente. |
slurm.install | El valor predeterminado es "true". Determina si Slurm está instalado en el arranque del nodo ("true"). Si Slurm está instalado en una imagen personalizada, esta opción de configuración debe establecerse en "false" (versión proj 2.5.0+). |
slurm.use_pcpu | El valor predeterminado es "true". Una configuración por nodearray para controlar la programación con vcpus hiperthreaded. Establezca el valor en "false" para establecer CPU=vcpus en cyclecloud.conf. |
slurm.user.name | Valor predeterminado: "slurm". Nombre de usuario del servicio Slurm que se va a usar. |
slurm.user.uid | Valor predeterminado: "11100" Identificador de usuario que se va a usar para el usuario de Slurm. |
slurm.user.gid | Valor predeterminado: "11100" Identificador de grupo que se va a usar para el usuario de Slurm. |
munge.user.name | Valor predeterminado: "munge". Nombre de usuario del servicio de autenticación MUNGE que se va a usar. |
munge.user.uid | Valor predeterminado: "11101" Identificador de usuario que se va a usar para el usuario MUNGE. |
munge.user.gid | Valor predeterminado: "11101" Identificador de grupo que se va a usar 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 | ¿Está habilitado el autostop en este nodo? [verdadero/falso] |
cyclecloud.cluster.autoscale.tiempo_inactivo_después_de_tareas | Cantidad de tiempo (en segundos) que un nodo permanece inactivo después de completar los trabajos antes de reducirse verticalmente. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Cantidad de tiempo (en segundos) que un nodo permanece inactivo tras completar trabajos antes de ser reducido. |