Le calcul de haute performance

Le calcul de haute performance (CHP) constitue un outil puissant pour les recherches actuelles. Il permet d’effectuer des calculs à grande échelle de systèmes complexes, des analyses de gros volumes de données et de visualiser les données. Pour ce faire, les systèmes CHP sont équipés de milliers de processeurs, de plusieurs GPU, de centaines de gigaoctets de mémoire et de téraoctets de stockage. 

Des ressources sont fournies au Canada comme de grosses grappes de calcul mises à disposition par les consortiums de Calcul Canada. Les centres de données universitaires offrent aussi des équipements équipés de technologie CHP.

Les grappes de calcul

Calcul Canada est l’organisation gérant toutes les grappes de calcul au Canada. Pour utiliser une grappe de calcul, vous devez vous inscrire et ouvrir un compte.

This image shows Compute Canada login screen

Bon nombre de grappes sont disponibles au Canada, qui sont gérés par six consortiums, notamment ACENET, CAC, Calcul Québec, SHARCNET, SciNet et WestGrid. Les tableaux ci-dessous listent les systèmes offerts pour les grappes basées sur les UCT et les GPU.

Les grappes UCT

Consortium

Grappe

Noyaux

Mémoire par nœud

Stockage

Interconnexion

ACENET

Placentia

3680

8–32 GB

75 GB

Infiniband 4xDDR

ACENET

Glooscap

1968

4–128 GB

61 GB

Gigabit Ethernet

CAC

Frontenac

3600

 

3 TB

 

Calcul Québec

Briarée

8064

24–96 GB

7.3 TB

Infiniband QDR

Calcul Québec

Colosse

7680

24–48 GB

500 TB

Infiniband QDR

Calcul Québec

Cottos

1024

16 GB

151 GB

Infiniband QDR

Calcul Québec

Guillimin

20512

24–1024 GB

 

Infiniband QDR

Calcul Québec

Mp2

39168

32–512 GB

 

Infiniband QDR

Calcul Québec

Ms2

2464

16–32 GB

 

Infiniband DDR

Calcul Québec

Psi

1008

72 GB

 

Ethernet

SHARCNET

Graham

33448

128–3072 GB

20 TB

Infiniband EDR

SHARCNET

Orca

8880

24–128 GB

 

Infiniband QDR

SHARCNET

Windeee

144

32 GB

 

Ethernet

SciNet

Niagara

60000

202 GB

6 PB

Infiniband EDR

SciNet

BlueGene/Q

65536

16 GB

 

5D Torus

WestGrid

Cedar

58416

125–3022 GB

20 TB

Omnipath

 

Les grappes GPU/coprocesseurs

 

Consortium

Graps

Nœuds

Mémoire par nœud

Interconnexion

Stockage

Calcul Québec

Guillimin

58 / 50

64 GB

 

343 GB

Calcul Québec

Hàdes

9

24 GB

 

412 GB

Calcul Québec

Helios K20

15

128 GB

 

2 TB

Calcul Québec

Helios K80

6

256 GB

 

330 GB

SHARCNET

Graham

160

128 GB

Infiniband FDR

20 TB

SHARCNET

Monk

54

48 GB

Infiniband QDR

20 TB

SHARCNET

Copper

8

96 GB

Infiniband FDR

 

SciNet

SOSCIP GPU Cluster

14

512 GB

Infiniband EDR

 

WestGrid

Cedar

146

125–250 GB

Omnipath

20 TB

 

Il existe également d’autres systèmes plus petits.

La soumission des tâches

Un système de mise en file d’attente est employé par toutes les grappes de calcul pour une exécution rapide des programmes sans manquer de ressources.

Pour ce faire, il faut soumettre la tâche à la file d’attente. L’ordonnanceur de la grappe établira les conditions d’exécution de votre tâche. Le temps d’attente dans la file dépend d’utilisation de la grappe, du nombre de noyaux UTC, de la mémoire, et du temps d’exécution demandé. Les tâches requérant une quantité supérieure de ressources nécessiteront une durée plus élevée, car l’ordonnanceur devra attendre qu’une quantité de mémoire suffisante devienne disponible pour exécuter votre tâche. Il est donc très important de savoir le nombre de ressources que votre programme nécessitera pour réduire au minimum le temps d’attente.

La réduction des temps d’attente dans la file

Les grappes utilisent de différents ordonnanceurs, mais elles fonctionnent selon les mêmes principes, soit plus gros les besoins de calcul, plus long le temps d’attente dans la file.

Vous pouvez établir la quantité de ressources que votre programme nécessite de plusieurs façons.

Si vous avez accès au code source, vous pouvez calculer la quantité de mémoire requise à une tâche. Il faut créer un programme suivant les premières étapes sans utiliser la mémoire. Cela permettra de faire le suivi de la quantité de mémoire qui sera utilisée. Bien que cela nécessite un peu de travaux préparatoires, il vous permettra de calculer rapidement la mémoire requise, en vous économisant du temps. Certains modules vous donnent des estimations de délais selon la configuration d’entrée.

Si cela est impossible, faites exécuter des modules de votre programme avec des paramètres limités d’entrée.

Par exemple, lors de l’exécution d’une simulation nécessitant des calculs avec des particules N=500, effectuez l’exécution pour N=10, 20, 30, 40. Vérifiez si cette augmentation change la quantité de la mémoire utilisée. En Linux, vérifiez la mémoire utilisée avec pmap.

Identifiez le PID de votre programme.

$ ps -u $USER
  PID TTY          TIME CMD​​​​​​​
    4 tty1     00:00:00 bash​​​​​​​
  141 tty1     00:00:00 ps​​​​​​​
  166 tty1     00:01:22 simulations​​​​​​​

Vérifiez ensuite la mémoire utilisée avec pmap.

$ pmap 166
166:   simulations​​​​​​​
00007ff3dc000000    132K rw---   [ anon ]​​​​​​​
00007ff3dc021000  65404K -----   [ anon ]
...
...
...​​​​​​​
00007ff456815000      4K rw--- simulations​​​​​​​
00007ffff0590000  16388K rw---   [ anon ]​​​​​​​
00007ffff699e000   8192K rw---   [ anon ]​​​​​​​
00007ffff784b000      4K r-x--   [ anon ]
total          1982516K​​​​​​​

Il est évident donc que le programme a utilisé environ 2 Gb. La mise à l'échelle est polynomiale ou logarithmique. En traçant les résultats sur un diagramme avec un polynomial ou un logarithme, vous pouvez estimer la mémoire utilisée pour N=500.

Suite à la soumission d’une tâche à une grappe, le fichier journal, qui est automatiquement généré, indique la mémoire utilisée par votre calcul; cela vous aidera à modifier vos soumissions de façon appropriée. Nous vous recommandons d’ajouter 10 % à votre estimation pour que la tâche soit finalisée même au cas d’une variation de la mémoire utilisée.

L’estimation du temps d’exécution est un peu plus difficile, car cela dépend de la vitesse de l’UCT et du programme de mise à l'échelle lors d’une exécution en base de plusieurs noyaux UCT. Une estimation raisonnable sera nécessaire lors de la soumission de la tâche pour permettre une marge d’erreur. Utilisez les rapports des grappes pour établir le temps d’exécution réel.

Les points de contrôle

Si l’exécution de votre programme requiert une longue durée, il sera mis dans la file d’attente pour une longue durée. Pour ce type de programmes, nous recommandons la mise en place de points de contrôle.

Il s’agit d’un processus qui crée un aperçu de la mémoire entière du calcul et qui l’enregistre sur le disque de façon régulière.

Par exemple, un programme dont l’exécution durerait une semaine pourrait être divisé en 7; un calcul serait donc exécuté chaque jour. Cela réduit le temps d’attente et rend le calcul plus résilient aux pannes, car il sera continué depuis le dernier point de contrôle.

L’exemple ci-dessous illustre une (mauvaise) dynamique moléculaire employant des points de contrôle.

Cette image montre la création d’un point de contrôle après toutes les 40 étapes grâce à l’enregistrement du nombre d’itération et des positions de toutes les particules de cette itération sur un fichier binaire; le programme s'arrête ensuite
Cette image montre la continuation du calcul des données enregistrées au point de contrôle

Un point de contrôle est ainsi créé après toutes les 40 étapes grâce à l’enregistrement du nombre d’itération et des positions de toutes les particules de cette itération sur un fichier binaire; le programme s'arrête ensuite. Le calcul continue à partir des données enregistrées au point de contrôle.

Il est possible de soumettre les tâches de façon qu’elles restent en attente jusqu’à la finalisation d’autres tâches; cela éliminera le besoin de soumettre manuellement chaque tâche après que le calcul arrive au point de contrôle.

Pour de l’aide à la recherche

Pour de l’aide à utiliser les grappes ou pour faire exécuter des programmes, merci de communiquer avec le Centre de services.

Haut de page