在群集中运行作业时强制加载R包

时间:2016-03-22 02:31:38

标签: r cluster-computing hpc

当我以交互模式在HPC集群中运行作业时,我可以加载软件包,如果它失败(不确定为什么某些软件包无法在第一个实例加载)加载,我可以通过运行{{1多次,但当我library (failed package)时,包无法加载。

我的my_rscript_job.pbs脚本是:

qsub my_rscript_job.pbs

我需要在map.r脚本中加载的包是

#!/bin/bash 
#PBS -l walltime=100:00:00
#PBS -l ncpus=1,mem=100g

source ~/.bashrc

Rscript /dmf/mypath/map.r -t 100

如果我以交互模式提交作业并将rscript直接提交给终端,我可以加载,但是当我执行qsub时,我收到以下错误:

library(biomaRt)
library(dplyr)
library(stringi)
library(GenomicFeatures)
library(Rsamtools)
library(foreach)
library(doMC)
library(doMC)

有没有办法强制加载包,同时运行r作为qsub?

3 个答案:

答案 0 :(得分:2)

看起来提交节点上的R版本和工作节点不同​​。运行命令R --version并提交仅运行R --version的pbs脚本。他们可能会有所不同。

其余答案取决于您的HPC群集设置。也许他们使用模块,在这种情况下,您需要运行类似于module load R/3.2的命令。无论哪种方式,您都需要向HPC集群管理员寻求帮助。

答案 1 :(得分:1)

设置计时器以重新加载每个包,直到成功加载列表中的每个包。运行qsub选项时,有一个5秒的计时器强制加载包。

 myPackages <- c("biomaRt", "dplyr", "stringi","GenomicFeatures","Rsamtools","foreach","doMC")
    tryCount <- 0    

    while( !all(myPackages %in% (.packages())) ){

      try(require(biomaRt))
      try(require(dplyr))
      try(require(stringi))
      try(require(GenomicFeatures))
      try(require(Rsamtools))
      try(require(foreach))
      try(require(doMC))

      tryCount <- tryCount + 1

      if( !all(myPackages %in% (.packages()))  ){
        cat(paste0("Failure: ", tryCount, "\n"))
        cat("Failed to load: ")
        cat(myPackages[ !myPackages %in% (.packages()) ])
        cat("\n")
      } else {
        print(paste0("Success!"))
      }

      Sys.sleep(5)

    }

答案 2 :(得分:0)

我想我也有一个类似于你正在谈论的人@Derek。

我的机器上有R版3.0.2(Ubuntu 14.04),并且与Rapache的连接工作得很好。 我将R软件更新到版本3.3.0,并且当我使用带有我的功能的软件包时,它在机器中运行得很好。 但是在Rapache上,它给了我这个错误。

    Error in dyn.load(file, DLLpath = DLLpath, ...) :
    unable to load shared object '/usr/lib/R/library/grid/libs/grid.so':
    /usr/lib/R/library/grid/libs/grid.so: undefined symbol: Rf_installChar

我在Rapache和R上运行R.version,它为我们提供了不同的版本! Rapache在3.0.2中运行,我的R在机器上运行3.3.0。

我很擅长并且更了解我在哪里可以访问您正在讨论的提交节点和工作节点。

问候!