SLURM - QOS généralités

Il est possible de spécifier une QOS (Quality Of Service) pour chaque job soumis dans Slurm, la QOS affectera le job de 3 façons :

  • Priorité
  • Préemption
  • Limites

C’est la commande sacctmgr permet de gérer la QOS.

Quality Of Service

Pour changer et activer la QOS, il faut activer le plug-in Multifactor Job Priority en changeant l’option PriorityType à priority/multifactor dans slurm.conf

Fichier slurm.conf :

# Activate the Multifactor Job Priority Plugin with decay
# PriorityType=priority/basic
PriorityType=priority/multifactor

Priorité

Options

Pour activer l’option de priorité des calculs, le paramètre PriorityWeightQOS doit être défini dans le fichier slurm.conf avec une valeur entière supérieure à zéro.

L’algorithme FairShare calcule la priorité du job en tenant compte de plusieurs facteurs tels que l’âge, la taille et la partition du job. Voici les pondérations de ces facteurs :

Fichier slurm.conf :

# This next group determines the weighting of each of the
# components of the Multifactor Job Priority Plugin.
# The default value for each of the following is 1.
PriorityDecayHalfLife=90-0
PriorityWeightFairshare=1000
PriorityWeightAge=100
PriorityWeightPartition=1000
PriorityWeightJobSize=10
PriorityMaxAge=14-0
PriorityWeightQOS=1

Calcul de la priorité

La priorité des jobs est calculée en fonction de tous les facteurs activés dans le fichier slurm.conf. La priorité du job peut être exprimée comme suit :

Job_priority =
site_factor +
(PriorityWeightAge) * (age_factor) +
(PriorityWeightAssoc) * (assoc_factor) +
(PriorityWeightFairshare) * (fair-share_factor) +
(PriorityWeightJobSize) * (job_size_factor) +
(PriorityWeightPartition) * (partition_factor) +
(PriorityWeightQOS) * (QOS_factor) +
SUM(TRES_weight_cpu * TRES_factor_cpu, TRES_weight_<type> * TRES_factor_<type>, ...)
- nice_factor

La priorité des jobs est un nombre entier compris entre 0 et 4294967295. Plus le nombre est élevé, plus le job sera positionné haut dans la file d’attente. La priorité d’un job peut varier dans le temps, exemple : plus un job reste longtemps dans la file d’attente, plus sa priorité augmente si age_weight est différent de zéro.

Préemption

Slurm offre deux façons de libérer des ressources pour un job afin de préempter un autre job en cours d’exécution.

Extrait de slurm.conf :

PreemptMode=Suspend,Gang
PreemptType=preempt/qos
PartitionName=normal Nodes=linux Default=NO OverSubscribe=FORCE:1
[...]
PartitionName=low Nodes=linux Default=YES OverSubscribe=NO PriorityTier=10 PreemptMode=requeue
PartitionName=med Nodes=linux Default=NO OverSubscribe=FORCE:1 PriorityTier=20 PreemptMode=suspend
PartitionName=hi Nodes=linux Default=NO OverSubscribe=FORCE:1 PriorityTier=30 PreemptMode=off

PreemptType

Le paramètre PreemptType spécifie le plug-in utilisé pour identifier les jobs pouvant être préemptées dans slurm.conf et peut prendre 3 valeurs :

PreemptType Effet
preempt/none préemption désactivée (par défaut)
preempt/partition_prio préemption basée sur la partition
preempt/qos préemption basée sur la QOS

PreemptMode

Mécanisme utilisé pour préempter les jobs ou activer l’option GANG, utilisée pour activer la planification indépendamment de l’activation ou non de l’option PreemptType. Le paramètre PreemptMode dans slurm.conf peut prendre 3 valeurs :

PreemptMode Effet
OFF valeur par défaut, désactive la préemption et la planification GANG. N’est compatible qu’avec PreemptType=preempt/none
CANCEL la tâche préemptée sera annulée
GANG active la planification GANG dans la même partition et permet la reprise des jobs suspendus
REQUEUE Préempte les jobs en les remettant en file d’attente (si possible) ou en les annulant. L’option sbatch "--requeue" doit être définie ou le paramètre JobRequeue=1 dans slurm.conf
SUSPEND les jobs préemptés seront suspendus et relancés plus tard par GANG

limites

Les limitations suivent une hiérachie, l’ordre se fait selon :

  1. Partition QOS limit
  2. Job QOS limit
  3. User association
  4. Account association(s), ascending the hierarchy
  5. Root/Cluster association
  6. Partition limit
  7. None

Si des limitations sont définies à plusieurs endroit, l’odre le plus haut prime.

Exemple, si on défini :

  • Partition QOS : MaxJobs=20 et MaxSubmitJobs non défini
  • Association utilisateur : MaxJobs=4 et MaxSubmitJobs=50

La limitation effective sera de MaxJobs=20 et MaxSubmitJobs=50

Les limitations s’appliquent avec sacctmgr.

Ajouter des limitations :

# sacctmgr modify user john set GrpTRES=cpu=1500,mem=200,gres/gpu=50

Supprimer les limitations, avec la valeur -1 :

# sacctmgr modify user john set GrpTRES=cpu=-1,mem=-1,gres/gpu=-1

Documentation

https://slurm.schedmd.com/qos.html
https://slurm.schedmd.com/priority_multifactor.html#intro
https://slurm.schedmd.com/priority_multifactor.html#config
https://slurm.schedmd.com/priority_multifactor.html#general
https://stackoverflow.com/questions/57703305/slurm-qos-preemption
https://www.hpc.iastate.edu/guides/condo-2017/job-accounting
https://slurm.schedmd.com/SLUG19/Priority_and_Fair_Trees.pdf
https://harvardmed.atlassian.net/wiki/spaces/O2/pages/1632567361

> Partager <