Verwaltung lang laufender Simulationen

Wenn es einen besseren Stapel gibt, auf dem Sie dies fragen können, lassen Sie es mich bitte wissen.

Mein Problem

Ich habe eine Simulation, deren Ausführung 3-4 Tage dauert . Ich möchte viele davon mit verschiedenen Parametern ausführen, die in Textdateien auf entfernten Linux-Rechnern über ssh definiert sind (höchstwahrscheinlich). Ich habe dies bereits über eine Kombination aus bash, python, ssh und screen gemacht. Meine Skripte senden (oder übertragen viele Sätze davon) die Eingabedateien an ein Verzeichnis auf einem Remote-Computer und starten die Simulation in einem separaten Bildschirm. Ich habe ein Skript, das überprüft, ob die Simulation abgeschlossen ist, und wenn dies der Fall ist, habe ich ein weiteres Skript, das die Ergebnisse remote nachbearbeitet und sie dann sammelt.

Aktuell habe ich ein paar Probleme. Einige der Remote-Maschinen sind Laborcomputer, was bedeutet, dass sie, obwohl sie nicht ausgeschaltet werden sollten, von Zeit zu Zeit zwangsläufig ausgeschaltet werden. Die Simulation schreibt die Ausgänge alle 10 Zeitschritte , so dass kein großer Arbeitsverlust entsteht, aber die Simulation muss neu gestartet werden, sobald der Computer wieder eingeschaltet wird. Manchmal stürzt die Simulation ab, der letzte aufgezeichnete Zeitschritt muss gelöscht und die Simulation manuell neu gestartet werden. In einem ähnlichen Zusammenhang kann ich die Remote-Computer mit einem Skript abfragen, um zu sehen, ob die Simulation erfolgreich beendet wurde, aber ich weiß nicht, wie ich überprüfen kann, ob die Simulation läuft oder darauf wartet, neu gestartet zu werden, ohne ssh und top zu verwenden.

Was ich möchte

Ich möchte diesen Prozess ausgefeilter und rationalisierter gestalten. Das Modell selbst wurde von jemand anderem entwickelt (es ist ein OpenFoam CFD-Modell, falls das einen Unterschied macht) und ich habe es geerbt, um es für Metamodellierungs- und Optimierungsarbeiten zu verwenden, und es liegt nicht in meinem Fachgebiet, wirklich darauf einzugehen model viel selbst.

Idealerweise möchte ich ein Dashboard oder eine CLI erstellen , mit der ich diese Simulationen robust, remote und einfach verwalten kann. Wenn möglich, würde ich gerne Python verwenden , weil ich mich damit am wohlsten fühle, und ich bin auch ziemlich zufrieden mit Bash , obwohl meine Arbeit in Bash viel hackiger ist.

Ich suche nach Entwurfsmustern oder Werkzeugen , die es mir ermöglichen würden, den Maschinenpool, den ich habe, programmgesteuert abzufragen , den Zustand meiner Simulationen programmgesteuert zu überprüfen und dann das Verhalten basierend auf diesen Zuständen zu programmieren.

Beispiel

Zum Beispiel: Wenn ein Computer ausgeschaltet wird, während eine meiner Simulationen läuft, merke ich das normalerweise erst, wenn ich nach Ergebnissen suche, sonst ist der Prozess ziemlich zeitaufwändig, also geht viel Rechenzeit verloren. Gibt es ein Bash-Tool oder erlauben mir Fabric oder Paramiko, benachrichtigt zu werden, wenn eine Maschine ausgeschaltet wird? Ist es dumm, eine Aufgabe auf einer Maschine einzurichten, von der ich weiß, dass sie nicht ausgeschaltet wird, die ständig jede meiner Maschinen abfragt, um zu überprüfen, ob sie noch eingeschaltet sind?

Alternativen

Wenn dies nicht machbar erscheint, lohnt es sich, in die Cloud zu wechseln? Meine Sorge ist zuerst, dass mich das etwas kosten wird (ich glaube nicht, dass ich dafür ein Budget habe) und dass es eine Menge Ärger geben wird, die richtige Umgebung einzurichten, aber liege ich falsch? Es ist etwas, mit dem ich nicht vertraut bin.

TL:DR Ich möchte in der Lage sein, den Status von Simulationen auf Remote-Computern über ssh programmgesteuert abzufragen und neu zu starten.

Ich schätze, Sie wollen ein Batch-System, wie es normalerweise auf Clustern verwendet wird
Danke, das werde ich mal machen. Sieht aus wie psein nützliches Befehlszeilenprogramm. Dieser Link sieht sehr nützlich aus, um darauf aufzubauen: anyexample.com/linux_bsd/bash/…
Um es klar zu sagen: Sie möchten ein Tool/eine Bibliothek, mit der Sie den Status laufender Jobs auf Linux-Rechnern über SSH durch Python abfragen können?
Nicht unbedingt durch Python. Basch ist in Ordnung. Ich würde gerne eine Anwendung daraus bauen, damit es weniger manuelle Überprüfungen, mehr automatisierte Überprüfungen und automatische Benachrichtigungen gibt, wenn ein Computer heruntergefahren wird oder wenn ein Job beendet ist, dem Computer ein neuer zugewiesen werden kann, ohne dass ich es manuell tun muss .
Wenn ich schließlich einen EA durch dieses System laufen lassen würde, indem ich diese Simulationen beispielsweise als Zielfunktionen verwende, dachte ich, dass es in Python einfacher sein könnte.
Klingt gut. Dies ist ein wirklich interessantes Problem, ich hoffe, Sie erhalten eine Antwort!
Ich würde vorschlagen, einen Blick auf die Renderfarm-Job-Management-Software (viel davon in Python) zu werfen, die möglicherweise bereits verfügbar ist, um sie an Ihren Anwendungsfall anzupassen. Die Probleme sind sehr ähnlich.
Irgendwelche Vorschläge für welche speziell? Es ist alles neu für mich, also wäre ein Ausgangspunkt wie ein Name großartig.

Antworten (2)

Ich schlage vor, sich das anzuschauen. Ich habe es selbst nicht benutzt, aber ich werde es das nächste Mal tun, wenn ich Dinge wie diese tun muss:

http://python-rq.org/

RQ (Redis Queue) ist eine einfache Python-Bibliothek, um Jobs in eine Warteschlange zu stellen und sie im Hintergrund mit Arbeitern zu verarbeiten. Es wird von Redis unterstützt und ist so konzipiert, dass es eine niedrige Eintrittsbarriere hat. Es kann einfach in Ihren Webstack integriert werden.

Ein Hinweis: Sie sagen, dass Simulationen 3-4 Tage dauern. Ich würde versuchen, diese in kleine Stücke zu schneiden. Gibt es eine Möglichkeit zur Parallelverarbeitung? Das hat viele Vorteile:

  • Wenn Sie kleine Blöcke berechnen, verlieren Sie nicht viel, wenn ein Knoten ausfällt.
  • Es ist schneller.
Ich denke, das ist wahrscheinlich das, was ich wollte. Ich mache so etwas nicht mehr, aber ich denke, ich hätte ein Python-Skript haben können, das eine parallele Standardbibliothek verwendet, um untergeordnete Prozesse und Unterprozesse zu verwalten, um die Simulation selbst zu verpacken. Es ist ein ziemlich einfaches Muster, und ich nehme an, RQ macht genau das und mehr, mit einer Warteschlange? Was sind die Fallstricke, die bei der Verwendung eines solchen Musters zu beachten sind? Wie belastbar ist es: dh. Wenn ein Computer, auf dem ein untergeordneter Prozess ausgeführt wird, abgeschaltet wird und die Verbindung unterbrochen wird, ist er robust genug, um alles andere am Laufen zu halten?
@Ogaday Ich habe python-rq.org selbst nicht verwendet. Ich habe einmal Sellerie verwendet, und ich denke, er hat zu viele Eigenschaften und einige Nachteile. Die Nachteile von Sellerie sind aus meiner Sicht: One-Man-Show (schau dir einfach die Commit-Historie bei github an) und Neustart ist nicht einfach (ich habe nach diesem Jahr und vor etwa drei Jahren gefragt, aber es hat sich nichts geändert).
Stoff scheint auch eine gute Option zu sein, aber nur Python 2? Da ich Sachen über ssh gemacht habe, könnte es sehr sinnvoll sein.
@Ogaday Fabric ist nicht für die parallele Ausführung vorgesehen. Es ist wie Remote-Shell-Scripting (etwas, das ich gelernt habe und das ich in Zukunft vermeiden werde). Wir sind derzeit dabei, von Fabric auf Salt umzustellen (für das Konfigurationsmanagement).

Grid-Computing

Ich bin kein Experte auf diesem Gebiet, aber ich vermute, Grid Computing ist der Fachbegriff für Ihre Bedürfnisse.

Eines der ersten Tools dieser Art war Xgrid von Apple, basierend auf Zilla von Next, Inc. Jetzt eingestellt.

HTCondor scheint eine Lösung zu sein, die für Sie funktionieren könnte. Es ist ein Open-Source-Langzeitprojekt an einer Universität. Es läuft auf Linux und anderen Betriebssystemen.

Oracle Grid Engine ist ein weiteres solches Projekt. Fork in verschiedene verwandte Projekte.

Wikipedia hat diese Liste von Grid-Computing-Projekten .

Eine Einschränkung, die ich vergessen habe zu erwähnen, war, dass ich kein Superuser im Netzwerk bin. Grid-Computing scheint jedoch eine Untersuchung wert zu sein. Ich habe schon einmal von HTC Condor gehört, und ich denke, es könnte so etwas im Netzwerk geben, also werde ich ein bisschen graben, danke.