Unsere Arbeitsgruppe erstellt eine Desktop-Anwendung, die die Gesamtenergieeffizienz von Gebäuden simuliert. Es ist eine .NET-Anwendung, und wenn der Benutzer viele Simulationen ausführt, kann dies recht zeitaufwändig sein. Die Simulationen sind vollständig parallelisierbar, und wir verfügen über einige sehr wichtige HPC- Rechenressourcen im "Büro".
Eine Idee, die wir hatten, ist es, den Benutzern das Auslagern von Simulationen zu ermöglichen, von denen wir wissen, dass sie sehr lange dauern werden (während jede einzelne Simulation etwa 30 bis 120 Sekunden dauert, kann das Ausführen einer großen Anzahl von Simulationen mehrere Tage dauern). Hat das schon mal jemand gemacht? Wenn ja, haben Sie Bibliotheken verwendet, um die Arbeit zu erleichtern? War es die Mühe wert?
bearbeitet, um hinzuzufügen:
Einzelne Aufgaben zum Auslagern der Simulation wären
- Packen einer Datei (ca. 5 MB),
- Hochladen auf unsere Server,
- Bei der Zerlegung des Pakets in einzelne Simulationen (jede dauert etwa 30 bis 120 Sekunden und ist vollständig parallelisierbar) hängt die Anzahl der Simulationen von der Anzahl der vom Benutzer ausgewählten Optionen (Isolierung, Gebäudeausrichtung usw.) und dem schlimmsten Auswahlfall ab Jede mögliche Option würde zu ca. 1E50-Simulationen führen. Das Ausführen von 100 bis ~ 1E5-Simulationen ist nicht unbekannt, aber die Mehrheit der Benutzer wird weniger als 10 ausführen.
- Zusammensetzen der fertigen Simulationen und Herunterladen der nun viel größeren Datei.
Wir sind uns nicht sicher, welche Benutzeroberfläche wir verwenden sollen, da unsere Gruppe in dieser Hinsicht neu ist und die Budgetkürzungen möglicherweise rechtzeitig abgeschlossen werden, sie müssen jedoch für die nächsten Mitarbeiter (falls vorhanden) einfach zu warten sein.
Diese App verwendet bereits .NET 4 und kann erweitert werden, um alle Kerne zu verwenden, die der Benutzer hat (unsere Entwicklungsmaschinen haben 8 Kerne).
quelle
Antworten:
Möglicherweise möchten Sie Condor verwenden: http://research.cs.wisc.edu/condor/ . Dies kann zu viel sein, je nachdem, von welchen HPC-Ressourcen Sie sprechen und wie stark sie sich ändern werden. Der Einstieg ist jedoch recht einfach, und es kümmert sich um das Starten unabhängiger Jobs, Fehlertoleranz, Lastausgleich usw.
Es wäre hilfreicher, wenn Sie die einzelnen Aufgaben (wie lange, wie asynchron) und die für die Interaktion verwendete Schnittstelle (Startvorgang, Bibliothek usw.) genauer kennen würden.
Matt
quelle
Wenn Sie sich in der .NET-Welt befinden, haben Sie sich die Multithreading-Unterstützung in .NET 4 angesehen. und die asynchronen Funktionen, die .NET 4.5 hinzugefügt werden?
Multithreading hilft Ihnen nicht, die Verarbeitung auf andere Computer zu verlagern, aber es ermöglicht Ihnen eine bessere Nutzung der Multicore-PCs, die wir heutzutage alle verwenden. 4.0 hat diesbezüglich einige nette Features.
4.5 ist derzeit in der Technologie-Vorschau - es lohnt sich also zu prüfen, ob dies hilfreich ist. Es gab einen Artikel in MSDN, der die neuen asynchronen Funktionen im letzten Monat vorstellte (Oktober oder November und definitiv nicht früher als September). Es sah so aus, als würden diese Funktionen als eine Möglichkeit zur Parallelisierung von traditionell weniger parallelem Code verwendet. IIRC beinhaltete jedoch auch eine gewisse Unterstützung für mehrere Server.
quelle
Die Antwort hängt davon ab, was Sie als HPC-Backend haben. Die Frage bezieht sich auf vorhandene Ressourcen, die NREL-Benutzern zur Verfügung stehen. Es gibt Linux-Cluster und einen Windows-Cluster, der auf dem Windows Compute Cluster Server basiert.
Um den Linux-Cluster zu verwenden, muss der Autor sicherstellen, dass die Simulationsroutine auf Mono (der Implementierung der .NET-Plattform für Linux) ausgeführt wird und dass Mono auf den Knoten installiert ist.
Die nächste Frage ist, ob die Benutzer Konten in den Compute-Clustern haben und die Daten an die Knoten übertragen können. Der einfachste Fall ist ein einziges Dateisystem, auf das von lokalen PCs und von den Knoten aus zugegriffen werden kann.
Ich bin mir nicht sicher, ob NREL-Benutzern ein solches Dateisystem zur Verfügung steht, daher ist ein gewisser Kopieraufwand erforderlich. Das macht die Sache schon kompliziert.
Als nächstes sollte die Anwendung in der Lage sein, ein Jobbeschreibungsskript zu kompilieren, es an den jeweiligen Cluster zu senden und das Warteschlangensystem nach dem Status der Simulationen abzufragen, bis der Job aus der Warteschlange kommt.
Schließlich sollte die Anwendung in der Lage sein, die Ergebnisse abzurufen.
All dies ist machbar, aber nicht trivial und für die Einrichtung dieses speziellen Labors äußerst spezifisch.
Mit kommerziellen Anwendungen von Ansys oder MSC kann der Benutzer eine Beschreibung des Simulationsauftrags speichern, die später im Batch-Modus auf einem Remote-Cluster ausgeführt werden kann.
Eine allgemeinere Lösung wäre die Nutzung der Grid-Infrastruktur, sofern verfügbar.
Als nächstes könnte man sich für eine serviceorientierte Architektur entscheiden, bei der ein Webservice irgendwo eingerichtet wird, um auf Simulationsanforderungen zu warten und diese an den Cluster zu senden, wodurch die Anwendung von der Kenntnis der Besonderheiten der verfügbaren Ressourcen entkoppelt wird.
Dies ist beispielsweise in der Computational Biology weit verbreitet, wo Tools zum Erstellen von Simulationsworkflows verwendet werden, die ausschließlich aus Webservice-Anforderungen zur Verarbeitung bestehen.
Zu beachten ist, dass das Auslagern von Berechnungen in Remote-Computing-Ressourcen häufig in Anwendungen wie der Google-Spracherkennung für Android verwendet wird.
quelle