L’IRIC possède une grappe de calcul dédiée et emploie le logiciel SLURM pour distribuer les tâches sur ces ressources.  Pour y accéder, vous devez posséder un compte Linux sur nos serveurs et utiliser un client SSH afin de rejoindre le noeud maître de la grappe à l’adresse suivante:

cluster.iric.ca

Tous les répertoires usagers sont exportés sur cette grappe de calcul par NFS et vous aurez donc accès à vos données de n’importe quel noeud en utilisant le même répertoire (e.g. /u/usager).

Lancer une tâche

La soumission d’une tâche se fait en utilisant la commande salloc pour un accès interactif et sbatch autrement, et en spécifiant les ressources requise pour cette tâche. Dans sa forme la plus simple, il est possible de se connecter de façon interactive sur un noeud de calcul en utilisant les commandes suivantes:

salloc –nodes=1 –ntasks=2 –mem=8gb –time=4:00:00

Cette commande vous connectera sur le prochain noeud de calcul disponible en réservant 2 coeurs de CPU et 8GB de mémoire et ce, pour une durée maximale de 4 heures après laquelle vous serez automatiquement déconnecté. Durant cette période, vous pourrez exécuter votre programme sur ce noeud de calcul en mode interactif, ce qui est particulièrement utile pour tester vos analyses. Une fois que vous êtes confiant de votre analyse, il est plus efficace de lancer les tâches en mode batch en créant un script qui définit les commandes à être exécutées, par exemple:

#!/bin/bash
#SBATCH –mem=2g # memory
#SBATCH –nodes 1 # nodes
#SBATCH –ntasks=4 # cores
#SBATCH –time=0-04:00 # time (DD-HH:MM)
module load star
module load samtools
STAR ...
samtools ...

et de soumettre ce script, par exemple nommé test.sh, à la grappe de calcul ainsi:

sbatch test.sh

A noter que les ressources demandées peuvent être spécifiées dans le script ou en argument de la ligne de commande sbatch. Les sorties stdout et stderr de vos programmes seront redirigés dans des fichiers du répertoire de travail.  Une tâche qui tenterait d’allouer plus de mémoire que demandé sera stoppée tandis qu’une tâche qui utiliserait plus de coeurs que réservé sera tout de même exécuté mais sera restreinte au nombre de coeurs physique demandé.

Pour plus de détails sur les paramètres de sbatch, vous pouvez consulter la documentation officielle de Slurm.

Espace de stockage local

Pour chaque tâche soumise à la grappe de calcul, un espace de stockage local est automatiquement créé sur le noeud de calcul et peut être utilisé dans vos scripts pour accélérer certaines opérations. La variable $TMPDIR contiendra le nom de ce dossier temporaire. La taille disponible dans cet espace local est variable d’un noeud à l’autre et un noeud possédant une taille suffisante pour votre usage peut être demandé à l’aide d’un paramètre supplémentaire.

sbatch –nodes 1 –tmp=100gb test.sh # To reserve a node with at least 100GB in $TMPDIR

Monitorer une tâche

Vous pouvez afficher l’état de vos tâches en utilisant la commande squeue et supprimer l’une d’elle avec la commande scancel:

squeue
scancel

L’état général de la grappe de calcul peut aussi être affiché à l’aide de la commande:

sinfo

ou pour plus de détails sur une partition:

sinfo -o "%12N %.10c %8O %.8m %20f %20G %10T %10d %.4w %P" -N -p gpu

et en consultant l’outil de monitoring ganglia: http://bioinfo.iric.ca/ganglia.

Réservation de GPU

Slurm permet de réserver des resources spécifiques pour du calcul GPU en utilisant l’option gres. Par exemple:

sbatch –nodes 1 –gres=gpu:1 # Reserve a node and a single card, regardless of its type
sbatch –nodes 1 –gres=gpu:rtx2080:2 # Reserve a node with 2 RTX2080 cards

Les GPUs disponibles sont décrits dans la colonne GRES du résultat de la commande sinfo. La variale d’environnement $CUDA_VISIBLE_DEVICES contiendra l’id du ou des GPU réservés, ce qui peut être utile lorsqu’une tâche est exécutée sur un noeud contenant plusieurs GPUs.