Ausführen von Befehlen mit Snakemake
Zuletzt aktualisiert am 2025-04-05 | Diese Seite bearbeiten
Übersicht
Fragen
- “Wie führe ich einen einfachen Befehl mit Snakemake aus?”
Ziele
- “Erstelle ein Snakemake-Rezept (eine Snake-Datei)”
Für welchen Arbeitsablauf interessiere ich mich?
In dieser Lektion werden wir ein Experiment durchführen, bei dem wir eine parallel laufende Anwendung auf ihre Skalierbarkeit hin untersuchen. Dazu müssen wir Daten sammeln. In diesem Fall bedeutet das, dass wir die Anwendung mehrmals mit einer unterschiedlichen Anzahl von CPU-Kernen ausführen und die Ausführungszeit aufzeichnen. Danach müssen wir eine Visualisierung der Daten erstellen, um zu sehen, wie sie sich im Vergleich zum Idealfall verhalten.
Anhand der Visualisierung können wir dann entscheiden, in welchem Maßstab es am sinnvollsten ist, die Anwendung in der Produktion laufen zu lassen, um die CPU-Zuweisung auf dem System optimal zu nutzen.
Wir könnten all dies manuell tun, aber es gibt nützliche Tools, die uns bei der Verwaltung von Datenanalyse-Pipelines, wie wir sie in unserem Experiment haben, helfen. Heute werden wir eines dieser Tools kennenlernen: Snakemake.
Um mit Snakemake zu beginnen, nehmen wir zunächst einen einfachen
Befehl und sehen, wie wir ihn mit Snakemake ausführen können. Wählen wir
den Befehl hostname
, der den Namen des Rechners ausgibt,
auf dem der Befehl ausgeführt wird:
AUSGABE
node1.int.jetstream2.hpc-carpentry.org
Das gibt das Ergebnis aus, aber Snakemake verlässt sich auf Dateien, um den Status Ihres Workflows zu kennen, also leiten wir die Ausgabe in eine Datei um:
Erstellen einer Snake-Datei
Bearbeiten Sie eine neue Textdatei mit dem Namen
Snakefile
.
Inhalt von Snakefile
:
PYTHON
rule hostname_login:
output: "hostname_login.txt"
input:
shell:
"hostname > hostname_login.txt"
Wichtige Punkte zu dieser Datei
- Die Datei heißt
Snakefile
- mit einem großenS
und ohne Dateierweiterung. - Einige Zeilen sind eingerückt. Einrückungen müssen mit Leerzeichen, nicht mit Tabulatoren erfolgen. Wie Sie Ihren Texteditor dazu bringen, dies zu tun, erfahren Sie im Abschnitt “Setup”.
- Die Regeldefinition beginnt mit dem Schlüsselwort
rule
, gefolgt von dem Namen der Regel und einem Doppelpunkt. - Wir haben die Regel
hostname_login
genannt. Sie können Buchstaben, Zahlen oder Unterstriche verwenden, aber der Name der Regel muss mit einem Buchstaben beginnen und darf kein Schlüsselwort sein. - Die Schlüsselwörter
input
,output
undshell
werden alle von einem Doppelpunkt (“:”) gefolgt. - Die Dateinamen und der Shell-Befehl sind alle in
"quotes"
. - Der Name der Ausgabedatei wird vor dem Namen der Eingabedatei angegeben. Eigentlich ist es Snakemake egal, in welcher Reihenfolge sie erscheinen, aber wir geben in diesem Kurs die Ausgabe zuerst an. Wir werden gleich sehen, warum.
- In diesem Anwendungsfall gibt es keine Eingabedatei für den Befehl, also lassen wir dieses Feld leer.
Zurück in der Shell werden wir unsere neue Regel ausführen. An diesem Punkt, wenn es irgendwelche fehlenden Anführungszeichen, falsche Einrückungen, etc. gab, werden wir einen Fehler sehen.
bash: snakemake: command not found...
Wenn Ihre Shell Ihnen mitteilt, dass sie den Befehl
snakemake
nicht finden kann, müssen wir die Software
irgendwie verfügbar machen. In unserem Fall bedeutet das, dass wir nach
dem Modul suchen müssen, das wir laden wollen:
AUSGABE
[ocaisa@node1 ~]$ module spider snakemake
--------------------------------------------------------------------------------------------------------
snakemake:
--------------------------------------------------------------------------------------------------------
Versions:
snakemake/8.2.1-foss-2023a
snakemake/8.2.1 (E)
Names marked by a trailing (E) are extensions provided by another module.
--------------------------------------------------------------------------------------------------------
For detailed information about a specific "snakemake" package (including how to load the modules) use the module's full name.
Note that names that have a trailing (E) are extensions provided by other modules.
For example:
$ module spider snakemake/8.2.1
--------------------------------------------------------------------------------------------------------
Jetzt wollen wir das Modul, also laden wir es, um das Paket verfügbar zu machen
und dann stellen Sie sicher, dass der Befehl snakemake
verfügbar ist
AUSGABE
/cvmfs/software.eessi.io/host_injections/2023.06/software/linux/x86_64/amd/zen3/software/snakemake/8.2.1-foss-2023a/bin/snakemake
Ausführen von Snakemake
Führen Sie snakemake --help | less
aus, um die Hilfe für
alle verfügbaren Optionen zu sehen. Was bewirkt die Option
-p
in dem obigen Befehl snakemake
?
- Schützt bestehende Ausgabedateien
- Gibt die Shell-Befehle, die gerade ausgeführt werden, auf dem Terminal aus
- Sagt Snakemake, dass es nur einen Prozess auf einmal ausführen soll
- Fordert den Benutzer auf, die richtige Eingabedatei zu wählen
Sie können im Text suchen, indem Sie / drücken, und mit q zur Shell zurückkehren.
- Gibt die Shell-Befehle, die gerade ausgeführt werden, auf dem Terminal aus
Dies ist so nützlich, dass wir nicht wissen, warum es nicht die
Standardeinstellung ist! Die Option -j1
sagt Snakemake,
dass es immer nur einen Prozess auf einmal ausführen soll, und wir
bleiben vorerst dabei, da es die Dinge einfacher macht. Antwort 4 ist
ein totales Ablenkungsmanöver, da Snakemake niemals interaktiv nach
Benutzereingaben fragt.
Hauptpunkte
- “Bevor Sie Snakemake starten, müssen Sie ein Snakefile schreiben”
- “Ein Snakefile ist eine Textdatei, die eine Liste von Regeln definiert”
- “Regeln haben Eingänge, Ausgänge und Shell-Befehle, die ausgeführt werden sollen”
- “Du sagst Snakemake, welche Datei es erstellen soll, und es wird den in der entsprechenden Regel definierten Shell-Befehl ausführen”