Snakemake aller plus loin avec la parallélisation

Bon­jour à tous, bien­ve­nue dans un nou­vel épi­sode de tuto­riels sur Sna­ke­make (épi­sode pré­cé­dent).

Aujourd'hui nous allons voir ensemble com­ment paral­lé­li­ser faci­le­ment par la don­née grâce à Sna­ke­make. L'idée géné­rale consiste à décou­per les fichiers bruts au début de notre pipe­line et de les ras­sem­bler après les étapes lourdes en cal­cul.

cluster_parallelisation

Nous allons éga­le­ment voir com­ment uti­li­ser le fichier de confi­gu­ra­tion au for­mat Json. Ce fichier est l'équivalent d'un dictionnaire/​tables de hachage et peut être uti­li­sé pour sto­cker les variables glo­bales ou les para­mètres uti­li­sés par les règles. Ain­si, il sera plus facile de géné­ra­li­ser votre work­flow et modi­fier les para­mètres des règles sans avoir à tou­cher au Sna­ke­file.

Pour l'utiliser dans un fichier Make­file il faut ajou­ter le mot clé :

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

Un seul mot clé pour paralléliser

Seule­ment un nou­veau mot clé (dyna­mic) et deux règles (décou­per et fusion­ner) sont néces­saire pour paral­lé­li­ser.

Je vais prendre pour exemple le work­flow du tuto pré­cé­dent. Ici l'étape limi­tante était bwa aln (rule bwa_​aln) car cette com­mande n'a pas d'option de paral­lé­li­sa­tion. Nous allons ain­si dépas­ser cette limite grâce aux deux règles sui­vantes :

Ces deux règles seront à adap­ter si vous vou­lez les uti­li­ser dans le work­flow du tuto pré­cé­dent, ici j'ai juste vou­lu sim­pli­fier au maxi­mum pour mon­trer la puis­sance de cette fonc­tion­na­li­té.

Note : l'option –clus­ter per­met d'utiliser les com­mandes d'un ordon­nan­ceur (ex. –clus­ter 'qsub').

Aller plus loin dans l'automatisation

Le fichier configfile.json peut nous per­mettre d'automatiser la géné­ra­tion de fichiers cibles (ceux que l'on veut à la fin de notre work­flow). Dans l'exemple sui­vant, nous allons uti­li­ser le fichiers de confi­gu­ra­tion pré­sen­té plus tôt pour géné­rer les fichiers cibles. Note : {exp} et {samples} vont de pairs.

Exemple du work­flow avec la paral­lé­li­sa­tion :

Conclusion

Nous avons fran­chi un pas de plus dans l'utilisation de Sna­ke­make avec seule­ment un mot clé et deux nou­velles règles. Main­te­nant vous allez pou­voir faci­le­ment amé­lio­rer l'efficacité de vos work­flows en rédui­sant le temps de cal­cul des tâches les plus lourdes. Cepen­dant il faut gar­der en tête qu'une paral­lé­li­sa­tion à outrance n'est pas for­cé­ment une bonne stra­té­gie. Par exemple, si je décide de décou­per un fichier conte­nant 1000 lignes en 1000 fichiers d'une seule ligne et que j'ai seule­ment deux pauvres pro­ces­seurs à ma dis­po­si­tion, je risque une perte de temps et non un gain. C'est donc à vous de choi­sir judi­cieu­se­ment la stra­té­gie de paral­lé­li­sa­tion en fonc­tion de la machine uti­li­sée, de la taille des fichiers à décou­per, des logiciels/​scripts et du temps sup­plé­men­taire que vos deux nou­velles règles vont ajou­ter au work­flow.

Si vous avez des tâches très gour­mandes et un clus­ter de cal­cul à dis­po­si­tion sachez que le gain de temps peut être impres­sion­nant.

 

Je remer­cie Nol­wennNiGo­Pol et tadai­ma pour leur relec­ture et leur remarques.

Note : pour ce tuto­riel, je me suis ins­pi­ré de celui-ci : https://​github​.com/​i​n​o​d​b​/​s​n​a​k​e​m​a​k​e​-​p​a​r​a​l​l​e​l​-​bwa



Pour continuer la lecture :


Commentaires

Laisser un commentaire