Aller au contenu principal

Lancer un calcul sur le supercalculateur

Le supercalculateur ROMEO utilise ce qu'on appelle un Ordonnanceur de tâches. Ce système gère les taches qui sont exécutées sur le supercalculateur, leur priorité, ressources, consommation, etc. Nous utilisons l'outil SLURM dont la documentation complète se trouve à cette a cette adresse : https://slurm.schedmd.com/archive/slurm-23.11.6/man_index.html Vous trouverez d'autres ressources ici :

Si vous utilisiez ROMEO 2018

Globalement cela fonctionne de la même manière, mais quelques changements sont à noter. Par exemple :

  • Il est maintenant nécessaire de préciser l'identifiant du projet pour lequel un job est lancé pour qu'il soit accepté.
  • Il est maintenant nécessaire de préciser la mémoire à réserver pour un job.
  • Le nombre de serveur par partition et leur répartition. Le choix de la partition est automatique si non précisée.

Principales commandes

squeue Cette commande permet de consulter les jobs actuellement sur le supercalculateur, qu'ils soient en attente ou en train de calculer.

Si vous souhaitez ne voir que les jobs qui vous appartiennent, vous pouvez utiliser l'option --me.

Par exemple : squeue --me

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
279 short interact fberini R 0:02 4 romeo-c[023-026]

Nous voyons ici plusieurs informations:

  • le numéro de job.
  • la partition du job (expliqué plus bas).
  • son nom.
  • l'identifiant de la personne a qui il appartient.
  • son statut.
  • le temps d'exécution.
  • puis la liste des serveurs sur lesquels il a été lancé.

Dans le cas d'un job qui ne s'est pas lancé :

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
280 short interact fberini PD 0:00 4 (PartitionTimeLimit)

Les informations suivantes changent :

  • le statut du job, ici en PD (Pending), signifiant qu'il est en attente.
  • le temps d'exécution reste à zéro.
  • à la place de la liste des serveurs, nous trouvons l'erreur qui donne la raison de son attente.

sinfo Cette commande affiche l'état actuel des différentes partitions (expliquées plus bas), et sur chacune d'elles combien de serveur sont actuellement utilisés complètement, partiellement, ou libres.


scontrol show job 1234 Cette commande permet d'avoir tous les détails d'un job donné, encore en file d'attente ou en train de calculer.


sbatch Cette commande permet d'envoyer un fichier de soumission Slurm (voir chapitre Ecrire un fichier de soumission) afin de lancer un calcul sur le supercalculateur.


scancel 1234 Cette commande permet d'annuler un job en attente, ou d'arrêter un job en cours de calcul.


srun Cette commande permet de soumettre une commande en temps que job à Slurm sans fichier de soumission. On doit donc lui passer toutes les informations obligatoires que l'on trouve dans un fichier de soumission mais sous la forme de paramètres de la commande. Utilisé dans un fichier de soumission, elle est capable de remplacer la commande mpirun en configurant automatiquement celle ci avec les paramètres qu'elle obtient du job directement.


salloc Cette commande permet de créer un calcul dit "Interactif". Cela va créer un job Slurm qui une fois passé en Running vous donne accès aux serveurs de calcul et ressources qui lui ont été alloués. Vous avez alors la possibilité de vous connecter sur ces ressources pour y exécuter des calculs de manière interactive via votre terminal.

Le fichier de soumission

Pour lancer un job, il convient d'écrire un script qui contient deux parties :

  • Les instructions slurm sont écrites au début du fichier de soumission, et commencent par #SBATCH. Elles décrivent les besoins de votre job
  • Les commandes à exécuter au démarrage du job
    • Il convient ensuite de soumettre le script à l'aide de la commande sbatch Le contenu de ce fichier sera expliqué plus en détail dans le chapitre suivant.

Les ressources de calcul

Pour soumettre un job de calcul, il y a un certain nombre d'informations à spécifier, afin que le supercalculateur sache ce qui est nécessaire pour votre job, elles doivent être spécifiées dans le fichier de soumission (voir chapitre suivant) :

InformationObligatoireOptionValeur par défautDescription
ProjetOui--accountPermet d'indiquer dans le cadre de quel projet ce calcul va être crée et compatibilisé.
Durée du jobOui--timeLe temps maximum que votre job prendra. Si votre job n'est pas terminé après cette durée, il sera tué automatiquement. Plus la durée demandée est longue moins le job est prioritaire.
MémoireOui--memLa mémoire RAM maximum par serveur que votre job utilisera. Si votre job en consomme d'avantage, il sera tué automatiquement. Plus la quantité demandée est grande moins le job est prioritaire.
Partition--partitionAutomatiqueLa partition dans laquelle le job va fonctionner
Nombre de serveurs--nodes1Le nombre de serveurs souhaités
Nombre de taches--ntasks1 (par serveur)Le nombre de taches souhaitées (associés aux processus lourds, type MPI)
Nombre de coeurs--cpus-per-task1 (par tache)Le nombre de coeurs souhaités (associés aux processus légers, type threads OpenMP)
Ressources additionnelles (gpu)Pas encore disponible
Réservation à utiliser--reservationAucuneSi vous avez accès à une réservation, pour que votre job accède aux ressources reservées il faudra la préciser dans le job

Partition

Les partitions sont une forme de "file d'attente et d'exécution". Chaque partition ne peu accueillir que des jobs ayant une durée maximum qui leur soit adaptée. Par exemple un job de durée maximum de 90 min pourra se placer dans la partition "long", "short", mais pas "instant" Chaque partition influe sur la priorité des jobs qu'elle contient, plus la partition autorise des jobs longs, moins les jobs qui y sont placés seront prioritaires.

Les partition suivantes sont actuellement disponibles :

PartitionDurée maximumPrioritéServeurs utilisables par la partition
instant1h00trés forte42 ( romeo 1 à 40 et 101-104 )
short24h00forte41 ( romeo 1 à 39 et 101-104 )
long30 joursfaible24 (romeo 1 à 20 et 101-104)

Limites

Afin de permettre l'accès aux ressources à tous, une limite d'utilisateur en nombre de coeurs est définie pour chaque utilisateur.

Pour interroger votre limite :

sacctmgr show Association where user=$USER

Soumission intéractive

Cette méthode peut être utile mais n'est pas la méthode recommandée par le centre de calcul ROMEO.

Si vous souhaitez lancer des calculs "en direct" sur un serveur de calcul ROMEO, par exemple pour faire des taches lourdes en lecture et/ou écriture disque, il est possible de créer ce qu'on appelle un "Job Interactif".

Les commandes de base à utiliser sont les suivantes :

salloc -t 1:00:00 --account=monprojet --mem=1G
srun --pty bash

Cette commande va vous créer un job d'une heure, sur un serveur, la seconde va vous connecter directement sur ce serveur, où vous pourrez exécuter vos commandes dans votre terminal au fur et à mesure. Si vous avez réservés plusieurs serveurs, la liste des serveurs alloués sera affichée après la première commande. Vous pouvez utiliser la commande squeue --me ou lire la variable d'environnement "SLURM_NODELIST" pour connaitre les serveurs qui vous sont alloués, vous pouvez les utiliser et vous y connecter via la commande ssh

Par exemple :

[fberini@romeo1 ~]$ salloc -N3 -t 1:00:00 --account=romeoadmin --mem 1G
salloc: Granted job allocation 287
salloc: Nodes romeo-c[023-024,040] are ready for job
[fberini@romeo1 ~]$ srun --pty bash
[fberini@romeo-c023 ~]$

Dans cet exemple, je demande 3 serveurs, pendant une 1 heure, avec mon projet 'romeoadmin', et 1Go de mémoire par serveur. Slurm m'a donc crée un numéro 287, et placé en attente. Dès que les ressources furent disponibles, potentiellement immédiatement mais ce n'est pas garantis, il m'a affiché les serveurs qui m'ont été alloués (ici les 23, 24 et 40). Avec la seconde commande je me suis retrouvé connecté au serveur 23.