繁体   English   中英

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

[英]Force load R packages while running the job in cluster

当我以交互模式在HPC群集中运行作业时,可以加载软件包,如果加载失败(不确定为什么某些软件包一开始无法加载),可以通过运行多个library (failed package)来加载它次,但是当我执行qsub my_rscript_job.pbs ,程序包无法加载。

我的my_rscript_job.pbs脚本是:

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

source ~/.bashrc

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

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

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

如果以交互方式提交作业并将rscript直接提交到终端,可以加载该文件,但是当我执行qsub时,出现以下错误:

Loading required package: methods
Warning messages:
1: package ‘biomaRt’ was built under R version 3.2.2 
2: In eval(quote({ : bytecode version mismatch; using eval
3: In .recacheSubclasses(def@className, def, doSubclasses, env) :
  undefined subclass "externalRefMethod" of class "expressionORfunction"; definition not updated
4: In .recacheSubclasses(def@className, def, doSubclasses, env) :
  undefined subclass "externalRefMethod" of class "functionORNULL"; definition not updated
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/dmf/bin/R/x86_64-redhat-linux-gnu-library/3.2/dplyr/libs/dplyr.so':
  /dmf/bin/R/x86_64-redhat-linux-gnu-library/3.2/dplyr/libs/dplyr.so: undefined symbol: Rf_installChar
In addition: Warning message:
package ‘dplyr’ was built under R version 3.2.2 
Error: package or namespace load failed for ‘dplyr’
Execution halted

有没有办法在将r作为qsub运行时强制加载软件包?

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

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

设置计时器以重新加载每个软件包,直到成功加载列表中的每个软件包。 运行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)

    }

我想我和@Derek说话时的情况也很相似。

我的机器(Ubuntu 14.04)上安装了R版本3.0.2,并且可以很好地与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机器上运行。

我受到了关注,并且知道我可以在哪里访问您正在谈论的此提交节点和工作节点的更多信息。

问候!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM