Snakemake – system zarządzania przepływem pracy

Analiza dużych ilości danych często wymaga stałych, określonych zadań i skryptów. Dlatego możliwości jakie dają systemy zarządzania przepływem pracy są bezcenne w realizacji prac bioinformatycznych. W tym artykule opisujemy zasadę działania systemu Snakemake.

Czym są systemy zarządzania przepływem pracy?

Systemy zarządzania przepływem pracy (ang. workflow management system, SZPP) pozwalają na automatyzację procesów, a także tworzenie powtarzalnych i skalowalnych analiz danych. Zapewniają one doskonałą infrastrukturę do konfiguracji, kontrolowania wydajności i monitorowania zdefiniowanej sekwencji zadań. Z ich pomocą możemy tworzyć gotowe schematy reguł co ułatwi nam uruchomienie wybranych procesów w dowolnym momencie.

Snakemake – warto, czy nie warto?

Przykładowym systemem zarządzania przepływem pracy, który często wykorzystywany jest w działach bioinformatycznych, jest Snakemake. Wyróżnia go przede wszystkim:
• intuicyjne użycie oparte na regułach i zależnościach między nimi (input/output),
• czytelny kod, oparty na języku skryptowym Python,
• wsparcie dla równoległych obliczeń na wielu serwerach (SLURM, Kubernetes) oraz obliczeń “w chmurze” (Google Cloud Computing),
• integracja ze środowiskiem pracy Conda (możliwość deklaracji zależności dla środowiska uruchamiania reguł),
• aktywny rozwój (developer support).

Jak działa system zarządzania przepływem pracy Snakemake?

Wszystko opiera się o reguły, które opisują co należy zrobić, aby z danych plików wejściowych (input), przeprowadzając konkretne działania, powstały określone pliki wyjściowe (output).

Przykład prostej reguły:

rule example:
input:
infile="input_{custom}.tsv"
output:
outfile="output_{custom}.tsv"
shell: """
cat “{input.infile}” | process.sh > “{output.outfile}”
"""

Wywołanie takiej reguły odbywa się poprzez określenie pliku docelowego, w tym przypadku:

snakemake output_genXone.tsv -n

Snakemake sprawdzi, czy któraś z dostępnych reguł pasuje do wybranego pliku docelowego. W naszej przykładowej regule “example” w nazwie plików wejściowych i wyjściowych pojawiła się deklaracja tzw. symboli wieloznacznych (ang. wildcards) poprzez klamrowe nawiasy. Taki zabieg pozwala na przypisanie pod zmienną wildcards, w tym przypadku o nazwie “custom”, dowolnego ciągu znaków, który wystąpi między “input_”/”output_” a “.tsv”. W powyższym przykładowym wywołaniu tej reguły pod zmienną wildcards “custom” został przypisany tekst “genXone”.
Idąc dalej – aby utworzyć plik “output_genXone.tsv”, potrzebujemy pliku wejściowego “input_genXone.tsv”. Jeżeli taki plik jest dostępny, reguła może zostać uruchomiona, o czym poinformuje nas Snakemake. Dzięki przełącznikowi “-n” możemy podejrzeć jakie reguły zostaną uruchomione i jakie występują między nimi zależności w formie tekstowej, bez uruchamiania samych reguł.
Jeżeli utworzenie pliku wymaga uruchomienia innych reguł od siebie zależnych, Snakemake nas o tym również poinformuje.
Wizualny graf zależności możemy utworzyć poleceniem:

snakemake output_genXone.tsv --dag | dot -Tsvg > dag.svg

Przykładowy graf zależności Snakemake [https://snakemake.readthedocs.io]

Wywołanie Snakemake bez przełącznika “-n” spowoduje uruchomienie potoku zadań i powstanie oczekiwanych plików.
Po skonfigurowaniu SLURM (ang. Slurm Workflow Manager) z systemem Snakemake tę samą regułę możemy wywołać dyrektywą “ssnakemake” (podwójne “s”).

Od Make’a do Snakemake’a

 Snakemake został stworzony na podstawie paradygmatu Make GNU – przepływy pracy są definiowane zgodnie z regułami określającymi sposób tworzenia plików wyjściowych z plików wejściowych. Zależności między regułami są określane automatycznie, tworząc DAG (ukierunkowany wykres acykliczny) zadań, które mogą być automatycznie zrównoleglone.

Systemy zarządzania przepływem pracy w bioinformatyce

W analizach bioinformatycznych wykorzystywane są różne systemy zarządzania przepływem pracy. Oprócz Snakemake, są na przykład Nextflow wykorzystujący kontenery z oprogramowaniem, czy Python Celery, który w prosty sposób przetwarza dużą liczbę wiadomości. Wszystkie z nich pozwalają ustrukturyzować cykliczne analizy (pipelines) znacząco przyspieszając pracę bioinformatyków. Dzięki nim nie musimy czekać na zakończenie każdej z reguł, aby uruchomić następną – wybrany system zrobi to za nas. Snakemake dzięki kompatybilności z językiem Python i prostocie działania jest łatwo przyswajalny, a wsparcie dla obliczeń równoległych i rozwiązań chmurowych czyni go jednym z najchętniej używanych SZPP w dziedzinie bioinformatyki i nie tylko.