Allocation et ordonnancement des tâches de calcul

Revision as of 18:09, 12 February 2019 by FuzzyBot (talk | contribs) (Updating to match new version of source page)
Other languages:


Page enfant de Politique d'ordonnancement des tâches.

Allocation de ressources

Une allocation est l’attribution d’une quantité de ressources à un groupe de recherche pour une période donnée, habituellement un an. Calcul Canada gère des ressources de stockage et des ressources de calcul à l’intention des chercheurs canadiens.

L’allocation des ressources de stockage attribue un maximum déterminé d’espace réservé à l’usage exclusif d’un groupe de recherche. Pour sa part, l’allocation des ressources partagées que sont les cœurs-année et les GPU-année est plus complexe puisque ces ressources sont partagées par l’ensemble des groupes et que l’allocation tient compte de l’utilisation moyenne de chaque groupe.

La durée de l’allocation est une valeur de référence utilisée pour le calcul de la moyenne de la consommation des ressources au cours de la période pendant laquelle celles-ci sont disponibles. Par exemple, si les grappes ne sont pas disponibles pour une semaine dû à des opérations de maintenance, les groupes de recherche touchés n’obtiennent pas une semaine additionnelle en compensation à la fin de la période. De la même manière, si la période d’allocation est allongée, les groupes n’y perdent pas en utilisation.

Notons qu’une allocation de cœurs-année et de GPU-année en ressources partagées considère la moyenne d’utilisation cible dans le temps; un groupe est donc plus susceptible d’atteindre et même de dépasser ses cibles en utilisant ses ressources de façon régulière sur la période qu’en soumettant des tâches en rafale (burst) ou en les reportant à plus tard.

Ordonnancement par priorité

Les ressources de calcul par cœurs-année et par GPU-année reçoivent des tâches qui sont immédiatement prises en charge par l’ordonnanceur. Rappelons qu’une tâche se compose d’une application logicielle et de la liste des ressources pour l’exécuter. L’ordonnanceur est aussi une application logicielle dont le rôle est de calculer la priorité de chaque tâche et de lui attribuer les ressources nécessaires selon leur disponibilité et en accord avec les règles de priorisation.

À l’aide d’algorithmes spécialisés, l’ordonnanceur tient compte des cibles de chaque groupe et compare la consommation récente du groupe à l’utilisation qui lui était allouée. Un des facteurs déterminants est la consommation à l’intérieur de la période. Le facteur qui possède cependant le plus de poids est la consommation (ou la non-consommation) récente, ceci en vue d’offrir une opération plus stable aux groupes dont l’utilisation réelle se rapproche des ressources qui leur étaient allouées. Cette façon de procéder assure une meilleure répartition du parc de ressources pour l’ensemble des groupes et fait en sorte qu’il est théoriquement possible pour tous les groupes d’atteindre leurs cibles.

Utilisation des ressources et priorisation des tâches

Le principe gouverneur dans la façon de déterminer la priorité des tâches de calcul se base sur les ressources qu’une tâche rend non disponibles aux autres utilisateurs plutôt que sur les ressources effectivement utilisées.

Le cas de cœurs non utilisés qui influent sur le calcul des priorités se produit souvent lorsqu’une tâche est soumise en demandant plusieurs cœurs, mais n’en consomme effectivement qu’une partie à l’exécution. C’est le nombre de cœurs demandés par une tâche qui a une incidence sur la priorisation des prochaines tâches puisque la tâche bloque les cœurs non utilisés pendant son exécution.

Un autre cas fréquent de cœurs non utilisés se pose lorsqu’une tâche exige plus de mémoire que celle demandée pour un cœur. Sur une grappe où chaque cœur serait doté de 4Go de mémoire, une tâche qui demanderait un seul cœur et 8Go de mémoire bloquerait donc 2 cœurs et le deuxième cœur ne serait pas disponible pour les tâches des autres groupes de recherche

Nous ne discuterons pas davantage de la priorisation puisqu’une documentation détaillée est en préparation. Pour un complément d’information sur le sujet, prenez connaissance de la page web de WestGrid intitulée Scheduling & Job Management: How to Get the Most from a Cluster.

Pour bien comprendre comment les ressources sont comptabilisées, abordons le concept d’équivalent-cœur.

Équivalent-cœur

Un équivalent-cœur se compose d’un cœur simple et d’une certaine quantité de mémoire; pour le nommer, nous utilisons le terme bundle. En plus du cœur, le bundle contient aussi la mémoire considérée comme étant associée à ce cœur.

 
Figure 1 – Équivalent-cœur sur Cedar et Graham

Cedar et Graham offrent surtout des cœurs de 4Go et dans leur cas, l’équivalent-cœur est un bundle de 4 Go (voir Figure 1). Pour sa part, Niagara offre surtout des cœurs de 4.8Go, donc des bundles de 4.8Go. L’utilisation des ressources par une tâche est comptabilisée à raison de 4Go ou 4.8Go par cœur, comme mentionné ci-dessus.

Le suivi des cibles s’avère relativement simple quand les ressources demandées sont des cœurs et des quantités de mémoire qui correspondent à un équivalent-cœur entier, plutôt qu’à une portion d’équivalent-cœur. Les choses se compliquent parce que l’utilisation de portions d’équivalents-cœur risque d’augmenter le pointage servant au calcul de la juste part du groupe de recherche. En pratique, la méthode appliquée résout le problème de justesse ou de perception de la justesse, mais cette méthode n’est pas intuitive au début.

Dans les exemples qui suivent, la mémoire est de 4Go.

Comptabilisation par équivalents-cœur

Examinons le cas où nous avons un bundle composé de 1 coeur et 4Go de mémoire.

  •  
    Figure 2 – Deux équivalents-cœur
    Les cœurs sont comptabilisés si un groupe utilise plus de cœurs que de mémoire, c’est-à-dire plus que le ratio 1cœur/4Go.
    Dans la figure 2, on demande 2 cœurs et 2Go par cœur pour une mémoire totale de 4Go; la tâche exige 2 équivalents-cœur pour les cœurs, mais un seul bundle pour la mémoire. Pour calculer la priorité, l’ordonnanceur évalue la demande à 2 équivalents-cœur.
  •  
    Figure 3 – 2.5 équivalents-cœur
    La mémoire est comptabilisée si un groupe utilise plus de mémoire que le ratio de 1 cœur/4Go.
    Dans la figure 3, on demande 2 cœurs et 5Go par cœur pour une mémoire totale de 10Go; la tâche exige 2.5 bundles pour les cœurs. Pour calculer la priorité, l’ordonnanceur évalue la demande à 2 équivalents-cœur. équivalents-cœur pour la mémoire, mais seulement deux.

Équivalent-GPU

Les principes appliqués pour les équivalents-cœur valent aussi pour les GPU et les ressources qui leur sont associées. Une difficulté surgit cependant parce qu’il est important de différencier les cibles allouées pour la recherche sur GPU des cibles allouées pour la recherche qui n’utilise pas les GPU si nous voulons respecter les cibles d’allocation dans chacun des cas. Autrement, un chercheur n’utilisant pas les GPU ne pourrait pas utiliser les cibles qui lui sont allouées pour le parc de ressources GPU, ce qui créerait une surcharge, empêchant les chercheurs qui utilisent les GPU d’atteindre leurs cibles, et vice versa.

Nous distinguons donc entre équivalent-cœur et équivalent-GPU, ce dernier étant un bundle composé du GPU, de plusieurs cœurs et de la mémoire. La comptabilisation des cibles pour les allocations utilisant des GPU doit inclure les GPU. De la même manière qu’un système de pointage mesure l’utilisation en termes d’équivalents-cœur, un système similaire mesure l’utilisation en termes d’équivalents-GPU.

 
Figure 4 – Équivalent-GPU

Comptabilisation par équivalent-GPU

Examinons le cas où nous avons un bundle de 1 GPU, 6 cœurs et 32Go de mémoire.

  • Les GPU sont comptabilisés si un groupe utilise plus de GPU que de cœurs OU plus de mémoire que de bundles avec GPU.
    Dans la figure 5, on demande 2 cœurs et 2Go par cœur pour une mémoire totale de 4Go; la tâche exige donc 2 équivalents-cœur pour les cœurs, mais un seul bundle pour la mémoire. Pour calculer la priorité, l’ordonnanceur évalue la demande à 2 équivalents-GPU.
 
Figure 5 – 2 équivalents-GPU


  • Les cœurs sont comptabilisés si un groupe utilise plus de cœurs que de GPU OU plus de mémoire par bundle avec GPU.
    Dans la figure 6, on demande 1 GPU, 9 cœurs et 32Go par cœur; la requête exige donc 1.5 bundle avec GPU pour les cœurs, mais un seul bundle pour les GPU et la mémoire. Pour calculer la priorité, l’ordonnanceur évalue la demande à 1.5 équivalents-GPU.
 
Figure 6 – 1.5 équivalent-GPU (cœurs)


  • La mémoire est comptabilisée si un groupe utilise plus de mémoire que de GPU OU de cœurs par bundle avec GPU.
    Dans la figure 7, on demande 1 GPU, 6 cœurs et 48Go; la requête exige donc 1.5 bundle avec GPU pour la mémoire, mais un seul bundle pour les GPU et les cœurs. Pour calculer la priorité, l’ordonnanceur évalue la demande à 1.5 équivalents-GPU.

On trouve des bundles avec GPU sur

  • ̈Cedar 1 GPU / 6 cœurs / 32Go et
  • Graham 1 GPU / 8 cœurs / 32Go.

Categorie : SLURM