# Docu: comment faire tourner un script R avec SLURM

**URL:** <https://community.france-bioinformatique.fr/t/docu-comment-faire-tourner-un-script-r-avec-slurm/263>\
**Category:** IFB Core Cluster\
**Tags:** doc-du-cluster\
**Created:** [Octobre 23, 2019, 5:35 UTC](https://community.france-bioinformatique.fr/t/docu-comment-faire-tourner-un-script-r-avec-slurm/263 "2019-10-23T05:35:28Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![jvanhelden](https://community.france-bioinformatique.fr/user_avatar/community.france-bioinformatique.fr/jvanhelden/32/45_2.png) [@jvanhelden](https://community.france-bioinformatique.fr/u/jvanhelden)\
**Post date:** [Octobre 23, 2019, 5:35 UTC](https://community.france-bioinformatique.fr/t/docu-comment-faire-tourner-un-script-r-avec-slurm/263/1 "2019-10-23T05:35:28Z")

</div>

Existe--t-il une page où on explique comment lancer un script R avec srun sur le cluster ? Je suppose qu'il "n'y a qu'à" combiner quelques infos qu'on trouve à différents endroits, mais je ne suis pas sûr de savoir comment faire. Je crois que ce serait utile de faire un tuto spécifique à cette question, car elle concerne potentiellement un bon nombre d'usagers.

Pour le moment j'utilise coupablement sinteractive, mais si vous m'indiquez les bonnes pratiques je contribuerai volontiers à la rédaction d'une page de doc spécifique sur cette question.

On pourrait d'abord rappeler les principes

- ne JAMAIS faire tourner sur le noeud d'accès
- utiliser srun ou sbatch

puis les étapes:

1. Charger le module R,

2. S'assurer qu'on ait les bonnes librairies

3. Rédiger son script

4. Tester son script pas à pas pour voir comment ça tourne. Au fait comment faites-vous ?

5. Lancer le script en job, en choisissant les paramètres (mémoire, nombre de coeurs),

6. Capturer les sorties STDERR et STDOUT dans des fichiers .err et .out.  
Au fait, doit-on utiliser &1 et &2 ou bien SLURM le fait-il tout seul ? Si oui comment choisit-on le chemin de ces fichiers, ou bien comment les trouve-t-on ?

7. Vérifier le bon déroulement du script en suivant les captures de SDTOUT et STDERR

8. Accéder à ses résultats y compris les fichiers graphiques. Au fait, comment faites-vous ? Moi je monte le dossier de résultats sur mon portable, mais ce n'est peut-être pas la façon la plus correcte.

9. Récupérer les résultats sur son ordi (rsync, filezilla, coincoin)

10. ... ?

Merci

Jacques

---

<div class="post-metadata">

**Author:** ![dbenaben](https://community.france-bioinformatique.fr/user_avatar/community.france-bioinformatique.fr/dbenaben/32/43_2.png) [@dbenaben](https://community.france-bioinformatique.fr/u/dbenaben)\
**Post date:** [Octobre 29, 2019, 10:25 UTC](https://community.france-bioinformatique.fr/t/docu-comment-faire-tourner-un-script-r-avec-slurm/263/2 "2019-10-29T10:25:30Z")

</div>

Bonjour Jacques,

Quelques éléments de réponses, je laisse le soin aux collègues de me corriger ou compléter si besoin.

> Existe--t-il une page où on explique comment lancer un script R avec srun sur le cluster ?

La documentation actuelle doit encore être mise à jours pour intégrer `srun`.  
En attendant, Julien propose "The 5 minutes IFB Core Cluster tutorial" : [The 5 minutes IFB Core Cluster tutorial - asciinema.org](https://asciinema.org/a/zZrSazw5Fh7YmpHvUfvVQnzNi)

> Pour le moment j'utilise coupablement sinteractive, mais si vous m'indiquez les bonnes pratiques je contribuerai volontiers à la rédaction d'une page de doc spécifique sur cette question.

On prends évidemment toute aide pour la rédaction de documentation. Peut-être qu'une page de doc "exemple" sur l'usage du cluster via R serait utile.  
Les principes données me semblent correctes.  
Les pages de documentation ([IFB Core Cluster Documentation](https://ifb-elixirfr.gitlab.io/cluster/doc/)) sont au format Markdown et gérées via le dépôt gitlab: [Institut Français de Bioinformatique / Cluster / doc · GitLab](https://gitlab.com/ifb-elixirfr/cluster/doc/)  
La rédaction est ouverte et discuté via des "Merge Request".

> Au fait, si les librairies ne sont pas installées, peut-on en installer dans son compte ? Le fait-on avec conda ou directement via R install.package() ?

Tout est possible. On peut installer des librairies dans son /home (via conda, install.package ou autre). Et il est possible de demander ou contribuer à l'installation de ces paquets sur l'environnement commun pour qu'ils soient accessible à tous les utilisateurs.  
Suivant le cas ("test d'une librairie", "installation d'une librairie pour un groupe d'utilisateurs", etc.) on privilégiera l'une ou l'autre solution.  
Sur la méthode d'installation (conda, install.package, ...) je n'ai pas de recommandations particulières.

> Tester son script pas à pas pour voir comment ça tourne. Au fait comment faites-vous ?

Personnellement, je privilégie toujours les scripts lancé via sbatch.  
Les commandes de traitement au sein de ce script sont préfixées par srun.  
Je construis le script au fur et à mesure en testant les commandes via srun (et une fois la commande validée, je copie/colle).  
PS: j'avoue avoir découvert srun assez récemment (j'utilisais auparavant d'autre mécanisme tel que sinteractive).  
srun permets entre autre d'avoir des métriques et un suivi plus précis et il remplace avantageusement sinteractive:

```auto
$ module load r/3.5.1 
$ srun --pty R

# Toutes les commandes sont alors exécuté sur un noeud de calcul (grâce à srun)
> Sys.info()["nodename"]
               nodename 
"cpu-node-83.ifb.local" 

```

sinteractive est pour l'instant indispensable pour les commandes necessitant un affichage déporté (via X11).  
_Attention_, dans les deux cas, cela monopolise un CPU sur un nœud de calcul. De ce fait, il ne faut pas laisser traîner ce type de connexion si ce n'est pas nécessaire.

> Capturer les sorties STDERR et STDOUT dans des fichiers .err et .out.  
> Au fait, doit-on utiliser &1 et &2 ou bien SLURM le fait-il tout seul ? Si oui comment choisit-on le chemin de ces fichiers, ou bien comment les trouve-t-on ?

Slurm capture les sorties standard et d'erreur.  
Par défaut, les deux sorties sont redirigées vers un fichier "slurm-%j.out" (%j = jobid).  
A noter aussi que le fichier est remplit en "live" (et pas seulement à la fin de l'exécution du job). Cela permet donc de suivre l'exécution du job.  
Mais il est possible de changer ce comportement en spécifiant les fichiers pour chacune des sorties:

```bash
-o, --output=<filename pattern>
-e, --error=<filename pattern>

```

> Vérifier le bon déroulement du script en suivant les captures de SDTOUT et STDERR

Oui en suivant le/les fichiers de sorties.

Pour avoir des inforamtions sur le/les jobs, j'aime bien utiliser aussi les commandes suivantes:

```auto
# Voir les jobs
squeue -l
# Voir mes jobs
squeue -l -u $USER

# Information sur le job
scontrol show job <jobid>

# Si on utilise srun, on peut avoir des informations précises sur les ressources utilisées
# Par exemple avec la commande ci-dessous (chaque "step" étant une commande srun):
sstat --allsteps --format=JobID,AveCPU,AveRSS,AveVMSize,AveDiskRead,AveDiskWrite,NTasks -j <jobid>

# La commande sacct remonte également beaucoup d'information sur les jobs et les ressources utilisés
sacct
# Ou en sélectionnant les colonnes qui m'interessent
sacct --format=JobID,JobName,State,Elapsed,Partition,ReqCPUS,ReqMem,ReqNodes,NodeList,AveCPU,AveRSS,AveVMSize,AveDiskRead,AveDiskWrite,ExitCode -j <jobid>

```

J'aime bien également recevoir un email en début/fin du job en spécifiant les options suivants à sbatch:

```auto
--mail-user=email@address
--mail-type=ALL

```

> Accéder à ses résultats y compris les fichiers graphiques.

Quelques infos complémentaire: [https://ifb-elixirfr.gitlab.io/cluster/doc/data/](https://ifb-elixirfr.gitlab.io/cluster/doc/data/)

> Récupérer les résultats sur son ordi (rsync, filezilla, coincoin)

Sans oublier `scp` 🙂

Peut-être que d'autres personnes auront d'autres pratiques ?  
N'hésitez pas venir partager vos façons de faire, questionnements ou conseils.

Bonne journée

---

<div class="post-metadata">

**Author:** ![jvanhelden](https://community.france-bioinformatique.fr/user_avatar/community.france-bioinformatique.fr/jvanhelden/32/45_2.png) [@jvanhelden](https://community.france-bioinformatique.fr/u/jvanhelden)\
**Post date:** [Novembre 1, 2019, 9:00 UTC](https://community.france-bioinformatique.fr/t/docu-comment-faire-tourner-un-script-r-avec-slurm/263/3 "2019-11-01T09:00:05Z")

</div>

Merci David!

J'ai progressé sur la façon de lancer des scripts R avec srun + sbatch mais je ne suis pas encore au point. Comme j'avais lancé la question sur le site support, je propose de poursuivre à cet endroit.

> **[Running parallel jobs based on Rscript](https://community.france-bioinformatique.fr/t/rscript-via-srun/268)**
>
> Bonjour, J'ai un script R qui fait une évaluation comparative de méthodes l'apprentissage (RF, KNN, SVM) sur des jeux de données RNA-seq, en parallélisant les tests avec la librairie R doParallel. Les analyses prennent pas mal d'heures. ...

On pourra ensuite revenir à la doc, après avoir défini les bonnes pratiques pour lancer des jobs Rscript via srun et sbatch, et pour suivre leur exécution.

OK pour toi ?

Jacques

---

<div class="post-metadata">

**Author:** ![dbenaben](https://community.france-bioinformatique.fr/user_avatar/community.france-bioinformatique.fr/dbenaben/32/43_2.png) [@dbenaben](https://community.france-bioinformatique.fr/u/dbenaben)\
**Post date:** [Novembre 4, 2019, 8:45 UTC](https://community.france-bioinformatique.fr/t/docu-comment-faire-tourner-un-script-r-avec-slurm/263/4 "2019-11-04T08:45:01Z")

</div>

Bonjour Jacques,

Ça me va bien 👍

Les exemples données par Julien ([Running parallel jobs based on Rscript - #11 par julien - Support IFB Core Cluster - IFB Community Support](https://community.cluster.france-bioinformatique.fr/t/running-parallel-jobs-based-on-rscript/268/11)) me semblent nikel.

A bientôt
