Wie kann ich die Recheneffizienz optimieren, wenn ich ein komplexes Modell wiederholt an einen großen Datensatz anpasse?

12

Ich habe Leistungsprobleme mit dem MCMCglmmPaket in R, um ein Modell mit gemischten Effekten auszuführen. Der Code sieht folgendermaßen aus:

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)

Die Daten enthalten rund 20.000 Beobachtungen, die in rund 200 Schulen zusammengefasst sind. Ich habe alle nicht verwendeten Variablen aus dem Datenrahmen entfernt und alle anderen Objekte aus dem Speicher entfernt, bevor ich sie ausgeführt habe. Das Problem, das ich habe, ist, dass die Ausführung sehr lange dauert, es sei denn, ich reduziere die Iterationen auf eine unannehmbar kleine Zahl. Bei 50.000 Iterationen dauert es 5 Stunden, und ich habe viele verschiedene Modelle zum Ausführen. Daher würde ich gerne wissen, ob es Möglichkeiten gibt, die Codeausführung zu beschleunigen, oder andere Pakete, die ich verwenden könnte. Ich benutze, MCMCglmmweil ich Konfidenzintervalle für die zufälligen Effekte haben möchte.

Auf der anderen Seite hatte ich gehofft, später in diesem Jahr einen neuen PC zu bekommen, aber mit ein bisschen Glück könnte ich das vielleicht nach vorne bringen, also habe ich mich gefragt, wie ich am besten eine begrenzte Menge Geld für neue Hardware ausgeben kann - mehr RAM , schnellere CPU usw. Vom Beobachten des Task-Managers aus glaube ich nicht, dass RAM das Problem ist (es wird nie über 50% der physischen Auslastung), aber die CPU-Auslastung wird auch nicht viel über 50%, was mich seltsam findet . Mein aktuelles Setup ist ein Intel Core i5 mit 2,66 GHz, 4 GB RAM und einer Festplatte mit 7200 U / min. Ist es sinnvoll, auf Kosten des zusätzlichen Arbeitsspeichers nur die schnellstmögliche CPU zu erhalten? Ich habe mich auch gefragt, wie sich die CPU-Cache-Größe der Stufe 3 auf statistische Rechenprobleme auswirkt.

Update: Nachdem ich auf meta SO gefragt habe, wurde mir geraten, die Frage neu zu formulieren und auf Superuser zu posten. Dazu muss ich in MCMCglmm näher erläutern, was "unter der Haube" vor sich geht. Bin ich zu Recht der Meinung, dass der Großteil der Rechenzeit für die Optimierung aufgewendet wird - ich meine, das Maximum einer komplizierten Funktion zu finden? Ist Matrixinversion und / oder andere lineare Algebra-Operationen auch eine häufige Operation, die Engpässe verursachen kann? Alle anderen Informationen, die ich der Superuser-Community geben könnte, würden sehr dankbar aufgenommen.

Joe King
quelle
Ich denke nicht, dass es eine Überraschung sein sollte, dass MCMC bei solchen Problemen lange braucht. Ich bin mir sicher, dass es wahrscheinlich Möglichkeiten gibt, es schneller laufen zu lassen. Es wird jedoch noch einige Zeit dauern, bis die richtige Antwort gefunden ist.
Michael R. Chernick
@Michael Chernick, danke - mir ist klar, dass es noch einige Zeit dauern wird. Ich möchte es nur so weit wie möglich minimieren, das ist alles. Mein Vater hat ein Oracle SPARC T4 bei seiner Arbeit und das läuft MCMC ziemlich schnell;)
Joe King
3
@JoeKing, ich habe Ihren Titel so bearbeitet, dass er aussagekräftiger ist und möglicherweise mehr Nutzer anzieht, die Ihnen helfen können. Ich habe auch festgestellt, dass das Anpassen von lmer()Modellen an große Datenmengen einige Zeit in Anspruch nehmen kann, insbesondere, wenn dies häufig erforderlich ist. Eine Antwort auf Ihre Frage könnte im Parallel-Computing liegen, obwohl andere Benutzer (z. B. @DirkEddelbuettel) hier viel hilfreicher wären als ich. Es besteht auch die Möglichkeit, dass Sie beim Stackoverflow bessere Antworten erhalten.
Makro
Macro, danke für die hilfreiche Bearbeitung. Ich habe auch verwendet glmer(wie Sie aus meinen anderen Posts wissen) und das dauert ungefähr 20 Sekunden, aber das Problem ist, dass es keine Vertrauensbereiche oder Standardfehler gibt und aus dem, was ich auf einer Mailingliste lese, den Autor des Archivs lme4Laut Paket kann die Stichprobenverteilung der zufälligen Effekte sehr unterschiedlich sein, sodass diese Statistiken nicht gemeldet werden. Eigentlich habe ich von MCMCglmmbisher festgestellt , dass sie sich in meinem Fall dem Normalen nähern (nicht, dass das viel hilft - ich sage nur). Wäre es besser, wenn ich eine Migration auf SO beantrage?
Joe King
1
Ich kenne die Besonderheiten von mcmcglmm nicht, habe aber häufig MCMC-Methoden verwendet. Das Schöne an MCMC ist, dass es peinlich parallelisierbar ist (das ist ein technischer Begriff!). Wenn Sie mehrere Kerne haben, führen Sie unabhängige Ketten auf jedem aus und bündeln dann die Ergebnisse. So führe ich MCMC aus, aber ich habe meine eigenen parallelen C ++ - Codes (mit MPI) geschrieben, um dies zu tun. Wenn es um Hardware geht, sollten Sie sich für etwas mit so vielen Kernen wie möglich entscheiden. Dies setzt voraus, dass das von Ihnen verwendete Tool die Vorteile mehrerer Kerne nutzen kann. Informieren Sie sich in Bezug auf die Informationen, die SU in Ihrer Frage enthalten soll, darüber, ob Sie Kerne verwenden können.
Bogdanovist,

Antworten:

3

Warum läuft es nicht mit dem EC2- Cloud-Computing-Dienst von Amazon oder einem ähnlichen Dienst? MCMCpackWenn ich mich recht entsinne, wird es meistens in C implementiert, sodass es nicht viel schneller wird, es sei denn, Sie verringern die Komplexität Ihres Modells, Iterationen usw. Mit EC2 oder ähnlichen Cloud-Computing-Diensten können Sie mehrere Instanzen haben Spezifikationen, die Sie wünschen, und lassen Sie alle Ihre Modelle auf einmal laufen.

Zach
quelle
Eine Änderung daran: Die Ausführung auf m2.4xlarge (die 68.7GB RAM-Option) ist eine einzige Möglichkeit, um sicherzustellen, dass Sie den gesamten Computer erhalten, sodass Sie nicht unbedingt auf RAM-Caching-Probleme stoßen, die auf VMs (virtuellen Maschinen) auftreten können / AMIs), die auf einem Bruchteil der Maschine ausgeführt werden.
Iterator