Mam problemy z wydajnością przy użyciu MCMCglmm
pakietu w R do uruchomienia mieszanego modelu efektów. Kod wygląda następująco:
MC1<-MCMCglmm(bull~1,random=~school,data=dt,family="categorical"
, prior=list(R=list(V=1,fix=1), G=list(G1=list(V=1, nu=0)))
, slice=T, nitt=iter, ,burnin=burn, verbose=F)
Dane zawierają około 20 000 obserwacji i są skupione w około 200 szkołach. Usunąłem wszystkie nieużywane zmienne z ramki danych i usunąłem wszystkie inne obiekty z pamięci przed uruchomieniem. Problem polega na tym, że uruchomienie zajmuje bardzo dużo czasu, chyba że zredukuję iteracje do niedopuszczalnie małej liczby. Przy 50 000 iteracjach zajmuje to 5 godzin i mam wiele różnych modeli do uruchomienia. Chciałbym więc wiedzieć, czy istnieją sposoby na przyspieszenie wykonania kodu lub innych pakietów, których mógłbym użyć. Używam, MCMCglmm
ponieważ chcę przedziały ufności dla efektów losowych.
Z drugiej strony, miałem nadzieję na nowy komputer w tym roku, ale przy odrobinie szczęścia mogę go rozwinąć, więc zastanawiałem się, jak najlepiej wydać ograniczoną ilość pieniędzy na nowy sprzęt - więcej pamięci RAM , szybszy procesor itp. Patrząc na menedżera zadań, nie sądzę, że problemem jest pamięć RAM (nigdy nie przekracza 50% wykorzystania fizycznego), ale użycie procesora również nie przekracza 50%, co wydaje mi się dziwne . Moja obecna konfiguracja to procesor Intel Core i5 2,66 GHz, 4 GB pamięci RAM, dysk twardy 7200 obr./min. Czy rozsądnie jest uzyskać najszybszy procesor, jak to możliwe, kosztem dodatkowej pamięci RAM? Zastanawiałem się również nad wpływem wielkości pamięci podręcznej procesora poziomu 3 na takie problemy z obliczeniami statystycznymi?
Aktualizacja: Po zapytaniu o meta SO doradzono mi, aby ponownie sformułować pytanie i zamieścić post na Superuser. W tym celu muszę podać więcej szczegółów na temat tego, co dzieje się „pod maską” w MCMCglmm. Czy mam rację, myśląc, że większość czasu na obliczenia poświęcana jest na optymalizację - mam na myśli znalezienie maksimum jakiejś skomplikowanej funkcji? Czy inwersja macierzy i / lub inne operacje algebry liniowej są również częstą operacją, która może powodować wąskie gardła? Wszelkie inne informacje, które mógłbym przekazać społeczności superużytkowników, byłyby bardzo wdzięczne.
źródło
lmer()
modeli do dużych zestawów danych może zająć sporo czasu, zwłaszcza jeśli musisz to zrobić wiele razy. Odpowiedź na twoje pytanie może leżeć w obliczeniach równoległych, chociaż inni użytkownicy (np. @DirkEddelbuettel) byliby o wiele bardziej pomocni ode mnie. Istnieje również szansa, że możesz uzyskać lepsze odpowiedzi na temat przepełnienia stosu.glmer
(jak wiadomo z moich innych postów) i zajmuje to około 20 sekund, ale problem polega na tym, że nie podaje przedziałów ufności ani standardowych błędów, a z tego, co przeczytałem na liście mailowej, archiwum autoralme4
pakiet mówi, że rozkład próbkowania efektów losowych może być bardzo wypaczony, więc te statystyki nie są zgłaszane. Właściwie odkryłem zMCMCglmm
tego, że w moim przypadku zbliżają się one normalnie (nie to, że to bardzo pomaga - mówię tylko). Czy byłoby lepiej, gdybym poprosił o migrację do SO?Odpowiedzi:
Dlaczego nie uruchomić go w chmurze Amazon EC2 lub podobnej usłudze?
MCMCpack
jest, jeśli dobrze pamiętam, głównie zaimplementowany w C, więc nie będzie dużo szybszy, chyba że zmniejszysz złożoność modelu, iteracje itp. Dzięki EC2 lub podobnym usługom przetwarzania w chmurze możesz mieć wiele instancji w dowolnym specyfikacje, których potrzebujesz, i uruchom wszystkie modele jednocześnie.źródło