Oprogramowanie komputerowe z zasobami HPC do kruszenia numerów zaplecza

17

Nasza grupa robocza tworzy aplikację komputerową, która symuluje wydajność energetyczną budynku. Jest to aplikacja .NET, a gdy użytkownik uruchamia wiele symulacji, może to zająć dużo czasu. Symulacje są w pełni zrównoleglalne, a my mamy bardzo znaczące zasoby obliczeniowe HPC w „biurze”.

Jednym z naszych pomysłów jest umożliwienie użytkownikom odciążenia symulacji, o których wiemy, że będą działać bardzo długo (podczas gdy każda indywidualna symulacja trwa około 30-120 sekund, uruchomienie dużej liczby symulacji może potrwać kilka dni). Czy ktoś już to zrobił? Jeśli tak, czy korzystałeś z bibliotek, aby ułatwić sobie pracę? Czy było warto?

edytowane w celu dodania:

Poszczególne zadania do odciążenia symulacji byłyby

  • pakowanie pliku (około 5 Mb),
  • przesyłanie go na nasze serwery,
  • rozkładanie pakietu na poszczególne symulacje (każda zajmuje około 30-120 sekund i jest całkowicie równoległa), liczba symulacji jest funkcją liczby opcji wybranych przez użytkownika (izolacja, orientacja budynku itp.) i najgorszego przypadku wyboru każda możliwa opcja spowodowałaby około 1E50 symulacji. Przeprowadzanie symulacji od 100 do ~ 1E5 nie jest nieznane, ale większość użytkowników uruchomi mniej niż 10.
  • składanie ukończonych symulacji i pobieranie teraz znacznie większego pliku.

Nie jesteśmy pewni, jakiego interfejsu użyć, ponieważ nasza grupa jest w tym nowa, a dzięki cięciom budżetowym może on zostać ukończony na czas, ale musi być łatwy do utrzymania dla następnych (jeśli w ogóle) osób.

Ta aplikacja korzysta już z platformy .NET 4 i może się rozwijać, aby używać wszystkich rdzeni użytkownika (nasze maszyny programistyczne mają 8 rdzeni).

Tangurena
źródło
Nie jestem do końca jasne, po co tu właściwie zmierzasz - czy koniec HPC zawsze będzie na twoich serwerach lub innych serwerach dedykowanych? (Jeśli tak, to powinno być znacznie łatwiejsze, ponieważ możesz być w stanie zrobić znacznie więcej po stronie serwera.)
Aesin
@ Tak, koniec HPC będzie na naszych serwerach, tak. Istniejąca aplikacja i nowa wersja uruchamiają symulacje na pulpicie użytkownika. Szukam porady / zaleceń, jak myśleć o następnej wersji, aby móc korzystać z HPC dla większych użytkowników.
Tangurena,

Odpowiedzi:

10

Możesz rozważyć użycie Condor: http://research.cs.wisc.edu/condor/ . Może to być przesada, w zależności od rodzaju zasobów HPC, o których mówisz i jak bardzo się zmienią. Jednak jest dość łatwy do uruchomienia i dba o uruchomienie niezależnych zadań, tolerancję błędów, równoważenie obciążenia itp.

Byłoby bardziej pomocne, gdybyś był bardziej szczegółowy na temat poszczególnych zadań (jak długo, jak asynchronicznie) i jakiego interfejsu używałbyś do interakcji (proces uruchamiania, biblioteka itp.)

Matt

Matt Knepley
źródło
Nie jestem pewien, czy kondor będzie działał z .net (Windows?), Ale nasza grupa robocza używa kondora w Linuksie i mogę polecić go do przesyłania zadań +1
Sebastian,
Condor może komunikować się przez system plików, więc nie musi podążać za .NET. Działa w systemie Windows.
Matt Knepley
5

Jeśli jesteś w świecie .NET, czy spojrzałeś na obsługę wielowątkowości w .NET 4; i funkcje asynchroniczne, które są dodawane do .NET 4.5?

Wielowątkowość nie pomaga odciążyć przetwarzania na inne maszyny, ale pozwala lepiej wykorzystać wielordzeniowe komputery PC, z których wszyscy korzystamy obecnie. 4.0 ma pod tym względem kilka fajnych funkcji.

4.5 jest obecnie w wersji zapoznawczej - warto więc sprawdzić, czy to pomoże. W MSDN był artykuł przedstawiający nowe funkcje asynchroniczne w ostatnim miesiącu (październik lub listopad, a na pewno nie wcześniej niż we wrześniu). Wyglądało na to, że te funkcje zostały popchnięte jako sposób na zrównoleglenie tradycyjnie mniej równoległego kodu, ale IIRC zawierały także obsługę wielu serwerów.

winwaed
źródło
4

Odpowiedź zależy od tego, co masz jako backend HPC. Pytanie dotyczy istniejących zasobów dostępnych dla użytkowników NREL. Istnieją klastry Linux i klaster Windows oparty na serwerze Windows Compute Cluster Server.

  1. Aby użyć klastra linux, autor musi upewnić się, że procedura symulacji działa na Mono (implementacja platformy .NET dla systemu Linux) i upewnić się, że Mono jest zainstalowany na węzłach.

  2. Kolejne pytanie dotyczy tego, czy użytkownicy mają konta w klastrach obliczeniowych i czy mogą pobierać dane do węzłów. Najprostszym przypadkiem jest pojedynczy system plików dostępny z lokalnych komputerów i węzłów.

    Nie jestem pewien, czy taki system plików jest dostępny dla użytkowników NREL, dlatego konieczne będzie pewne kopiowanie. To już komplikuje sprawy.

  3. Następnie aplikacja powinna móc skompilować skrypt opisu zadania, przesłać go do odpowiedniego klastra i zapytać system kolejkowania o stan symulacji, dopóki zadanie nie wyjdzie z kolejki.

  4. Wreszcie aplikacja powinna mieć możliwość pobrania wyników.

Wszystko to jest wykonalne, choć nie trywialne i byłoby wysoce specyficzne dla konfiguracji tego konkretnego laboratorium.

Aplikacje komercyjne Ansys lub MSC pozwalają użytkownikowi zapisać opis zadania symulacyjnego, który można później uruchomić w trybie wsadowym na zdalnym klastrze.

Bardziej ogólnym rozwiązaniem byłoby wykorzystanie infrastruktury Grid, jeśli jest dostępna.

Następnie można przejść do architektury zorientowanej na usługi, w której gdzieś jest skonfigurowana usługa sieci Web, która czeka na żądania symulacji i wysyła je do klastra, oddzielając w ten sposób aplikację od znajomości specyfiki dostępnych zasobów.

Jest to szeroko stosowane na przykład w biologii obliczeniowej, gdzie narzędzia są wykorzystywane do tworzenia przepływów pracy symulacji składających się w całości z żądań usług internetowych do przetworzenia.

Należy tylko zauważyć, że odciążanie obliczeń do zdalnych zasobów obliczeniowych jest powszechnie stosowane w aplikacjach takich jak rozpoznawanie głosu Google dla Androida.

Dmitrij Chubarow
źródło