Проблемы при параллельном запуске моделей на суперкомпьютере - do.call не распознает мой список моделей в parLapply / clusterApply - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь запустить список моделей параллельно, удаленно подключаясь к суперкомпьютеру, чтобы использовать много ядер (через computeCanada), используя parLapply параллельного пакета.

Когда я запускаю строку:

 modsout<-parLapply(cl=cl, X=mods, fun=run_um)

Я получаю следующую ошибку:

 models3out<-parLapply(cl=cl, X=mods, fun=run_um)
 Error in do.call(c, clusterApply(cl = cl, x = splitList(X, nchunks), fun 
 = lapply,  : 
 second argument must be a list
 Calls: parLapply -> do.call
 Execution halted

Я создал свой список модов, выполнив, например, следующее:

mods<-list(mod1, mod2, mod3, mod4)

После получения ошибки я проверил str (моды), и она была возвращена как «список из 4», поэтому я действительно не понимаю, почему она не распознается в моей строке parLapply.

Вот выдержка из моего кода:

nodeslist = unlist(strsplit(Sys.getenv("NODESLIST"), split=" "))
cl<-makeCluster(nodeslist, type="PSOCK") #make cluster

#load all the data xxx

#create model list
mods<- list(b0<-list(formula='~1~1', data=bear3),
           b1<-list(formula='~trail+elev+precip+temp+hum+cat+tree+month+topo~1', data=bear3),
           b2<-list(formula='~trail~1', data=bear3),
           b3<-list(formula='~elev~1', data=bear3))

run_um<-function(x) {unmarked::occu(as.formula(x[[1]]),x[[2]])} #define the function

clusterExport(cl=cl, varlist=c("bear3", "run_um") #send data to cores

clusterEvalQ(cl=cl, library(unmarked))#load package on all cores

modsout<-parLapply(cl=cl, X=mods, fun=run_um)

Моя полная работа состоит из> 2000 моделей, и каждая модель запускается не менее 20 минут, плюс мне нужно выполнить тесты на соответствие, поэтому я пытаюсь использовать HPC. Я все еще относительно новичок в R и чрезвычайно новичок в HPC, поэтому любые рекомендации были бы чрезвычайно полезны для меня в это время! Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...