Slurmpianificazione basata sulla memoria - AWS ParallelCluster

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Slurmpianificazione basata sulla memoria

A partire dalla versione 3.2.0, AWS ParallelCluster supporta la pianificazione Slurm basata sulla memoria con il parametro di configurazione/cluster. SlurmSettingsEnableMemoryBasedScheduling

avvertimento

Quando specifichi più tipi di istanze in una risorsa di calcolo della Slurm coda con EnableMemoryBasedScheduling enabled, il RealMemory valore è la quantità minima di memoria disponibile per tutti i tipi di istanze. Ciò potrebbe comportare una notevole quantità di memoria inutilizzata se si specificano tipi di istanze con capacità di memoria molto diverse.

ConEnableMemoryBasedScheduling: true, lo Slurm scheduler tiene traccia della quantità di memoria richiesta da ciascun processo su ciascun nodo. Quindi, lo Slurm scheduler utilizza queste informazioni per pianificare più lavori sullo stesso nodo di elaborazione. La quantità totale di memoria richiesta dai job su un nodo non può essere maggiore della memoria disponibile del nodo. Lo scheduler impedisce a un processo di utilizzare più memoria di quella richiesta al momento dell'invio del lavoro.

ConEnableMemoryBasedScheduling: false, i job potrebbero competere per la memoria su un nodo condiviso e causare errori ed out-of-memory eventi.

avvertimento

Slurmutilizza una notazione di potenza 2 per le sue etichette, ad esempio MB o GB. Leggi queste etichette come MiB e GiB, rispettivamente.

Slurmconfigurazione e pianificazione basata sulla memoria

ConEnableMemoryBasedScheduling: true, Slurm imposta i seguenti parametri di configurazione: Slurm

  • SelectTypeParameters=CR_CPU_Memory nella slurm.conf. Questa opzione configura la memoria del nodo come risorsa consumabile in. Slurm

  • ConstrainRAMSpace=yesnel. Slurm cgroup.conf Con questa opzione, l'accesso di un processo alla memoria è limitato alla quantità di memoria richiesta dal lavoro al momento dell'invio.

Nota

Diversi altri parametri di Slurm configurazione possono influire sul comportamento dello Slurm scheduler e del gestore delle risorse quando queste due opzioni sono impostate. Per ulteriori informazioni, consulta la documentazione di Slurm.

Slurmscheduler e pianificazione basata sulla memoria

EnableMemoryBasedScheduling: false(impostazione predefinita)

Per impostazione predefinita, EnableMemoryBasedScheduling è impostato su false. Se false, Slurm non include la memoria come risorsa nel suo algoritmo di pianificazione e non tiene traccia della memoria utilizzata dai job. Gli utenti possono specificare l'--mem MEM_PER_NODEopzione per impostare la quantità minima di memoria per nodo richiesta da un processo. Ciò impone allo scheduler di scegliere nodi con un RealMemory valore almeno pari a 1 MEM_PER_NODE durante la pianificazione del lavoro.

Ad esempio, supponiamo che un utente invii due lavori con. --mem=5GB Se sono disponibili risorse richieste come CPU o GPU, i processi possono essere eseguiti contemporaneamente su un nodo con 8 GiB di memoria. I due processi non sono pianificati su nodi di calcolo con meno di 5 RealMemory GiB di.

avvertimento

Quando la pianificazione basata sulla memoria è disabilitata, Slurm non tiene traccia della quantità di memoria utilizzata dai processi. I lavori eseguiti sullo stesso nodo potrebbero competere per le risorse di memoria e causare il fallimento dell'altro processo.

Quando la pianificazione basata sulla memoria è disabilitata, consigliamo agli utenti di non specificare le --mem-per-cpuopzioni o. --mem-per-gpu Queste opzioni potrebbero causare un comportamento diverso da quello descritto nella documentazione di Slurm.

EnableMemoryBasedScheduling: true

Quando EnableMemoryBasedScheduling è impostato su true, Slurm tiene traccia dell'utilizzo della memoria di ogni lavoro e impedisce ai lavori di utilizzare più memoria di quella richiesta con le --mem opzioni di invio.

Utilizzando l'esempio precedente, un utente invia due lavori con. --mem=5GB I processi non possono essere eseguiti contemporaneamente su un nodo con 8 GiB di memoria. Questo perché la quantità totale di memoria richiesta è maggiore della memoria disponibile sul nodo.

Con la pianificazione basata sulla memoria abilitata --mem-per-cpu e --mem-per-gpu comportati in modo coerente con quanto descritto nella documentazione. Slurm Ad esempio, un lavoro viene inviato con. --ntasks-per-node=2 -c 1 --mem-per-cpu=2GB In questo caso, Slurm assegna al job un totale di 4 GiB per ogni nodo.

avvertimento

Quando la pianificazione basata sulla memoria è abilitata, consigliamo agli utenti di includere una --mem specifica quando inviano un lavoro. Con la Slurm configurazione predefinita inclusa in AWS ParallelCluster, se non è inclusa alcuna opzione di memoria (--mem, o--mem-per-gpu)--mem-per-cpu, Slurm assegna l'intera memoria dei nodi allocati al job, anche se richiede solo una parte delle altre risorse, come CPU o GPU. Ciò impedisce efficacemente la condivisione dei nodi fino al termine del lavoro, poiché non è disponibile memoria per altri lavori. Ciò accade perché Slurm imposta la memoria per nodo per il lavoro su DefMemPerNodequando non vengono fornite specifiche di memoria al momento dell'invio del lavoro. Il valore predefinito per questo parametro è 0 e specifica l'accesso illimitato alla memoria di un nodo.

Se nella stessa coda sono disponibili più tipi di risorse di calcolo con diverse quantità di memoria, a un lavoro inviato senza opzioni di memoria potrebbero essere assegnate quantità di memoria diverse su nodi diversi. Dipende dai nodi che lo scheduler mette a disposizione del job. Gli utenti possono definire un valore personalizzato per le opzioni, ad esempio DefMemPerNode or DefMemPerCPU, a livello di cluster o di partizione nei file di Slurm configurazione per evitare questo comportamento.

Slurm RealMemory e AWS ParallelCluster SchedulableMemory

Con la Slurm configurazione fornita AWS ParallelCluster, viene Slurm RealMemoryinterpretata come la quantità di memoria per nodo disponibile per i lavori. A partire dalla versione 3.2.0, RealMemory per impostazione predefinita, è AWS ParallelCluster impostato sul 95 percento della memoria elencata nei tipi di istanza Amazon EC2 e restituita dai tipi di API Amazon EC2. DescribeInstance

Quando la pianificazione basata sulla memoria è disabilitata, lo Slurm scheduler utilizza RealMemory per filtrare i nodi quando gli utenti inviano un lavoro con specificazioni specifiche. --mem

Quando la pianificazione basata sulla memoria è abilitata, lo Slurm scheduler interpreta come la quantità massima di memoria disponibile RealMemory per i lavori in esecuzione sul nodo di calcolo.

L'impostazione predefinita potrebbe non essere ottimale per tutti i tipi di istanze:

  • Questa impostazione potrebbe essere superiore alla quantità di memoria a cui i nodi possono effettivamente accedere. Ciò può accadere quando i nodi di calcolo sono tipi di istanze di piccole dimensioni.

  • Questa impostazione potrebbe essere inferiore alla quantità di memoria a cui i nodi possono effettivamente accedere. Ciò può verificarsi quando i nodi di calcolo sono tipi di istanze di grandi dimensioni e può portare a una notevole quantità di memoria inutilizzata.

È possibile utilizzare SlurmQueues/ComputeResources/SchedulableMemoryper ottimizzare il valore di configure by AWS ParallelCluster per i nodi di RealMemory calcolo. Per sostituire il valore predefinito, definisci un valore personalizzato SchedulableMemory specifico per la configurazione del cluster.

Per verificare la memoria effettiva disponibile di un nodo di calcolo, esegui il /opt/slurm/sbin/slurmd -C comando sul nodo. Questo comando restituisce la configurazione hardware del nodo, incluso il RealMemoryvalore. Per ulteriori informazioni, consulta slurmd -C.

Assicurati che i processi del sistema operativo del nodo di calcolo dispongano di memoria sufficiente. A tale scopo, limita la memoria disponibile per i job impostando il SchedulableMemory valore su un RealMemory valore inferiore a quello restituito dal slurmd -C comando.