Может ли `dmn {DirichletMultinomial}` выполняться на нескольких ядрах процессора в R?

#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. Дорогой Мартин, должно быть, проблема с пакетами. Я обновил их, и теперь это работает. Все ядра используются сейчас. Спасибо!