~~SLIDESHOW theme=yatil level=4~~
====== Partitions de CALI-2, Feature ======
Cet article décrit deux des notions fondamentales de l'ordonnanceur de travaux //slurm// :
* les //partitions//
* les //features// qui vous permettent de contrôler finement le placement de vos travaux
===== Partitions =====
Une //partition// est un groupe de nœuds de calcul du cluster
* Les partitions peuvent se « chevaucher », un même nœud peut faire partie de plusieurs partitions
* Un job slurm ne peut s'exécuter que dans une seule partition
Les partitions sont utilisées :
* pour grouper des ressources de calcul à peu près "identiques", comme par exemple la partition avec des GPU
* pour placer des travaux qui ont des contraintes identiques, par exemple en temps d'exécution
* pour donner des priorités
Rappel : pour connaître les nœuds de calcul disponibles, consultez [[:materiel-cali2#noeuds_de_calcul | la page de description matérielle]]
Vous trouverez sur CALI :
* des partitions communes, ouvertes à tout chercheur
* des partitions dites //privatives//, restreintes à un laboratoire ou groupe de chercheurs
==== Partitions ouvertes à tout chercheur ====
=== Liste ====
^Partition ^Noeuds ^Durée max / job ^# noeuds max / job ^# CPU Max actives / User ^# Max Jobs actif (soumis) / User ^ Infiniband ^ Pré-emptible ? ^
^rapide |tous sauf GPU | 1 H| -| 32| 2 (10)| Selon placement | Selon placement |
^normal |tous sauf GPU | **2 J**| -| 256| - (400)| Selon placement | Selon placement |
^cluster |tous sauf GPU | 45 J| 1| 120| - (400)| Selon placement | Selon placement |
Pour ceux qui veulent en savoir plus, les //limites// ci-dessus sont imposées à travers plusieurs mécanismes :
* les limites des partitions proprement dites
* le choix d'une //QoS// utilisateur qui est faite __automatiquement__ lors de la soumission d'un travail
==== Quelle partition choisir ? ====
Le principe général est le suivant :
* pour la mise au point de code, jobs très courts : ''rapide''
* pour les jobs "normaux" : ''normal''
* point notable : **durée limitée à 2 jours**
* pour les jobs "longs" : ''cluster''
* point notable : limité à **un noeud max par job** (pas de job réparti sur plusieurs noeuds)
=== Danger des jobs longs (partition cluster) ===
Les jobs longs (plusieurs jours) sont à éviter autant que possible :
* Les nœuds de calculs ne sont pas "hautement disponibles", ils peuvent être arrêtés inopinément. Si vous perdez 40 jours de calcul ... vous devrez patienter !
* L'ordonnanceur réalise un meilleur travail de placement et de répartition des ressources avec des jobs de courte durée
==== Partitions "privatives" (à accès restreint) ====
=== Principe ===
Certains noeuds de calcul ont été financés spécifiquement par des laboratoires ou groupes de chercheurs :
* ces parties "privatives" peuvent être utilisées par tout le monde
* mais le laboratoire propriétaire sera prioritaire lorsqu'il en aura besoin
Autrement dit :
* les noeuds sont regroupés dans des partitions de haute priorité, utilisables uniquement par le laboratoire propriétaire.
* si des jobs d'autres partitions sont en cours d'utilisation, ils seront gelés pour laisser de la place
=== Utilisation ===
Afin d'utiliser une partition privative, un membre du laboratoire doit simplement changer le nom de la partition (''%%--partition%%'').
=== Liste ===
^Partition ^Noeuds ^ Durée max ^
^cluster-e5v4-umr850 |node46-57 (2016) |30 J |
^gpu-umr850 |node58 (2016) |30 J |
^cluster-e5v4-xlim-electro |node59-62 (2016) |30 J |
^gpu-umr1248-gtx1080 |node63-64 (2018) |30 J |
^gpu-ircer-gtx1080 |node65 (2018) |30 J |
^xlim-cc |node66 (2019) |30 J |
===== Les "Features" : contrôler le placement des jobs, éviter la pré-emption =====
==== Principe ====
Chaque //noeud// est marqué avec des //features//. Lorsqu'on lance un job, il est possible de demander son placement sur des noeuds possédant certaines //features//, avec par exemple l'option ''%%--constraint%%''
Sur CALI, vous pouvez utiliser les //features// pour plusieurs usages :
* demander un type de processeur
* demander des noeuds **qui ne sont pas soumis à la pré-emption**
* demander des noeuds **qui ont le réseau Infiniband**
==== Eviter la pré-emption ====
Nous avons déjà vu que certains noeuds sont à la fois dans des partitions ouvertes à tout le monde, et dans des partitions //privatives//, prioritaires. Si un job est lancé dans la partition prioritaire, slurm va, si nécessaire, "libérer" des ressources via le mécanisme de //pré-emption// (gel des jobs en cours).
Pour éviter ce mécanisme, appelez la //feature// ''NoPreemption''. Par exemple, ajouter :
#SBATCH --constraint=NoPreemption
__Inconvénient__ le job sera limité aux noeuds les plus anciens de CALI, il ne pourra pas s'exécuter sur les processeurs les plus puissants
==== Choisir un type de processeur ====
Les partitions communes sont hétérogènes. Vous pouvez spécifier sur quel processeur vous voulez exécuter le job.
Liste des //feature// déclarés (correspondant au nom du processeur) :
* ''Xeon-E5-2650-v2''
* ''Xeon-E5-2630-v4''
* ''Xeon-4108''
Pour que le job se lance sur des processeurs E5-2630-v4, il faut par exemple ajouter:
#SBATCH --constraint=Xeon-E5-2630-v4
Consultez la page [[:materiel-cali2]] pour connaître le nombre de noeuds disponibles pour chaque type de processeur.
==== Réseau Infiniband ====
Tous les noeuds n'ont pas de réseau Infiniband.
En pratique, seuls 4 noeuds, dont 3 dédiés GPU, ne sont pas équipés. Si vous voulez être certains que votre job disposera du réseau Infiniband (utile pour les calculs distribués MPI), utilisez la //feature// ''Infiniband''
#SBATCH --constraint=Infiniband