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:

Bonjour @julien
On viens de faire une nouvelle release. On a intégré les modules envs. On a simplifié pas mal la manière d'ajouter les dépendances sur CulebrONT. On a fait un seul singularity contentant l'ensemble de conda. Cela évite donc que les containers conda se buident n'importe où chaque fois que l'user lance CulebrONT et facilite l'install.
Pour DRMAA, je suis entrain de le tester, je te tiens au courant!
Julie

Bonjour @julieOrjuela ,

Merci pour ces nouvelles.
L'approche Singularity permettra effectivement de faciliter l'utilisation du workflow avec un côté "clé en main" très agréable. Nous sommes à ta disposition pour organiser le déploiement sur les clusters IFB !

A bientôt,

Julien

Salut @julien

J'ai du mal avec le drmaa, en fait pour culebrONT on a implementé un wrapper SLURM selon
cette doc de snakemake Executing Snakemake — Snakemake 4.5.1 documentation

" When executing a workflow on a cluster using the --cluster parameter, Snakemake creates a job script for each job to execute. This script is then invoked using the provided cluster submission command (e.g. qsub). Sometimes you want to provide a custom wrapper for the cluster submission command that decides about additional parameters. As this might be based on properties of the job, Snakemake stores the job properties (e.g. rule name, threads, input files, params etc.) as JSON inside the job script. For convenience, there exists a parser function snakemake.utils.read_job_properties that can be used to access the properties. The following shows an example job submission wrapper: "

#!python
import os
import sys

from snakemake.utils import read_job_properties

jobscript = sys.argv[1]
job_properties = read_job_properties(jobscript)

# do something useful with the threads
threads = job_properties[threads]

# access property defined in the cluster configuration file (Snakemake >=3.6.0)
job_properties["cluster"]["time"]

#on envoie au système le nouveau jobscript avec les ressources qu'on a récupéré dans le cluster_config
os.system("qsub -t {threads} {script}".format(threads=threads, script=jobscript))

Dans la commande que tu as posté plus haut, on remplace le --cluster par --drmaa et on donne les paramètres apres à drmaa tels que {resources.memory} etc

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 [...]

Mon problèmes es que je ne sais pas comment passer les {resources.cpus} etc à drmaa...
cette variable ressources tu la récupères d'ou?
Je ne sais pas si je suis claire (c'est la fin de la journée) :sleepy:

Peut être que tu auras de exemples avec d'autres pipeline de la communauté :grinning:

Merci
Julie

Bonjour, Je reviens vers vous pour le déploiement de CulebrONT sur l'IFB via un module load.
Nous avons changer pour les Modules load avec snakemake.
du coup il me faudrai les outils suivants dans leur dernière version:

  • WEESAM
  • MAUVE
  • SHASTA
  • MINIPOLISH
  • SMARTDENOVO
  • MINIASM
  • RACON
  • NANOPOLISH

Merci d'avance

Hello Julien et l’équipe,

J'imagine que vous êtes débordés!

Nous avons récemment fait une release de CulebrONT. Nous avions réussi à faire les profiles et nous avons déjà testé ce profiles sur IFB. Est-ce qu'on peut envisager maintenait une install global chez vous?. Nous sommes disponibles pour vous aider, nous avons mis la documentation à jour à fin de faciliter la démarche.

Merci pour ton retour! à bientôt! :trophy:

Julie

Bonjour Julie,
Désolé pour ce retour tardif.
Comment peut-on reprendre les choses pour CulebrONT afin de le rendre dispo facilement sur le cluster.
Pendant l'été, mon collègue David a installé l'ensemble des dépendances du workflow sous la forme de module distincts (Installation SOFT pour CulebrONT).

Est-ce que tu penses qu'on pourrait faire mieux et proposer CulebrONT directement sous la forme d'un module ?

A bientôt,

Julien

Salut Julien
Merci pour ton message, on a vu que les modules sont disponibles! c'est cool.
Oui, on peut faire un module pour CulebrONT, on a mis a disposition un exemple https://github.com/SouthGreenPlatform/CulebrONT_pipeline/blob/master/gift_files/CulebrONT_envmodules
Est-ce que tu veut qu'on se zoom ? ou voulez vous essayer de l'nstaller en suivant la doc?
Merci!!
Julie

D'accord, je vois l'idée.
Est-ce que vous avez une package conda qui nous permettrait de déployer le pipeline en lui-même (ce qui se trouve dans /path/to/CulebrONT_pipeline) ?

Julien

non, on n'a pas de conda, le /path/to/CulebrONT_pipeline est celui du git clone.
On avait parlé de faire un conda pour faciliter l'install mais on ne sais pas trop faire des packages conda :pleading_face: on veut bien de l'aide des experts :innocent:

par contre, pour la génération du report, à fin d’éviter de demander l'install de toutes les dépendances de R on a fait un conteneur singularity. Cette image peut être ajouté dans un module load puis être ajouté dans la liste des modules loads de CulebrONT_envmodules ...

Si je comprend bien, dans cette image Singularity il y a toutes les dépendances (pas que les dépendances R).
Il ne manquerait que snakemake ainsi que le contenu du dépôt git et on aurait une image clé en main nan ?

en fait plus au moins,

  • Si tu lances culebront en mode use-envmodules il a besoin de la liste des outils que vous avez deja installé en mode load, ce qu'il manquerait c'est juste des dépendances R qui sont utilisés dans le report. Ces dependances sont dans le "Singularity.report.def" (ou deja buildés ici )
  • Si tu lances culebront en mode singularity on met a disposition 2 containers : 1 avec tous les soft (singularity.culebront.def), et un 2eme, le "Singularity.report.def".

en fait les dépendances de culebront, sont python3, snakemake, cookiecutter pour les profiles, singularity (si on est en --use-singularity)

je ne sais pas si je suis claire :S

Je vais essayer de partir de singularity.culebront.def pour déployer une version de CulebrONT clé en main sur le cluster.
Je te partage la MR dès que j'ai démarré !