Come posso ottimizzare l'efficienza computazionale quando si adatta ripetutamente un modello complesso a un set di dati di grandi dimensioni?


12

Sto MCMCglmmriscontrando problemi di prestazioni utilizzando il pacchetto in R per eseguire un modello di effetti misti. Il codice è simile al seguente:

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)

Ci sono circa 20.000 osservazioni nei dati e sono raggruppate in circa 200 scuole. Ho eliminato tutte le variabili non utilizzate dal frame di dati e rimosso tutti gli altri oggetti dalla memoria, prima di eseguire. Il problema che ho è che richiede molto tempo per l'esecuzione, a meno che non riduca le iterazioni a un numero inaccettabilmente piccolo. Con 50.000 iterazioni, ci vogliono 5 ore e ho molti modelli diversi da eseguire. Quindi vorrei sapere se ci sono modi per accelerare l'esecuzione del codice o altri pacchetti che potrei usare. Sto usando MCMCglmmperché voglio intervalli di confidenza per gli effetti casuali.

D'altra parte, speravo di ottenere un nuovo PC entro la fine dell'anno, ma con un po 'di fortuna potrei essere in grado di portarlo avanti, quindi mi sono chiesto come spendere meglio una quantità limitata di denaro per il nuovo hardware: più RAM , CPU più veloce ecc. Dal guardare il task manager non credo che la RAM sia il problema (non supera mai il 50% dell'utilizzo fisico), ma l'utilizzo della CPU non supera neanche il 50%, il che mi sembra strano . La mia configurazione attuale è un Intel Core i5 2,66 GHz, 4 GB di RAM, HDD a 7200 giri / min. È ragionevole ottenere la CPU più veloce possibile, a spese della RAM aggiuntiva? Mi chiedevo anche l'effetto della dimensione della cache della CPU di livello 3 su problemi di calcolo statistico come questo?

Aggiornamento: dopo aver chiesto su meta SO mi è stato consigliato di riformulare la domanda e pubblicare su Superuser. Per fare ciò ho bisogno di fornire maggiori dettagli su ciò che sta accadendo "sotto il cofano" in MCMCglmm. Ho ragione nel pensare che la maggior parte del tempo di calcolo viene impiegato per l'ottimizzazione - intendo trovare il massimo di alcune funzioni complicate? L'inversione di matrice e / o altre operazioni di algebra lineare sono anche un'operazione comune che potrebbe causare colli di bottiglia? Qualsiasi altra informazione che potrei dare alla community di Superuser verrà ricevuta con gratitudine.


Non penso che dovrebbe essere una sorpresa che MCMC impieghi molto tempo su tali problemi. Sono sicuro che probabilmente ci sono modi per farlo funzionare più velocemente. Ma per ottenere una risposta corretta ci vorrà ancora tempo.
Michael R. Chernick,

@Michael Chernick, grazie - sono consapevole che ci vorrà ancora tempo. Vorrei solo minimizzarlo il più possibile, tutto qui. Mio padre ha un Oracle SPARC T4 al suo lavoro e che esegue MCMC abbastanza velocemente;)
Joe King,

3
@JoeKing, ho modificato il tuo titolo per renderlo più descrittivo e forse attirare più utenti che possono aiutarti. Ho anche scoperto che l'adattamento di lmer()modelli a set di dati di grandi dimensioni può richiedere parecchio tempo, soprattutto se è necessario farlo più volte. Una risposta alla tua domanda potrebbe risiedere nel calcolo parallelo anche se altri utenti (ad esempio @DirkEddelbuettel) sarebbero molto più utili di me con questo. C'è anche la possibilità che tu possa ottenere risposte migliori su StackOverflow.
Macro

Macro, grazie per la modifica utile. Ho anche usato glmer(come sapete dai miei altri post) e questo richiede circa 20 secondi, ma il problema è che non fornisce intervalli di confidenza o errori standard e da quello che ho letto su un archivio di mailing list l'autore del lme4Il pacchetto afferma che la distribuzione campionaria degli effetti casuali può essere molto distorta, quindi tali statistiche non vengono riportate. In realtà ho scoperto da MCMCglmmcosì lontano che nel mio caso si stanno avvicinando alla normalità (non che questo aiuti molto - sto solo dicendo). Sarebbe meglio se chiedessi di migrarlo su SO?
Joe King,

1
Non conosco i dettagli di mcmcglmm, ma ho usato molto i metodi MCMC. La cosa bella di MCMC è che è imbarazzantemente parallelizzabile (questo è un termine tecnico!). Se si dispone di più core, si eseguono catene indipendenti su ciascuno, quindi si raggruppano i risultati. Questo è il modo in cui eseguo MCMC, ma ho scritto i miei codici C ++ paralleli (usando MPI) per farlo. In termini di consulenza hardware, scegli qualcosa con il maggior numero di core possibile. Ciò presuppone che qualunque strumento tu stia utilizzando può trarre vantaggio da più core. In termini di informazioni da fornire a SU nella tua domanda, scopri se puoi utilizzare i core.
Bogdanovist,

Risposte:


3

Perché non eseguirlo sul servizio di cloud computing EC2 di Amazon o su un servizio simile simile? MCMCpackè, se ricordo bene, per lo più implementato in C, quindi non diventerà molto più veloce se non diminuisci la complessità del modello, le iterazioni, ecc. Con EC2 o servizi di cloud computing simili, puoi avere più istanze in qualunque specifiche che desideri ed esegui tutti i tuoi modelli contemporaneamente.


Una modifica a questo: l'esecuzione su m2.4xlarge (l'opzione RAM da 68,7 GB) è un solo modo per garantire che stai ottenendo la macchina completa, in modo da non colpire necessariamente i problemi di cache RAM che possono verificarsi sulle macchine virtuali (macchine virtuali / AMIs) eseguiti su una frazione della macchina.
Iterator,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.