Réaliser du multi threads qd on emboite singularity, docker, snakemake ?

Bonjour,
Je n'arrive pas à paramétrer l'usage de /plusieurs cores/ou multi threads/, probablement parce que je ne transmets pas cette demande à toutes les couches qui sont imbriquées dans mon protocole :
slurm (avec --cpus-per-task) qui lance singularity (pour du docker) avec l'exécution d'un shell qui, après le download des données, lance leur analyse avec snakemake (avec -j $SLURM_CPUS_PER_TASK).

Mon objectif aurait été qu'en augmentant --cpus-per-task on gagne un peu de temps sur l’exécution du script. Mais j'obtiens toujours ~ 25 minutes (avec 1 ou 8 CPU) : il y a donc qqch qui m’échappe : donc Grand Merci d'avance pour l'aide ...
Claire.


Hormis le script pour slurm (cf. + bas), tous les codes sont ici :

Voici le protocole suivi :

  1. ssh @core.cluster.france-bioinformatique.fr
  2. git clone https://github.com/thomasdenecker/FAIR_Bioinfo.git
  3. cd FAIR_Bioinfo
  4. 2 modifs du FAIR_script.sh : i) replacement de "snakemake -j 6" par "snakemake -j $SLURM_CPUS_PER_TASK" et ii) mise en commentaire de la dernière ligne (pour ne pas lancer l'appli shiny)
  5. singularity pull docker://tdenecker/fair_bioinfo
  6. sbatch fair_bioinfo.slurm

le run complet prend ~ 25 minutes ...

fair_bioinfo.slurm :


#!/bin/bash
#SBATCH -o slurm.%N.%j.out
#SBATCH -e slurm.%N.%j.err
#SBATCH --partition fast
#SBATCH --cpus-per-task=8
#SBATCH --mem 48GB

singularity exec -B $PWD:/home/rstudio fair_bioinfo_latest.sif bash ./FAIR_script.sh


Votre approche me semble correct. Le 8 coeurs réservés par sbatch seront bien disponible pour le processus singularity.
Je ne suis pas sûr de bien comprendre l'option -j de snakemake qui semble permettre de préciser un nombre de coeurs, cependant, cette option semble permettre à snakemake de lancer plusieurs processus (rules) en parallèle. Il me semble qu'il y ait une confusion entre la notion de coeurs SLURM (qui correspondent d'avantage à des threads) et coeurs Snakemake qui correspondent à des processus.

Vous serait-il possible de modifier FAIR_script.sh pour demander à Snakemake de soumettre des jobs SLURM pour chaque rule, par exemple en utilisant l'option --cluster "sbatch" ?

Bonjour Julien,
Merci pour la proposition. J'ai ajouté l'option --cluster "sbatch" au lancement du snakemake mais cela bloque avec : "/bin/sh: 1: sbatch: not found".

C'est ok maintenant ! merci pour le soutien.
Le temps calcul est bien fonction du nombre de cpu_per_task. Je pense que i) je n'avais pas tout bien paramétré mais surtout ii) je n'avais pas compris tout de suite que le gain de temps était déjà atteint avec 6 cpu_per_task (du coup, je ne comprenais pas pourquoi je ne gagnais rien en passant de 6 à 8 cpu_per_task).

1 « J'aime »