Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Slurm programación basada en memoria
A partir de la versión 3.2.0, AWS ParallelCluster admite la programación Slurm basada en memoria con el parámetro de configuración SlurmSettings/EnableMemoryBasedSchedulingcluster.
nota
Para AWS ParallelCluster las versiones 3.2.0 a 3.6. x
, no se EnableMemoryBasedScheduling
puede habilitar si configuras varios tipos de instancias en Instances.
aviso
Cuando especificas varios tipos de instancias en un recurso de cómputo de Slurm cola con la EnableMemoryBasedScheduling
opción habilitada, el RealMemory
valor es la cantidad mínima de memoria disponible para todos los tipos de instancias. Si especificas tipos de instancias con capacidades de memoria muy diferentes, esto podría provocar que se desperdicie una cantidad significativa de memoria.
Con EnableMemoryBasedScheduling: true
, el programador Slurm realiza un seguimiento de la cantidad de memoria que requiere cada trabajo en cada nodo. A continuación, el programador de Slurm utiliza esta información para programar varios trabajos en el mismo nodo de computación. La cantidad total de memoria que requieren los trabajos en un nodo no puede ser mayor que la memoria de nodo disponible. El programador evita que un trabajo utilice más memoria de la que se solicitó cuando se envió el trabajo.
Con EnableMemoryBasedScheduling: false
, los trabajos podrían competir por la memoria en un nodo compartido y provocar errores y out-of-memory
eventos en los trabajos.
aviso
Slurm utiliza una notación de potencia de 2 para sus etiquetas, como MB o GB. Lea estas etiquetas como MiB y GiB, respectivamente.
Slurm programación basada en la configuración y en la memoria
Con EnableMemoryBasedScheduling: true
, Slurm establece los siguientes parámetros de Slurm configuración:
-
SelectTypeParameters=CR_CPU_Memory
en la slurm.conf
. Esta opción configura la memoria del nodo para que sea un recurso consumible Slurm. -
ConstrainRAMSpace=yes
en Slurm. cgroup.conf
Con esta opción, el acceso de un trabajo a la memoria se limita a la cantidad de memoria que el trabajo solicitó al enviarse.
nota
Otros parámetros Slurm de configuración pueden afectar al comportamiento del Slurm programador y del administrador de recursos cuando se configuran estas dos opciones. Para obtener más información, consulte la documentación de Slurm
Slurm programador y programación basada en memoria
EnableMemoryBasedScheduling: false
(predeterminado)
De forma predeterminada, EnableMemoryBasedScheduling
se establece en "false". Si es falsa, Slurm no incluye la memoria como recurso en su algoritmo de programación y no rastrea la memoria que utilizan los trabajos. Los usuarios pueden especificar la --mem MEM_PER_NODE
opción de establecer la cantidad mínima de memoria por nodo que requiere un trabajo. Esto obliga al programador a elegir nodos con un RealMemory
valor de al menos MEM_PER_NODE
al programar el trabajo.
Por ejemplo, supongamos que un usuario envía dos trabajos con --mem=5GB
. Si los recursos solicitados, como CPU o GPU, están disponibles, los trabajos se pueden ejecutar al mismo tiempo en un nodo con 8 GiB de memoria. Los dos trabajos no están programados en nodos de procesamiento con menos de 5 GiB de RealMemory
.
aviso
Cuando la programación basada en memoria está deshabilitada, Slurm no registra la cantidad de memoria que utilizan los trabajos. Los trabajos que se ejecutan en el mismo nodo pueden competir por los recursos de memoria y provocar que el otro trabajo falle.
Cuando la programación basada en memoria está deshabilitada, se recomienda a los usuarios que no especifiquen las opciones --mem-per-cpu
--mem-per-gpu
EnableMemoryBasedScheduling: true
Cuando EnableMemoryBasedScheduling
se establece en “true”, Slurm realiza un seguimiento del uso de memoria de cada trabajo e impide que los trabajos consuman más memoria de la solicitada con las opciones de --mem
envío.
En el ejemplo anterior, un usuario envía dos trabajos con--mem=5GB
. Los trabajos no se pueden ejecutar al mismo tiempo en un nodo con 8 GiB de memoria. Esto se debe a que la cantidad total de memoria necesaria es mayor que la memoria disponible en el nodo.
Con la programación basada en memoria habilitada --mem-per-cpu
y --mem-per-gpu
compórtese de forma coherente con lo que se describe en la documentación de Slurm. Por ejemplo, un trabajo se envía con --ntasks-per-node=2 -c 1 --mem-per-cpu=2GB
. En este caso, Slurm asigna al trabajo un total de 4 GiB para cada nodo.
aviso
Cuando la programación basada en memoria está habilitada, recomendamos que los usuarios incluyan una especificación --mem
al enviar un trabajo. Con la Slurm configuración predeterminada incluida AWS ParallelCluster, si no se incluye ninguna opción de memoria (--mem
, o--mem-per-gpu
)--mem-per-cpu
, Slurm asigna toda la memoria de los nodos asignados a la tarea, incluso si solo solicita una parte de los demás recursos, como las CPU o las GPU. De esta forma, se evita que se compartan nodos hasta que finalice el trabajo, ya que no hay memoria disponible para otros trabajos. Esto sucede porque Slurm establece la memoria por nodo para el trabajo a DefMemPerNode
Si hay varios tipos de recursos informáticos con diferentes cantidades de memoria disponibles en la misma cola, es posible que a un trabajo enviado sin opciones de memoria se le asignen diferentes cantidades de memoria en distintos nodos. Esto depende de los nodos que el programador ponga a disposición del trabajo. Los usuarios pueden definir un valor personalizado para las opciones, como DefMemPerNode
o DefMemPerCPU
Slurm RealMemory y AWS ParallelCluster SchedulableMemory
Con la Slurm configuración incluida AWS ParallelCluster, se Slurm interpreta como RealMemoryRealMemory
en el 95 por ciento de la memoria que aparece en los tipos de instancias de Amazon EC2
Cuando la programación basada en memoria está deshabilitada, el Slurm programador se utiliza RealMemory
para filtrar los nodos cuando los usuarios envían un trabajo según lo especificado. --mem
Cuando la programación basada en memoria está habilitada, el Slurm programador interpreta que es la cantidad máxima de memoria disponible RealMemory
para los trabajos que se ejecutan en el nodo de cómputo.
Es posible que la configuración predeterminada no sea óptima para todos los tipos de instancias:
-
Esta configuración puede ser superior a la cantidad de memoria a la que realmente pueden acceder los nodos. Esto puede suceder cuando los nodos de cómputo son tipos de instancias pequeñas.
-
Esta configuración puede ser superior a la cantidad de memoria a la que realmente pueden acceder los nodos. Esto puede ocurrir cuando los nodos de cómputo son tipos de instancias grandes y puede generar una cantidad significativa de memoria no utilizada.
Puede usar SlurmQueues/ComputeResources/SchedulableMemorypara ajustar el valor de RealMemory
configure by para los nodos de cómputo. AWS ParallelCluster Para anular el valor predeterminado, defina un valor personalizado específico para SchedulableMemory
para la configuración de su clúster.
Para comprobar la memoria disponible real de un nodo de cómputo, ejecuta el /opt/slurm/sbin/slurmd -C
comando en el nodo. Este comando devuelve la configuración de hardware del nodo, incluido el RealMemory
slurmd
-C
Asegúrese de que los procesos del sistema operativo del nodo de cómputo tengan suficiente memoria. Para ello, limite la memoria disponible para los trabajos configurando el SchedulableMemory
valor en un valor inferior al RealMemory
valor devuelto por el comando slurmd -C
.