Запустить Rmpi ​​на кластере, указать путь к библиотеке

Я пытаюсь провести анализ параллельно на нашем вычислительном кластере.
К сожалению, мне пришлось настроить Rmpi ​​самостоятельно, и, возможно, я сделал это неправильно. Поскольку мне пришлось установить все необходимые пакеты в мою домашнюю папку, мне всегда нужно звонить

.libPaths('/home/myfolder/Rlib');

прежде чем я могу загрузить пакеты.

Тем не менее, похоже, что doMPI пытается загрузить себя, прежде чем я могу установить путь к библиотеке.

.libPaths('/home/myfolder/Rlib');
cat("Step 1")
library(doMPI)
cl <- startMPIcluster()
registerDoMPI(cl)
cat("Step 2")
Children_mcmc1 = foreach(i=1:2) %dopar% {
    cat("Step 3")
    .libPaths('/home/myfolder/Rlib');
    library(MCMCglmm)
    cat("Step 4")
    load("krmh_married.rdata")
    nitt = 1000; thin = 50; burnin = 100
    MCMCglmm( children ~ paternalage.factor ,
        random=~idParents,
        family="poisson", 
        data=krmh_married, 
        pr = F, saveX = T, saveZ = T,
        nitt=nitt,thin=thin,burnin=burnin)
}
closeCluster(cl)
mpi.quit()

Если я сделаю

mpirun -H localhost -n 3 R --slave -f "3 - krmh mcmcglmm scc test 2.r" 

Я получаю (после удаления некоторых шаблонных сообщений)

Во время запуска - предупреждающее сообщение:
Шаг 1
Шаг 1
Шаг 1
Шаг 2 Ошибка в {: задача 2 не выполнена - "не удается открыть соединение"
Звонки: %dopar% ->
Исполнение остановлено

Если я сделаю

R --slave -f "3 - krmh mcmcglmm scc test 2.r" 

я получил

Шаг 1
Ошибка в библиотеке (doMPI): нет пакета с именем 'doMPI'
Вызовы: локальные... eval -> suppressMessages -> withCallingHandlers -> библиотека
Исполнение остановлено
Ошибка в библиотеке (doMPI): нет пакета с именем 'doMPI'
Вызовы: локальные... eval -> suppressMessages -> withCallingHandlers -> библиотека
Исполнение остановлено

Я пытался установить doMPI на ходу, но даже если Шаг 2 не распечатан, похоже, что ошибка возникает из-за цикла.

И, конечно, со всем этим я все еще тестирую на нашем веб-интерфейсе, у меня еще не было возможности отправить задание в предполагаемый кластер.

Я пытался указать .libPaths позвоните в мой.Rprofile, но я не уверен, что это будет прочитано на кластере, и я даже не могу получить его для чтения на внешнем интерфейсе (и я не мог понять, где R ищет файл).

1 ответ

Решение

Гораздо проще установить пакеты R в "личную библиотеку", так как она используется автоматически, поэтому вам не нужно звонить .libPaths в ваших сценариях. Вы можете определить, что это за каталог, выполнив:

> Sys.getenv('R_LIBS_USER')

Это будет автоматически первый каталог, возвращенный .libPaths если он существует, то вам не нужно беспокоиться о звонке .libPaths совсем.

Обратите внимание, что нет смысла звонить .libPaths в теле цикла foreach, поскольку работники кластера должны загрузить doMPI, прежде чем они смогут выполнить какие-либо задачи.

Я не уверен, что происходит неправильно в вашем случае с mpirun, потому что mpirun запускает всех рабочих, поэтому все первые четыре строки вашего скрипта выполняются всеми. Вот почему "Шаг 1" отображается три раза. Но во втором случае рабочие кластера создаются, поэтому пакет doMPI загружается скриптом RMPIworker.R, что приводит к ошибке загрузки doMPI.

Я предлагаю вам использовать подход mpirun для решения .libPaths проблема, но позвоните startMPIcluster с verbose=TRUE вариант. Это создаст некоторые файлы в вашем рабочем каталоге с именем "MPI_*. Log", которые могут содержать некоторые полезные сообщения об ошибках, которые дадут ключ к решению проблемы.

Другие вопросы по тегам