【问题标题】:Force load R packages while running the job in cluster在集群中运行作业时强制加载 R 包
【发布时间】:2016-07-08 19:08:33
【问题描述】:

当我在 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 cluster-computing hpc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我想我也有与@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 上运行。

        我很感兴趣并且知道更多关于我在哪里可以访问你所说的这个提交节点和工作节点。

        问候!

        【讨论】:

        • 请看下面我的回答,因为我可以通过设置一个 5 秒的计时器来重新加载每个包(直到所有包都成功加载)来解决这个问题。
        • 感谢您的帮助:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多