Didacticiel :
Snakemake aller plus loin avec la parallélisation

Bonjour à tous, bienvenue dans un nouvel épisode de tutoriels sur Snakemake (épisode précédent).

Aujourd'hui nous allons voir ensemble comment paralléliser facilement par la donnée grâce à Snakemake. L'idée générale consiste à découper les fichiers bruts au début de notre pipeline et de les rassembler après les étapes lourdes en calcul.

cluster_parallelisation

Nous allons également voir comment utiliser le fichier de configuration au format Json. Ce fichier est l'équivalent d'un dictionnaire/tables de hachage et peut être utilisé pour stocker les variables globales ou les paramètres utilisés par les règles. Ainsi, il sera plus facile de généraliser votre workflow et modifier les paramètres des règles sans avoir à toucher au Snakefile.

Pour l'utiliser dans un fichier Makefile il faut ajouter le mot clé :

On accède ensuite aux éléments comme si c'était un simple dico :

Un seul mot clé pour paralléliser

Seulement un nouveau mot clé (dynamic) et deux règles (découper et fusionner) sont nécessaire pour paralléliser.

Je vais prendre pour exemple le workflow du tuto précédent. Ici l'étape limitante était bwa aln (rule bwa_aln) car cette commande n'a pas d'option de parallélisation. Nous allons ainsi dépasser cette limite grâce aux deux règles suivantes :

Ces deux règles seront à adapter si vous voulez les utiliser dans le workflow du tuto précédent, ici j'ai juste voulu simplifier au maximum pour montrer la puissance de cette fonctionnalité.

Note : l'option --cluster permet d'utiliser les commandes d'un ordonnanceur (ex. --cluster 'qsub').

Aller plus loin dans l'automatisation

Le fichier configfile.json peut nous permettre d'automatiser la génération de fichiers cibles (ceux que l'on veut à la fin de notre workflow). Dans l'exemple suivant, nous allons utiliser le fichiers de configuration présenté plus tôt pour générer les fichiers cibles. Note : {exp} et {samples} vont de pairs.

Exemple du workflow avec la parallélisation :

Conclusion

Nous avons franchi un pas de plus dans l'utilisation de Snakemake avec seulement un mot clé et deux nouvelles règles. Maintenant vous allez pouvoir facilement améliorer l'efficacité de vos workflows en réduisant le temps de calcul des tâches les plus lourdes. Cependant il faut garder en tête qu'une parallélisation à outrance n'est pas forcément une bonne stratégie. Par exemple, si je décide de découper un fichier contenant 1000 lignes en 1000 fichiers d'une seule ligne et que j'ai seulement deux pauvres processeurs à ma disposition, je risque une perte de temps et non un gain. C'est donc à vous de choisir judicieusement la stratégie de parallélisation en fonction de la machine utilisée, de la taille des fichiers à découper, des logiciels/scripts et du temps supplémentaire que vos deux nouvelles règles vont ajouter au workflow.

Si vous avez des tâches très gourmandes et un cluster de calcul à disposition sachez que le gain de temps peut être impressionnant.

 

Je remercie NolwennNiGoPol et tadaima pour leur relecture et leur remarques.

Note : pour ce tutoriel, je me suis inspiré de celui-ci : https://github.com/inodb/snakemake-parallel-bwa

  • À propos de
  • Après un DUT génie biologique option bioinfo à Aurillac, j'ai poursuivi mes études avec une licence professionnelle (traitement des données génomiques) à Carcassonne puis un master (bioinformatique et biologie des systèmes) à Toulouse. J'ai ensuite eu une expérience d'un an à l'Institut de Génétique Humaine à Montpellier où je réalise actuellement une thèse.

Laisser un commentaire