#r #multithreading #cpu-cores #dirichlet
#r #многопоточность #процессорные ядра #дирихле
Вопрос:
Я анализирую данные микробиома, используя
library(phyloseq)
library(microbiome)
library(DirichletMultinomial)
и несколько других библиотек. Подгонка многочленных моделей Дирихле для подсчета данных dmn {DirichletMultinomial}
занимает довольно много времени. Могут ли вычисления выполняться на нескольких ядрах процессора в R.
Я пытался:
dat <- abundances(pseq)
count <- as.matrix(t(dat))
fit <- lapply(1:25, dmn, count = count, verbose=TRUE)
замена на:
library(parallel)
numCores <- detectCores()
...
fit <- mclapply(1:25, dmn, count = count, verbose=TRUE, mc.cores = numCores)
но это возвращает сообщение с предупреждением об ошибке:
В mclapply (1:25, dmn, count = count, verbose = TRUE, mc.cores = numCores) : все запланированные ядра обнаружили ошибки в пользовательском коде
Я использую
R version 4.0.2 (2020-06-22) -- "Taking Off Again"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin17.0 (64-bit)
> detectCores()
[1] 4
Кто-нибудь может помочь?
С наилучшими пожеланиями, Марчин
Ответ №1:
Да, как показано на виньетке http://bioconductor.org/packages/release/bioc/vignettes/DirichletMultinomial/inst/doc/DirichletMultinomial.pdf раздел 2 и в вашем коде возможно запускать на нескольких ядрах.
Вероятно, происходит то, что для некоторых значений X возникают ошибки; каково значение fit? Кроме того, можно попробовать
library(BiocParallel)
fit <- bplapply(1:25, dmm, count, BPPARAM = MulticoreParam(numCores))
fit
будет объектом, к которому можно запрашивать (см. биопараллельную виньетку, доступную сhttps://bioconductor.org/packages/BiocParallel ) для получения дополнительной информации об ошибках.
Комментарии:
1. Дорогой Мартин, должно быть, проблема с пакетами. Я обновил их, и теперь это работает. Все ядра используются сейчас. Спасибо!