Frage:
Wie werden die Optionen snakemake --cluster und --drama implementiert?
Chris_Rands
2017-06-06 19:30:00 UTC
view on stackexchange narkive permalink

Ich bin ziemlich neu in snakemake und versuche, den Unterschied zwischen den Flags --cluster und --drmaa zu verstehen Beide werden zum Senden von Jobs zum Berechnen von Clustern / Knoten verwendet.

Die Dokumente geben einige Hinweise zu den Vorteilen der Verwendung von --drmaa hier:

Wenn Ihr Clustersystem DRMAA unterstützt, kann Snakemake dies nutzen, um die Kontrolle über Jobs zu verbessern. Z.B. Jobs können durch Drücken von Strg + C abgebrochen werden, was mit der generischen --cluster-Unterstützung nicht möglich ist.

Und hier:

Falls verfügbar, ist DRMAA den generischen Cluster-Modi vorzuziehen, da es eine bessere Kontrolle und Fehlerbehandlung bietet.

Ich habe also ein konzeptionelles Verständnis für die Vorteile der Verwendung von - drmaa . Ich halte das Obige jedoch nicht für eine sehr vollständige Erklärung, und ich weiß nicht, wie diese Flags in Snakemake unter der Haube implementiert sind. Kann jemand etwas näher darauf eingehen?

Beachten Sie, dass dies zwar in Betracht gezogen werden könnte Als allgemeinere Programmierfrage wird Snakemake hauptsächlich in der Bioinformatik verwendet. Ich war überzeugt, dass diese Frage aufgrund dieses Meta-Posts und dieser Antwort als themenbezogen betrachtet werden würde.

Hallo Chris! Was ist die eigentliche Frage hier? DRMAA scheint eine offene API zu sein, die die Übermittlung und Steuerung von Cluster- / Grid-Jobs beschreibt. Wenn Sie also ein Cluster- oder Übermittlungssystem haben, das dies unterstützt (z. B. SLURM), bietet Ihnen "snakemake" die zusätzlichen Steuerelemente, die von dieser API unterstützt werden - einschließlich Ihrer Frage, einschließlich der Möglichkeit, Strg + weiterzugeben C an Ihrer Konsole zum Raster - ein Szenario, für das beispielsweise der Befehl `qdel` in Sun Grid Engine verwendet werden muss. Wenn Sie also eine Infrastruktur mit einem Scheduler haben, der DRMAA-Unterstützung bietet, kann ich sehen, warum Sie genauso gut `--drmaa` verwenden können.
Vielleicht warten, bis wir die Snakemake-Entwickler tatsächlich abgeworben haben :)
Der Code ist Open Source und ziemlich einfach zu befolgen. Ich fand es ziemlich einfach herauszufinden, wie DRMAA-Jobs übermittelt wurden, indem ich 10 Minuten lang in der Quelle herumschnüffelte. Ich bin mir jedoch nicht ganz sicher, wonach die Frage sucht.
Zwei antworten:
Devon Ryan
2017-06-07 00:38:15 UTC
view on stackexchange narkive permalink

Ich hatte mich immer gefragt, wie das auch funktioniert, also nahm ich das als Ausrede, um in den Snakemake-Code zu schauen. Letztendlich wird dies zu einer Frage von (1) wie Jobs tatsächlich übergeben werden und (2) wie festgestellt wird, ob Jobs erledigt sind (und ob sie dann fehlgeschlagen sind)?

Für DRMAA, Python hat ein Modul (mit dem passenden Namen "drmaa"), das die libdrmaa-Bibliothek umschließt, die mit den meisten Schedulern geliefert wird. Dies ist eine sehr beliebte Route, zum Beispiel verwendet das Galaxy-Projekt diese für den Umgang mit den meisten Clustern (z. B. verwende ich sie, um unsere interne Galaxy-Instanz mit unserem Slurm-Cluster zu verbinden). Der große Vorteil dabei ist, dass DRMAA magisch funktioniert, damit Sie einfach Befehle an Ihren Cluster senden können, ohne wissen zu müssen, ob Sie qsub oder srun oder etwas anderes ausführen sollen. Außerdem werden Methoden bereitgestellt, mit denen einfach abgefragt werden kann, ob ein Job ausgeführt wird oder nicht und wie sein Beendigungsstatus lautet.

Die Verwendung des Befehls --cluster erfordert viel mehr Magie auf dem Seite der Schlangenmacherei. Am Ende des Tages wird ein Shell-Skript erstellt, das dann mit dem von Ihnen angegebenen Befehl gesendet wird. Wichtig ist, dass es einige geheime Dateien in diesem Skript enthält, nach denen es dann suchen kann (jemals bemerkt, dass das Verzeichnis .snakemake , in dem Sie ein Skript ausführen? Dies scheint eines der Dinge zu sein, für die es verwendet wird.). Diese heißen {jobid} .jobfinished und {jobid} .jobfailed und einer von ihnen wird abhängig vom Exit-Status Ihres Befehls / Skripts berührt. Sobald einer von denen da ist, kann Snakemake in seiner DAG weitermachen (oder nicht, wenn es einen Fehler gibt). Dies ist offensichtlich VIEL mehr, um den Überblick zu behalten, und es ist Snakemake dann nicht möglich, laufende Jobs abzubrechen, was mit DRMAA leicht möglich ist.

Wenn Sie ein [Paket zum Senden von Jobs an Sun Grid Engine] (https://github.com/SamStudio8/sunblock) ohne DRMAA geschrieben haben, können Sie definitiv bestätigen, dass die Magie hier stark sein muss. Anstatt zu überwachen, ob Dateien berührt wurden, habe ich eine POST-Anforderung auf dem Überwachungsserver ausgelöst. Ich kann sehen, dass DRMAA eine nette API verfügbar machen muss, um den Jobstatus zu erhalten, ohne seltsame Problemumgehungen vornehmen zu müssen.
Ja, es ist bequemer als das, was ich mir auch ausgedacht hätte :)
Sam Nicholls
2017-06-06 20:31:12 UTC
view on stackexchange narkive permalink

DRMAA (Distributed Resource Management Application API) scheint eine offene API zu sein, die eine Spezifikation für die Übermittlung und Verwaltung von Arbeiten beschreibt, die an ein Grid / Cluster übermittelt wurden. Wenn Ihr Scheduler DRMAA-kompatibel ist, würde ich davon ausgehen, dass Sie mit dem --drmaa -Flag snakemake die zusätzlichen Steuerelemente erhalten, die dadurch verfügbar gemacht werden API.

Wie in Ihrer Frage mit DRMAA-Unterstützung erwähnt, wird Strg + C auf der Konsole an das Grid weitergeleitet, um übergebene Jobs zu beenden oder zu stoppen. Eine Aufgabe, die andernfalls die Verwendung des Befehls qdel für Sun Grid Engine erfordern würde.

Ich konnte sehen, warum der Vorschlag aktiviert werden sollte --drmaa , wo dies möglich ist, da es wahrscheinlich Funktionen (wie die Kontrolle von Jobs und die Verfügbarkeit von Protokollen und Fehlern) verfügbar macht, die das Übermitteln und Verwalten von Jobs für Sie und snakemake ein wenig erleichtern . Vielleicht kann jemand mit snakemake -Erfahrung etwas mehr erklären, aber ich hoffe, das hilft?

Für das, was es wert ist, verwende ich Sun Grid Engine ohne DRMAA und es ist ziemlich schmerzhaft, es zu bekommen Gute Informationen aus qstat und das Protokollformat qacct sind möglicherweise das schlechteste Dateiformat, das mir je begegnet ist. Ich vermute, DRMAA bietet eine nette (oder zumindest vernünftigere) API für snakemake (und andere), um diese Informationen leichter abrufen zu können.

Angehängt:

Unter der Haube werden die Flags vom Python-Modul argparse in der Datei __init__.py analysiert. Eine sich gegenseitig ausschließende Gruppe von Optionen erzwingt die Auswahl von --cluster oder --drmaa (oder --cluster-sync ).

--cluster oder -c erfordert die Angabe eines Arguments. Der Befehl, für den ein Job in Ihrem Cluster gesendet werden soll (die Beispielnamen qsub ). Das Flag --drmaa scheint snakemake nur anzuzeigen, dass DRMAA verwendet werden soll, was sich in Bezug auf die Ausführung des Befehls auf Ihrer Konsole nicht wesentlich ändert wird im __init__.py oder workflow.py verarbeitet.

Wenn es jedoch Zeit ist, mit Ihrem zu kommunizieren Scheduler (wie in scheduler.py angegeben) überprüft eine elif -Anweisung, ob Sie sich in irgendeiner Form im Cluster-Modus befinden, und den else fängt den Fall ab, in dem Sie stattdessen das Flag --drmaa gesetzt haben.

Hier geschieht die Magie, da Ihr Job jetzt mit dem DRMAAExecutor wie in executors.py angegeben, anstelle des Standard-Executors.

Ohne viel mehr zu untersuchen, kann ich sehen, dass der DRMAAExecutor bietet einige weitere Klassenattribute und stellt im Vergleich zu den anderen zusätzliche Funktionen bereit.

Hoffen Sie, dass dies von größerem Nutzen ist? Wieder habe ich mir den Code nur selbst angesehen, aber anstelle eines snakemake -Nutzers, der sich einschaltet, dachte ich, ich hätte eine Nase.

Danke, aber das sagt mir, was ich bereits weiß; Ich habe ein konzeptionelles Verständnis, aber ich möchte die Details darüber, wie die 2 verschiedenen Ansätze in Snakemake implementiert werden. Ich werde versuchen, die Frage ein wenig zu klären
Es tut mir leid, dass ich vorweggenommen habe, wonach Sie gefragt haben könnten, da ich nicht viel mehr Platz hatte, um in die Kommentare zu schreiben. Ich werde versuchen, Ihre bearbeitete Frage zu beantworten, wenn ich helfen kann!
@Chris_Rands Ich habe erweitert, ist das relevant?
Danke, positiv bewertet, tut mir leid, wenn ich mit meiner Frage nicht ganz klar war. Ich dachte nur, dass dies eine nützliche Frage für andere sein könnte. Ich hatte vor, mir selbst zu antworten, wenn ich keine Antworten bekam, aber ich habe mich nicht mit dem befasst Quelle noch
@Chris_Rands Kein Problem (und danke)! Ich mag es, in Codebasen zu stöbern, um zu sehen, wie sie funktionieren. Haben wir zwischen Devon und mir gefunden, wonach Sie gesucht haben? Gerne unterhalten wir uns mit Ihnen darüber, wenn nicht.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...