Slurm programación basada en memoria - AWS ParallelCluster

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

A partir de AWS ParallelCluster la versión 3.7.0, se EnableMemoryBasedScheduling puede habilitar si configuras varios tipos de instancias en Instances.

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 o --mem-per-gpu. Estas opciones pueden provocar un comportamiento diferente al que se describe en la Slurmdocumentación.

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 en un momento en que no se proporcionan especificaciones de memoria en el momento de enviar el trabajo. El valor predeterminado de este parámetro es 0 y especifica un acceso ilimitado a la memoria de un nodo.

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, a nivel de clúster o partición, en los archivos de configuración Slurm para evitar este comportamiento.

Slurm RealMemory y AWS ParallelCluster SchedulableMemory

Con la Slurm configuración incluida AWS ParallelCluster, se Slurm interpreta como RealMemoryla cantidad de memoria por nodo disponible para las tareas. A partir de la versión 3.2.0, de forma predeterminada, se AWS ParallelCluster establece RealMemory en el 95 por ciento de la memoria que aparece en los tipos de instancias de Amazon EC2 y que devuelve la API de Amazon EC2. DescribeInstanceTypes

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 RealMemoryvalor. Para obtener más información, consulte 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.