Переход от многоядерного к многоузловому в R
Я привык выполнять задания R в кластере с 32 ядрами на узел. Я сейчас в кластере с 16 ядрами на узел. Я хотел бы поддерживать (или улучшать) производительность, используя более одного узла (как я делал) одновременно.
Как видно из моего фиктивного сценария продажи и фиктивной функции (ниже), распараллеливание на одном узле действительно легко. Легко ли распространить это на несколько узлов? Если так, как бы я изменил свои сценарии?
R скрипт:
library(plyr)
library(doMC)
registerDoMC(16)
dothisfunctionmanytimes = function(d){
print(paste("my favorite number is",d$x,'and my favorite letter is',d$y))
}
d = expand.grid(1:1000,letters)
d_ply(.data=d,.fun=dothisfunctionmanytimes,.parallel=T)
Сценарий оболочки:
#!/bin/sh
#PBS -N runR
#PBS -q normal
#PBS -l nodes=1:ppn=32
#PBS -l walltime=5:00:00
#PBS -j oe
#PBS -V
#PBS -M email
#PBS -m abe
. /etc/profile.d/modules.sh
module load R
#R_LIBS=/home/diag/opt/R/local/lib
R_LIBS_USER=${HOME}/R/x86_64-unknown-linux-gnu-library/3.0
OMP_NUM_THREADS=1
export R_LIBS R_LIBS_USER OMP_NUM_THREADS
cd $PBS_O_WORKDIR
R CMD BATCH script.R
(Сценарий оболочки отправляется qsub script.sh
)