Slurmplanification basée sur la mémoire - AWS ParallelCluster

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=yesdans le Slurmcgroup.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_NODEoption 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-cpuou --mem-per-gpu. Ces options peuvent entraîner un comportement différent de celui décrit dans la Slurmdocumentation.

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 DefMemPerNodesi aucune spécification de mémoire n'est fournie au moment de la soumission de la tâche. La valeur par défaut de ce paramètre est 0 et indique un accès illimité à la mémoire d'un nœud.

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, au niveau du cluster ou de la partition dans les fichiers Slurm de configuration afin d'empêcher ce comportement.

Slurm RealMemory et AWS ParallelCluster SchedulableMemory

Avec la Slurm configuration fournie avec AWS ParallelCluster, est Slurm interprétée comme RealMemoryétant la quantité de mémoire disponible pour les tâches par nœud. À partir de la version 3.2.0, la valeur par défaut AWS ParallelCluster est définie RealMemory sur 95 % de la mémoire répertoriée dans les types d'instances Amazon EC2 et renvoyée par l'API Amazon EC2. DescribeInstanceTypes

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 RealMemoryvaleur. Pour plus d’informations, consultez 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.