2016-12-02 7 views
0

Теперь я имею дело с большим набором данных, и я хочу использовать параллельный расчет для ускорения процесса. WestGird - это канадская вычислительная система с кластерами с межсоединением.Распределение параллельных вычислений на основе MPI в R на WestGrid (файл pbs)

Я использую два пакета doSNOW и parallel для выполнения параллельных заданий. Мой вопрос в том, как я должен написать файл pbs. Когда я отправляю задание с использованием qsub, возникает ошибка: mpirun noticed that the job aborted, but has no info as to the process that caused that situation.

Вот код R скрипт:

install.packages("fume_1.0.tar.gz") 
library(fume) 
library(foreach) 
library(doSNOW) 
load("spei03_df.rdata",.GlobalEnv) 

cl <- makeCluster(mpi.universe.size(), type='MPI') 
registerDoSNOW(cl) 
MK_grid <- 
    foreach(i=1:6000, .packages="fume",.combine='rbind') %dopar% { 
    abc <- mkTrend(as.matrix(spei03_data)[i,]) 
    data.frame(P_value=abc$`Corrected p.value`, Slope=abc$`Sen's Slope`*10,Zc=abc$Zc) 
    } 
    stopCluster(cl) 
    save(MK_grid,file="MK_grid.rdata") 
    mpi.exit() 

Пакет "дымить", это загрузить из https://cran.r-project.org/src/contrib/Archive/fume/.

Вот файл ПБС:

#!/bin/bash 
#PBS -l nodes=2:ppn=12 
#PBS -l walltime=2:00:00 
module load application/R/3.3.1 
cd $PBS_O_WORKDIR 

export OMP_NUM_THREADS=1 
mpirun -np 1 -hostfile $PBS_NODEFILE R CMD BATCH Trend.R 

Может кто-нибудь помочь? Большое спасибо.

ответ

1

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

Ваш сценарий работы выглядит разумным для меня. Это очень похоже на то, что я использую на одном из наших кластеров Torque/Moab. Рекомендуется проверить, что вы можете загружать все необходимые пакеты R в интерактивном режиме, потому что иногда может потребоваться загрузка дополнительных файлов модулей. Если вам необходимо установить пакеты самостоятельно, убедитесь, что вы устанавливаете их в стандартной «личной библиотеке», которая называется «~/R/x86_64-pc-linux-gnu-library/3.3». Это часто избегает ошибок при загрузке пакетов в сценарии R при параллельном выполнении.

У меня есть больше, чтобы сказать о своем R сценария:

  • Вам необходимо загрузить пакет RMPI в вашем R сценария с помощью library(Rmpi). Он не загружается автоматически при загрузке doSNOW, поэтому при вызове mpi.universe.size() вы получите сообщение об ошибке.

  • Я не рекомендую устанавливать R-пакеты в самом скрипте R. Это не удастся, если install.script должен запросить у вас репозиторий CRAN, например, поскольку вы не можете выполнять интерактивные функции из R-скрипта, выполняемого через mpirun.

  • Предлагаю начать mpi.universe.size() - 1 Работники кластера при звонке makeCluster. Поскольку mpirun запускает одного работника, может быть небезопасно для makeCluster, чтобы порождать mpi.universe.size() дополнительных работников, так как это приведет к итогу процессов mpi.universize.size() + 1 MPI. Это работает на некоторых кластерах, но это, по крайней мере, один из наших кластеров.

  • При отладке попробуйте использовать параметр makeCluster outfile=''. В зависимости от вашей установки MPI, это может позволить вам увидеть сообщения об ошибках, которые в противном случае были бы скрыты.