Table des matières

Utilisation du cluster et de SLURM

Un cluster est un regroupement de machines dédiées au calcul. Il est composé d'une machine frontale ("porte d'entrée" du cluster) et de plusieurs machines de calcul, appelées nœuds, et éventuellement hétérogènes (voir les nœuds du cluster du LIMOS).

Accès au cluster

On accède au cluster en se connectant (en ssh) sur le serveur frontalhpc2020 et en utilisant le login / mot de passe de son compte ENT UCA (ou compte spécifiquement créé pour les extérieurs à l'UCA). Pour exécuter un programme sur un nœud de calcul, l'utilisateur doit obligatoirement passer par l'ordonnanceur de tâches SLURM (voir section suivante).

Transition en cours vers frontalhpc2025 : les noeuds de calcul vont progressivement rejoindre le nouveau cluster, accessible via la machine frontale frontalhpc2025. À l’exception du nom du frontal, la manière de se connecter et l'utilisation restent identiques.

Qu'est-ce que SLURM ?

SLURM (Simple Linux Utility for Resource Management) est un gestionnaire de ressources et ordonnanceur de tâches pour des clusters LINUX. Il permet de répartir au mieux les ressources de calcul (CPU, GPU, RAM) entre utilisateurs en gérant des files d'attente avec priorité.

Les processus d'un utilisateur sont confinés aux ressources (CPU notamment) qu'il a réservées : il ne peut pas accéder aux CPU réservés par d'autres utilisateurs. Cela permet d'assurer une certaine reproductibilité des exécutions d'un même programme, notamment au niveau des temps de calcul (contrairement à ce qu'il se passe sur des machines partagées en accès direct).

Une documentation complète est disponible sur le site de SLURM : http://slurm.schedmd.com/.

Le vocabulaire

Les nœuds et CPUs

Lorsqu'on parle de CPU dans SLURM on fait référence à une unité de calcul logique (i.e. un cœur logique), donc :

Définition Socket, core, thread - extrait de https://slurm.schedmd.com/mc_support.html

Les jobs

Dans SLURM un job correspond à une requête d'allocation de ressources (CPU, RAM, temps de calcul) par un utilisateur.

Les partitions

Une partition dans SLURM correspond à un groupement logique de nœuds de calcul. Chaque partition est associée à des contraintes en termes de ressources (en particulier le temps de calcul maximum d'un job). Une partition peut être vue comme une file d'attente : l'utilisateur choisit la partition dans laquelle il soumet ses jobs en fonction de ses besoins.

Soumettre un job

Pour soumettre un job (demande d'allocation de ressources pour exécuter un programme), l'utilisateur doit :

Sauf cas particulier, il est préférable d'utiliser un script (méthode simple, rapide et le script est réutilisé facilement).

Soumettre un job en utilisant un script (méthode conseillée)

L'utilisateur crée un script bash (.sh) dans lequel il précise les ressources dont il a besoin puis appelle son programme (étape 1). Ce script est ensuite soumis à SLURM via la commande sbatch qui affecte un numéro au job (étape 2).

Etape 1 : Description du job dans un fichier bash (.sh)

Un script de soumission SLURM est composé de deux parties :

Les options dans le script doivent être précédées de la directive #SBATCH. Un exemple de script permettant d'exécuter un programme monothread est donné ci-dessous :

#!/bin/bash
 
#===============================================================================
# exemples d'options
 
#SBATCH --partition=normal    # choix de la partition où soumettre le job
#SBATCH --time=10:0           # temps max alloué au job (format = m:s ou h:m:s ou j-h:m:s)
#SBATCH --ntasks=1            # nb de tasks total pour le job
#SBATCH --cpus-per-task=1     # 1 seul CPU pour une task
#SBATCH --mem=1000            # mémoire nécessaire (par noeud) en Mo
 
#===============================================================================
#exécution du programme (remplacer exe par le nom du programme
# ou la ligne de commande à exécuter)
./exe

Remarques

Etape 2. Soumission du job via la commande sbatch

Le job décrit dans un script est soumis via la commande sbatch suivie du nom du script. SLURM affecte alors un numéro au job et le place dans la file d'attente (celle par défaut si l'utilisateur n'a pas précisé dans quelle partition il désirait soumettre son job, celle correspondant à la partition demandée sinon). Le job est exécuté quand les ressources sont disponibles.

[toussain@frontalhpc ~]$ sbatch submit.sh
Submitted batch job 2906757

Soumettre directement avec srun

La commande srun permet de définir une étape dans un script mais on peut aussi l'utiliser en ligne de commande pour soumettre directement un job (sans écrire de script). Le résultat d'exécution s'affiche alors directement à l'écran (il n'y a pas de création de fichier résultat). Les options sont les mêmes qu'avec le script, elles sont passées en ligne de commande. Exemple de soumission d'un exécutable (exe) dans la partition court pour 10 minutes :

[toussain@frontalhpc ~]$ srun --partition=court --time=10:0 ./exe 

Attention, les jobs soumis directement avec srun sont attachés au terminal, ils sont donc tués si vous fermez le terminal ou si vous vous déconnectez.