Installation globale CulebrONT snakemake

Bonjour,
Nous sommes entrain de développer CulebrONT https://culebront-pipeline.readthedocs.io/en/latest/ et nous souhaiterions effectuer une installation globale en module load sur le cluster IFB et éventuellement trouver une solution générique pour l’exécution du workflow (profiles ou --drmaa).
Seriez-vous partant pour une discussion avec nous, vos collègues de la plateforme South Green :sweat_smile: ?
Amitiés
Julie Orjuela et Sébastien Ravel

Mais oui ! Je propose une petite visio.

Voici quelques propositions de date :

  • lundi 25 à 11h
  • mardi 26 à 17h
  • mercredi 27 à 9h
  • jeudi 28 à 14h

Je vous laisse m'indiquer si une de ces dates vous conviendrait.
Ping @team.software

Vous pouvez aussi démarrer une proposition de cet outil sur https://gitlab.com/ifb-elixirfr/cluster/tools pour rentrer directement dans le vif du sujet !

A bientôt,

Julien

Bonjour Julien et @team.software
Jeudi 28 à 14h sera parfait.
Merci :nerd_face:

@julien c'est toujours bon pour jeudi?

Oui c'est bon pour moi.
Je vous enverrai un lien visio en message privé.

Bonjour,

J'ai expérimenté le système de "profile" de Snakemake afin de voir dans quelle mesure il peut être adapté à vos besoins.

Les "profiles" snakemake permettent de définir en ensemble d'options par défaut lors de l'utilisation de snakemake. Ces options peuvent conserver aussi bien la commande snakemake (--jobs, --rerun-incomplete`, etc) que les options d'utilisation du cluster (partition, ressources par défaut, etc.). Dans un profile il est possible définir également des scripts qui seront utilisé pour contrôler l'execution des jobs sur un cluster.

En ensemble de modèles de profile sont proposés sur github avec des scripts prédéfinis pour les gestionnaires de fil les plus courants et notamment pour SLURM : https://github.com/Snakemake-Profiles/slurm
Dans le cadre du profile pour SLURM, il est possible de définir des options de resources par défaut en créant un fichier de type cluster_config.yml qui est déprécié côté snakemake :wink:
Voir https://github.com/Snakemake-Profiles/slurm#cluster-configuration-file

Au final, une fois qu'on a définit proprement son profile Snakemake, il est possible de remplacer un appel compliqué de ce type :

snakemake --default-resources cpus=1 memory=100 --cluster "sbatch --partition=fast --cpus-per-task={resources.cpus} --mem={resources.memory} -J {name} --output=logs/cluster/{rule}.{wildcards}.out --error=logs/cluster/{rule}.{wildcards}.err" --jobs=100 --use-envmodules --rerun-incomplete

par

snakemake --profile default

(A noter que DRMAA ne semble par supporté pour l'instant au travers des profiles)

Il est toujours possible de définir des ressources spécifiques par rule en les déclarant directement dans le Snakefile. Par exemple :

rule trim:
  input:
    "tmp/{sample}.fastq"
  output:
    temp("tmp/{sample}_shorter.fastq")
  envmodules:
    "fastx_toolkit/0.0.14"
  resources: mem_mb=200
  shell:
    "fastx_trimmer -f 1 -l 100 -Q 33 -i {input} -o {output}"

Snakemake cherche les profiles dans un dossier système (généralement /etc/xdg/snakemake) ou dans le dossier personnel de l'utilisateur (généralement ~/.config/snakemake).
Le gros problème est qu'il n'y a pas de notion de profile par défaut. Ainsi, il faut absolument donner un nom de profile ou un chemin vers un profile si on souhaite utiliser cette fonctionnalité.

Dans le cadre de CulebrONT il semble donc compliqué de définir une commande snakemake qui fonctionnera sur tous les clusters en utilisant l'option profile...

De ma compréhension, le système de profile semble surtout prévu pour permette à chaque utilisateur de définir ses pré-réglages par défaut ou éventuellement aux admins de cluster de proposer une configuration standard mais qu'ils devront documenter pour leurs utilisateurs.

A la limite, le script de lancement de CulebrONT pourrait chercher s'il trouve un profile "par défaut" sur le système et tenter de l'utiliser. Cependant, il n'y aura aucune garantie pour que la syntaxe des resources utilisées dans votre Snakefile soit compatible avec le profile utilisé...

Pour créer un package conda pour CulebrONT qui soit compatible avec le plus grand nombre de cluster, il me semble donc préférable d'utiliser le mode DRMAA sans les profiles avec une ligne de commande de ce type :

snakemake --default-resources cpus=1 memory=100 --drmaa "--cpus-per-task={resources.cpus} --mem={resources.memory} -J {name} --output=logs/cluster/{rule}.{wildcards}.out --error=logs/cluster/{rule}.{wildcards}.err" --jobs=100 --use-envmodules [...]

C'est ce qui vous garantira la compatibilité avec le plus grand nombre d'infrastructures de calcul.

Je vous conseille cet article de blog qui résume bien le foncitonnement et l'utilisation des "profiles" Snakemake : http://bluegenes.github.io/Using-Snakemake_Profiles/

Julien

Salut Julien et al,

Merci pour ton retour, alors pour résumer on laisse tomber les profiles même si l'option --cluster sera deprecated?. On va donc tester le --drmaa, est-ce que vous avez des exemples des wrapper qui fonctionnent sur slurm et sge?

De notre coté on a commencé les test des modules envs et ça a l'air de marcher, il nous manque encore de finir de faire quelques modules sur notre cluster i-Trop et de tester (en vrai, pas en dryrun).
On reviens vers vous quand on aura des nouvelles.

Merci et à bientot

Julie et l’équipe CulebrONT :nerd_face: