Te pytania mogą być nieco nie na temat w comp-sci. jeśli to konieczne, proszę wskazać, gdzie to pasuje.
Pytanie dotyczy tego, jak skutecznie zarządzać wszystkimi przebiegami symulacji.
powiedzmy, na przykład, że symulacja wymaga ustalenia 2 parametrów, które należy zdefiniować w pewnym sugerowanym zakresie wartości.
Aby znaleźć lepszy wynik uzyskany przez parę dwóch parametrów (na przykład przez porównanie wyniku symulacji z danymi eksperymentalnymi), można przeprowadzić analizę wrażliwości, definiując trzy wartości dla każdego parametru, a następnie formułując 9 przebiegów.
poprzednio używam sed do zmiany danych wejściowych dla każdego uruchomienia i oznaczenia każdego uruchomienia, pisząc wartość i nazwę parametru w folderze przechowującym dane wejściowe i wyniki tego uruchomienia. ale okazało się, że jest to bardzo nieefektywne, gdy liczba parametrów rośnie (np. dostęp do nazw folderów w skryptach do kreślenia).
potem postanowiłem użyć prostych liczb jako nazw folderów i zapisać szczegóły w innych arkuszach kalkulacyjnych. ten sposób jest do tej pory w porządku, ale wymaga trochę pracochłonnej pracy. także wraz ze wzrostem liczby biegów często popełniane są błędy, takie jak przeprowadzenie kolejnego cyklu, który został już wykonany kilka dni temu.
Czy masz jakiś dobry pomysł na zarządzanie tymi biegami? Myślę, że byłoby to niezwykle ważne dla kogoś, kto robi analizę Monte Carlo?
Z góry dziękuję!
źródło
Odpowiedzi:
TLDR
Użyj Pythona do zarządzania / modyfikowania danych wejściowych i łączenia danych wyjściowych, a HDF5 do organizowania / przechowywania danych. Choć początkowo może się to wydawać skomplikowane, nadal będzie prostsze niż SQL-cokolwiek.
Dłuższa odpowiedź + przykład
Osobiście używam kombinacji skryptów Python i formatu pliku HDF5, aby poradzić sobie z tego rodzaju sytuacjami. Skrypty w języku Python mogą obsługiwać podstawienia tekstu niezbędne do zmiany plików wykonywalnych (i mogą sprawdzać, czy są duplikaty), a przy odrobinie skryptów możesz pobrać dane wyjściowe z programu i umieścić je w pliku HDF5.
Najłatwiej jest myśleć o HDF5 jako mniej więcej tak jak normalnym systemie plików (tj. Zestawie katalogów i podkatalogów na komputerze), ale takim, który łatwo skaluje się do dużych zbiorów danych. Każdy katalog / podkatalog może być otagowany metadanymi (w twoim przypadku albo parametry, które zmieniasz, albo cały zestaw parametrów). Kiedy przychodzi czas na analizę danych, możesz je przeszukiwać na podstawie metadanych.
Oto krótki przykład tego, jak to działałoby na podstawie niektórych moich danych symulacyjnych (już w formacie HDF5), który wygląda następująco:
mydata.hdf5
jest plikiem HDF5, a każdy z Runxx jest podkatalogiem, który przechowuje dane wyjściowe z danej symulacji i jest oznaczony powiązanymi metadanymi. Skrypt Pythona, który przeszukuje przebiegi i zwraca listę tych z pożądanymi metadanymi, wyglądałby tak:Więc gdybym był w wierszu poleceń w katalogu zawierającym
mydata.hdf5
, mógłbym uruchomić powyższy skrypt w następujący sposób:co powiedziałoby skryptowi, aby znalazł wszystkie przebiegi z metadanymi częściowo lub całkowicie pasującymi
{'maxSteps':'1e7', 'size':'13'}
. Skrypt może następnie manipulować tymi danymi w dowolny sposób (w sekcji „zrób coś tutaj”), a następnie wydrukuje listę wyglądającą mniej więcej tak:Jedna uwaga jest jednak taka, że HDF5 przedstawi całkowicie naturalne odwzorowanie dla twoich danych tylko wtedy, gdy będzie możliwe przedstawienie ich jako zestawu tablic n-wymiarowych. Dość często wyniki symulacji są w jakiejś tablicy, więc prawdopodobnie nie będzie to problemem.
Dobre punkty wyjścia
Python: http://www.openbookproject.net/thinkcs/python/english2e/
HDF5: http://www.h5py.org/docs/
źródło
Myślę, że musielibyśmy dowiedzieć się nieco więcej o twoim przepływie pracy, aby przedstawić jakieś poważne rekomendacje.
Proponuję traktować twoje biegi jak sklep z kluczowymi wartościami. Utwórz prostą bazę danych dla wszystkich swoich metadanych dla każdego uruchomienia, a następnie zaszyfruj wszelkie istotne informacje ze swojego uruchomienia do klucza przypisanego do każdego wyniku.
W najprostszej sytuacji użyjesz pliku tekstowego do sklepu z metadanymi i bezpiecznie dodasz wiersze metadanych dotyczące każdego uruchomienia do pliku tekstowego. Następnie możesz zapisać swoje wyniki wyjściowe w dowolny sposób (pojedynczy katalog, kopie zapasowe z listą zawartości itp.)
Możesz wdrożyć tę strategię w dowolnym języku, który ci się podoba, ale byłoby to banalne w Pythonie. Możesz również skorzystać z kilku fajnych funkcji, takich jak zdolność Pythona do odczytu i zapisu danych JSON lub interakcji z bazami danych SQL.
Podejście to implementuje bardzo prostą lekką bazę danych. Istnieją cięższe strategie, które zapewniają więcej gwarancji bezpieczeństwa, nową, którą możesz być zainteresowany, jest SciDB . Bazy danych zapewniają silniejsze gwarancje dotyczące danych i pomagają skalować podejście do większych zbiorów danych.
źródło