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.

Accès aux services

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

L'accès est gratuit pour tous les chercheurs des institutions canadiennes. Si vous êtes un chercheur principal, vous pouvez demander un compte directement. Si vous êtes un post-doc ou un étudiant, vous pouvez obtenir un compte sponsorisé par votre superviseur.

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