Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Slurmplanification basée sur la mémoire
À partir de la version 3.2.0, AWS ParallelCluster prend en charge la planification Slurm basée sur la mémoire avec le paramètre de configuration SlurmSettings/EnableMemoryBasedSchedulingcluster.
Note
À partir de AWS ParallelCluster la version 3.7.0, elle EnableMemoryBasedScheduling
peut être activée si vous configurez plusieurs types d'instances dans Instances.
Pour AWS ParallelCluster les versions 3.2.0 à 3.6. x
, ne EnableMemoryBasedScheduling
peut pas être activé si vous configurez plusieurs types d'instances dans Instances.
Avertissement
Lorsque vous spécifiez plusieurs types d'instances dans une ressource de calcul de Slurm file d'attente avec EnableMemoryBasedScheduling
Activé, la RealMemory
valeur est la quantité minimale de mémoire disponible pour tous les types d'instances. Cela peut entraîner d'importantes quantités de mémoire inutilisées si vous spécifiez des types d'instances dotés de capacités de mémoire très différentes.
AvecEnableMemoryBasedScheduling: true
, le Slurm planificateur suit la quantité de mémoire requise par chaque tâche sur chaque nœud. Le Slurm planificateur utilise ensuite ces informations pour planifier plusieurs tâches sur le même nœud de calcul. La quantité totale de mémoire requise par les tâches sur un nœud ne peut pas être supérieure à la mémoire disponible du nœud. Le planificateur empêche une tâche d'utiliser plus de mémoire que ce qui a été demandé lors de la soumission de la tâche.
AvecEnableMemoryBasedScheduling: false
, les tâches peuvent se disputer la mémoire sur un nœud partagé et provoquer des échecs et out-of-memory
des événements.
Avertissement
Slurmutilise une notation de puissance 2 pour ses étiquettes, telles que MB ou GB. Lisez ces étiquettes sous la forme MiB et GiB, respectivement.
Slurmconfiguration et planification basée sur la mémoire
AvecEnableMemoryBasedScheduling: true
, Slurm définit les paramètres Slurm de configuration suivants :
-
SelectTypeParameters=CR_CPU_Memory
dans le slurm.conf
. Cette option configure la mémoire du nœud comme une ressource consommable dans. Slurm -
ConstrainRAMSpace=yes
dans le Slurm cgroup.conf
. Avec cette option, l'accès à la mémoire d'une tâche est limité à la quantité de mémoire demandée lors de son envoi.
Note
Plusieurs autres paramètres Slurm de configuration peuvent avoir un impact sur le comportement du Slurm planificateur et du gestionnaire de ressources lorsque ces deux options sont définies. Pour de plus amples d'informations, consultez la documentationSlurm
Slurmplanificateur et planification basée sur la mémoire
EnableMemoryBasedScheduling: false
(par défaut)
Par défaut, EnableMemoryBasedScheduling
est défini sur false. Lorsque la valeur est fausse, Slurm elle n'inclut pas la mémoire en tant que ressource dans son algorithme de planification et ne suit pas la mémoire utilisée par les tâches. Les utilisateurs peuvent spécifier l'--mem MEM_PER_NODE
option permettant de définir la quantité minimale de mémoire par nœud requise par une tâche. Cela oblige le planificateur à choisir des nœuds avec une RealMemory
valeur d'au moins égale à MEM_PER_NODE
lors de la planification de la tâche.
Supposons, par exemple, qu'un utilisateur soumette deux tâches avec--mem=5GB
. Si les ressources demandées, telles que des processeurs ou des GPU, sont disponibles, les tâches peuvent être exécutées simultanément sur un nœud doté de 8 GiB de mémoire. Les deux tâches ne sont pas planifiées sur des nœuds de calcul de moins de 5 GiB de. RealMemory
Avertissement
Lorsque la planification basée sur la mémoire est désactivée, Slurm elle ne suit pas la quantité de mémoire utilisée par les tâches. Les tâches exécutées sur le même nœud peuvent se disputer les ressources de mémoire et entraîner l'échec de l'autre tâche.
Lorsque la planification basée sur la mémoire est désactivée, nous recommandons aux utilisateurs de ne pas spécifier les options --mem-per-cpu
--mem-per-gpu
EnableMemoryBasedScheduling: true
Lorsque EnableMemoryBasedScheduling
ce paramètre est défini sur true, Slurm suit l'utilisation de la mémoire de chaque tâche et empêche les tâches d'utiliser plus de mémoire que ce qui est demandé avec les options de --mem
soumission.
Dans l'exemple précédent, un utilisateur soumet deux tâches avec--mem=5GB
. Les tâches ne peuvent pas être exécutées en même temps sur un nœud doté de 8 GiB de mémoire. Cela est dû au fait que la quantité totale de mémoire requise est supérieure à la mémoire disponible sur le nœud.
Lorsque la planification basée sur la mémoire est activée, --mem-per-cpu
--mem-per-gpu
comportez-vous conformément à ce qui est décrit dans la Slurm documentation. Par exemple, une tâche est soumise avec--ntasks-per-node=2 -c 1 --mem-per-cpu=2GB
. Dans ce cas, Slurm attribue à la tâche un total de 4 GiB pour chaque nœud.
Avertissement
Lorsque la planification basée sur la mémoire est activée, nous recommandons aux utilisateurs d'inclure une --mem
spécification lors de la soumission d'une tâche. Avec la Slurm configuration par défaut incluse dans AWS ParallelCluster, si aucune option de mémoire n'est incluse (--mem
,--mem-per-cpu
, ou--mem-per-gpu
), Slurm affecte la totalité de la mémoire des nœuds alloués à la tâche, même si elle ne demande qu'une partie des autres ressources, telles que les processeurs ou les GPU. Cela empêche efficacement le partage de nœuds tant que la tâche n'est pas terminée, car aucune mémoire n'est disponible pour les autres tâches. Cela se produit car Slurm définit la mémoire par nœud pour la tâche comme DefMemPerNode
Si plusieurs types de ressources informatiques avec différentes quantités de mémoire sont disponibles dans la même file d'attente, une tâche soumise sans options de mémoire peut se voir attribuer différentes quantités de mémoire sur différents nœuds. Cela dépend des nœuds que le planificateur met à la disposition de la tâche. Les utilisateurs peuvent définir une valeur personnalisée pour les options, telles que DefMemPerNode
ou DefMemPerCPU
Slurm RealMemory et AWS ParallelCluster SchedulableMemory
Avec la Slurm configuration fournie avec AWS ParallelCluster, est Slurm interprétée comme RealMemoryRealMemory
sur 95 % de la mémoire répertoriée dans les types d'instances Amazon EC2
Lorsque la planification basée sur la mémoire est désactivée, le Slurm planificateur filtre les nœuds lorsque RealMemory
les utilisateurs soumettent une tâche avec une valeur spécifiée. --mem
Lorsque la planification basée sur la mémoire est activée, le Slurm planificateur interprète comme étant RealMemory
la quantité maximale de mémoire disponible pour les tâches exécutées sur le nœud de calcul.
Le paramètre par défaut n'est peut-être pas optimal pour tous les types d'instances :
-
Ce paramètre peut être supérieur à la quantité de mémoire à laquelle les nœuds peuvent réellement accéder. Cela peut se produire lorsque les nœuds de calcul sont de petits types d'instances.
-
Ce paramètre peut être inférieur à la quantité de mémoire à laquelle les nœuds peuvent réellement accéder. Cela peut se produire lorsque les nœuds de calcul sont des types d'instances de grande taille et peuvent entraîner une quantité importante de mémoire inutilisée.
Vous pouvez utiliser SlurmQueues/ComputeResources/SchedulableMemorypour affiner la valeur de RealMemory
configure by AWS ParallelCluster pour les nœuds de calcul. Pour remplacer la valeur par défaut, définissez une valeur personnalisée SchedulableMemory
spécifiquement adaptée à la configuration de votre cluster.
Pour vérifier la mémoire réellement disponible d'un nœud de calcul, exécutez la /opt/slurm/sbin/slurmd -C
commande sur le nœud. Cette commande renvoie la configuration matérielle du nœud, y compris la RealMemory
slurmd
-C
Assurez-vous que les processus du système d'exploitation du nœud de calcul disposent de suffisamment de mémoire. Pour ce faire, limitez la mémoire disponible pour les tâches en définissant SchedulableMemory
une valeur inférieure à la RealMemory
valeur renvoyée par la slurmd -C
commande.