Tutoriel : accès et utilisation des clusters de calculs.

Posted on Thu 14 May 2020 in tutoriels • 7 min read

Pourquoi ce tutoriel ?

Une lecture attentive de ce tutoriel vous permettra de commencer à utiliser les clusters de calcul disponibles au LJK. Vous y trouverez les étapes classiques (connexion, lancement de calculs) et quelques exemples d’utilisation. Pour une utilisation avancée, la lecture de la documentation de GRICAD reste indispensable.

Pré-requis

  • Quelques bases en commandes linux.

Pour se former

Voir par exemple ce cours que nous donnons au collège doctoral, les bases du système Linux pour le calcul scientifique

Etapes

Dans ce tuto, nous répondrons aux deux questions suivantes

  • Comment aller sur les clusters ?

  • Comment travailler sur les clusters ?

    Travailler sur un cluster implique de le partager avec de nombreux autres utilisateurs, ayant tous des besoins différents (d’un point de vue logiciel). L’environnement par défaut est minimal, il est impossible de mettre en place un environnement logiciel qui convienne à tous.

    Par conséquent, vous aurez besoin :

    • d’un outil de partage des ressources (noeuds, coeurs …), pour planifier vos jobs. C’est le rôle du “batch scheduler” OAR,

    • d’un outil pour construire votre environnement logiciel et ses dépendances. Il faudra choisir parmi guix, nix, singularity …

Accès au service : Perseus

Pour utiliser les clusters de calcul il est nécessaire :

  • d’être enregistré dans le système d’information de GRICAD, Perseus,
  • d’être membre d’un projet déclaré via cette même interface.

Warning

  • Seuls les membres permanents ont le droit de créer des projets
  • Lors de votre inscription, renseignez correctement le champ “LAB” en précisant bien LJK.

Pour plus de détails, nous vous invitons fortement à lire cette page : https://gricad-doc.univ-grenoble-alpes.fr/services/

Accès aux clusters

Le chemin vers les clusters est représenté sur le schéma ci-dessous :

Proxy command SSH: schéma de principe

Votre objectif est maintenant de pouvoir faire sur votre machine personnelle

monlogin@mamachine$ ssh luke.gricad

pour accèder directement sur la frontale d’un cluster (Luke dans le cas présent).

Pour cela, il faudra :

Tip

Si vous êtes pressé, voici un résumé des commandes à exécuter, mais nous vous recommandons quand même de suivre le détail des étapes décrites ci-après.

Générer une paire de clés SSH

Attention

Cette étape n’est nécessaire que si vous ne possédez pas déja un jeu de clés !

Vérifiez le contenu du répertoire .ssh/.

monlogin@mamachine$  cd
monlogin@mamachine$  ls .ssh/
id_rsa id_rsa.pub

Si il contient deux fichiers id_rsa et id_rsa.pub vous pouvez passer à l’étape suivante.

Dans le cas contraire, il faut générer des clés :

monlogin@mamachine$  ssh-keygen -t rsa

Répondez simplement aux questions en laissant les valeurs par défaut, sauf si vous savez ce que vous faites.

Ayez bien en tête que lors de la création des votre paire de clés, vous devez fournir une passphrase non vide, ce qui doit normalement être plus long qu’un mot de passe.

Dans tous les cas, faites attention lorsque vous essayez de vous authentifier. Lorsque vous vous identifiez avec :

  • vos identifiants Perseus : on vous demandera votre password
  • votre paire de clés SSH : le système vous demandera votre passphrase.

Après cette étape, deux fichiers ont été générés :

  • .ssh/id_rsa : votre clé privée et strictement personnelle
  • .ssh/id_rsa.pub : la clé publique correspondante à votre clé privée.

Configurer le ProxyCommand SSH

Ou “comment automatiser le rebond sur la passerelle ?”.

Pour cela, il faut créer ou ajouter ces lignes à un fichier .ssh/config dans votre répertoire personnel.

# Connexion aux machines GRICAD
Host *.gricad
    User votre_login_perseus
    ProxyCommand ssh -q <votre_login_perseus>@access-gricad.univ-grenoble-alpes.fr "nc -w 60 `basename %h .gricad` %p"
    ForwardAgent yes

Pour les utilisateurs Mac OS, il est recommandé d’ajouter ces lignes à la fin du fichier .ssh/config.

Host *
      UseKeychain yes
      AddKeysToAgent yes
      SendEnv LANG LC_*

Distribuer votre clé publique

Distribuer tout d’abord votre clé publique sur la passerelle.

Depuis votre machine faites :

monlogin@mamachine$ ssh-copy-id mon_login_perseus@rotule.u-ga.fr
# ou / et
monlogin@mamachine$ ssh-copy-id mon_login_perseus@trinity.u-ga.fr

Comme indiqué plus haut, le système vous demande ici votre password Perseus.

Vérifier ensuite que cette étape fonctionne (toujours depuis votre machine):

monlogin@mamachine$ ssh mon_login_perseus@access-gricad.univ-grenoble-alpes.fr

A cette étape, le système vous demande la passphrase de votre paire de clés SSH.

Vous devriez maintenant être connecté sur la passerelle (regarder le prompt pour vous assurer de cela).

Si tout c’est bien passé, vous pouvez maintenant copier votre clé plublique sur la frontale de chaque cluster auquel vous souhaitez acceder (Luke, Dahu, Bigfoot). (Pensez à vous déconnecter de la passerelle avant de poursuivre)

monlogin@mamachine$ ssh-copy-id dahu.gricad

Selon votre configuration locale, vous allez devoir fournir votre passphrase 2 fois pour vous connecter successivement sur la passerelle puis sur la frontale du cluster.

Pour éviter ce phénomène, nous vous encourageons à utiliser un agent SSH (sur votre système) qui mémorisera votre passphrase pendant la durée de votre session sur votre ordinateur.

Félicitations ! Vous êtes connecté sur le cluster. Si ce n’est pas le cas, n’hésitez pas à prendre contact avec nous.

Pour aller plus loin…

Pour de plus amples informations, vous pouvez vous reporter aux documentations suivantes :

Composer mon environnement :

Vous avez un projet Perseus, vous êtes capable de vous connecter sur un cluster, mais sur la frontale, il est peu probable que vous trouviez les logiciels dont vous avez besoin. En effet, les clusters étant partagés par de nombreux utilisateurs, il n’existe pas d’environnement magique qui convienne à tout le monde. Vous devrez donc le construire et l’adapter à vos besoins.

Comment ?

Plusieurs options s’offrent à vous : nix, guix, conda, modules, singularity …

Que choisir ?

Il n’y a pas d’outil miracle, tout dépendra des logiciels dont vous aurez besoin.

Bonne pratique

Nous vous recommandons de nous lister les softs nécessaires pour que nous puissions vous aiguiller vers le gestionnaire d’environnement le plus adapté à votre besoin.

Dans le doute, nous vous conseillons d’opter pour guix, qui, de notre point de vue, est le plus simple et le plus fonctionnel.

Guix express

Pour un apreçu rapide de l’utilisation de GUIX, consultez la Guix cheatsheet.

Voici quelques cas d’usage classiques :

Pour aller plus loin :

Réserver des ressources et lancer ses codes

Pour lancer un calcul, il faut passer par OAR (gestionnaire de batch) pour réserver des ressources et/ou planifier le lancement de votre calcul.

La documentation complète est disponible sur le site de Gricad.

Pour une rapide revue des utilisations classiques de oar, consultez l’aide-mémoire

Voici deux scénari standards et un résumé des quelques commandes qui vous permettront de démarrer sereinement.

Tuto 1 : mode Interactif, pour le prototypage et les tests.

Objectif

Exécuter R sur un noeud de calcul, en interactif.

Méthode

Depuis la frontale d’un cluster (luke dans cet exemple) :

monlogin@luke$ oarsub -I --project=Mon_projet -l /nodes=1/core=2,walltime=02:00:00
[ADMISSION RULE] Modify resource description with type constraints
[PROJECT] Adding project constraints: (team='ljk' or team='ciment' or team='visu')
[ADMISSION RULE] Modify resource description with type constraints
OAR_JOB_ID=39620730
Interactive mode: waiting...
Connect to OAR job 39620730 via the node luke38
  • -I comme interactif
  • \(-\ell\) nodes=X/core=Y à lire de droite à gauche : signifie “je veux Y coeurs par noeud sur X noeud”.
  • Toujours préciser le nom du projet
  • Durée par défaut : 2h

Voila ! Vous êtes connecté sur luke38 et en mesure de lancer vos calculs :

monlogin@luke38$ source /applis/site/guix-start.sh
monlogin@luke38$ R
R version 4.0.0 (2020-04-24) -- "Arbor Day"
Copyright (C) 2020 The R Foundation for Statistical Computing
...

Puis quand vous avez terminé, il suffit de libérer les ressources en quittant le noeud

monlogin@luke38$ exit
logout
Connection to luke38 closed.
Disconnected from OAR job 39620730.

et vous voila de retour sur la frontale.

Vous auriez pu également demander un noeud précis, luke42 par exemple :

monlogin@luke$ oarsub -I --project=siconos -p "network_address='luke42'" -l /nodes=1/core=2
[ADMISSION RULE] Set default walltime to 7200.
[ADMISSION RULE] Modify resource description with type constraints
[PROJECT] Adding project constraints: (team='ljk' or team='ciment' or team='visu')
[ADMISSION RULE] Modify resource description with type constraints
OAR_JOB_ID=39621434
Interactive mode: waiting...
[2020-07-07 15:34:22] Start prediction: 2020-07-07 15:34:22 (R=2,W=2:0:0,J=I,P=siconos (Karma=0.000,quota_ok))
Starting...

Connect to OAR job 39621434 via the node luke42

Tuto 2 : mode Batch, pour lancer des calculs plus conséquents.

Le mode interactif est pratique pour de petits calcul, du debug, des tests mais insuffisant et peu pratique pour des calculs longs. Nous allons maintenant voir comment décrire et enregistrer un job dans une file d’attente.

Objectif

Soumettre un job en mode batch sur le cluster dahu.

Méthode

Sur la frontale du cluster dahu :

  1. descrire vos besoins (ressources, commandes à lancer) dans un script
  2. soumission : le job passe dans la file d’attente et sera exécuté quand les ressources seront disponibles.

Le script monscript.sh

#!/bin/bash
# -- Un nom pour le job --
#OAR -n MonJob
# -- Description des ressources souhaitées --
#OAR -l /nodes=1/core=3,walltime=00:01:30
# -- Et bien sur, le projet Perseus --
#OAR --project test

# -- Puis la liste des commandes à exécuter --
source /applis/site/guix-start.sh
cd /bettik/$USER/
/bin/ls >> test.txt
source /applis/site/guix-start.sh
python -c 'print("hello")'

Warning

  • Les lignes commençant par #OAR ne sont pas des commentaires !
  • Le script doit être executable

A faire lors de la création du fichier :

monlogin@f-dahu$ chmod + x monscript.sh

Tout est prêt, il ne reste plus qu’a placer notre job dans la file d’attente :

monlogin@f-dahu$ oarsub -S ./monscript.sh
[ADMISSION RULE] Modify resource description with type constraints
[PROJECT] Adding project constraints: (team='ljk' or team='ciment' or team='visu')
[ADMISSION RULE] Modify resource description with type constraints
OAR_JOB_ID=39623764

Suite à cette commande, vous restez sur la frontale et votre job est en attente. Deux premiers réflexes :

  • utilisez la commande oarstat pour suivre votre job (voir Suivre un job)
  • vérifiez la présence des deux fichiers suivants :
monlogin@f-dahu$ ls
OAR.MonJob.39623764.stderr
OAR.MonJob.39623764.stdout

Le premier contient une capture de la sortie erreur (vide si tout va bien) et le second la sortie standard de vos calculs.

monlogin@f-dahu$ less OAR.MonJob.39623764.stdout
hello

Autres pointeurs utiles

Résumé : une séquence de calcul “standard”

En résumé, lancer un calcul sur le cluster doit correspondre plus ou moins à la séquence suivante :

  • Connection sur une frontale.
  • Préparation de l’environnement de travail (guix …).
  • Ecriture d’un script oarscript.sh.
  • Oarsub -S ./oarscript.sh.
  • Vérification du fichier OAR….stderr.
  • Suivi du job (oarstat, htop, monitoring oar, …).
  • Attendre …
  • Récupération des résultats dans /bettik/$USER ou ailleurs.
  • Nettoyage ! Suppression de tous les fichiers dont vous n’avez plus besoin.

Warning

Ne négligez pas cette dernière étape et prenez le temps de nettoyer vos espaces sur le disque.