Параллельная обработка в R с многомерными моделями MCMCglmm - PullRequest
0 голосов
/ 23 апреля 2020

Я ищу совет о том, как реализовать параллельную обработку в функциях MCMCglmm в R. Я работаю в пакете MCMCglmm для запуска многомерных, филогенетически обоснованных моделей. Использование кода ниже для каждой модели занимает около 48-72 часов:

Mult=2;NITT=260000;THIN=200;BURN=60000
 
EC1<- MCMCglmm(cbind(InfllogX, InflpropY, PropBottomAsym, PropTopAsym, LogSlope, AsymCoef) ~ (trait):log10Brainmass+(trait):log10Bodymass,random = ~us(trait):phylo, family=rep("gaussian", 6), rcov=~us(trait):units, ginverse=list(phylo=inv.phyloEC$Ainv), prior=prior.1, data=speciesimmuneEC, nitt=NITT*Mult,thin=THIN*Mult,burnin=BURN*Mult)

Поскольку у меня около 15 моделей, которые мне нужно запустить, мне нужно реализовать параллельную обработку в коде, чтобы воспользоваться преимуществами полные возможности компьютера. Виртуальный компьютер, с которым я работаю, имеет Windows ОС, 8 ядер и 96 ГБ памяти. Я пробовал следующий код (на основе: https://www.vikram-baliga.com/blog/2018/9/30/parallel-processing-for-mcmcglmm-in-r-windows-friendly), и, хотя он, кажется, создает кластер из 8 ядер, он не работает должным образом (то есть, R запускает код или неопределенно) R:

setCores=detectCores()
cl <- makeCluster(getOption("cl.cores",setCores))
cl.pkg <- clusterEvalQ(cl,library(MCMCglmm))
 
clusterExport(cl,"speciesimmuneSE")
clusterExport(cl,"tree")
clusterExport(cl,"prunedSE")
clusterExport(cl,"phylo")
clusterExport(cl,"inv.phyloSE")
clusterExport(cl,"prior.1")

modelEC1_10runs <- parLapply(cl=cl, function(i) {
MCMCglmm(cbind(Infl.logX, Infl.propY, Prop.BottomAsym,Prop.TopAsym, Log.Slope, Asym.Coef) ~ (trait):log10Brainmass*log10Bodymass,random = ~us(trait):phylo, family=rep("gaussian", 6), rcov=~us(trait):units,ginverse=list(phylo=inv.phyloEC$Ainv),prior=prior.1,data=speciesimuneEC,nitt=520000,thin=400,burnin=120000)})

Любой совет, как написать код для реализации параллельной обработки в функциях MCMCglmm в R?

...