代码之家  ›  专栏  ›  技术社区  ›  MAPK

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

  •  0
  • MAPK  · 技术社区  · 8 年前

    当我以交互模式在HPC集群中运行作业时,我可以加载包,如果它失败(不确定为什么某些包在第一次加载时失败),我可以通过运行 library (failed package) 多次,但当我这样做的时候 qsub my_rscript_job.pbs ,包无法加载。

    我的脚本工作。pbs脚本是:

    #!/bin/bash 
    #PBS -l walltime=100:00:00
    #PBS -l ncpus=1,mem=100g
    
    source ~/.bashrc
    
    Rscript /dmf/mypath/map.r -t 100
    

    我需要在地图中加载的包。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运行时强制加载包?

    3 回复  |  直到 8 年前
        1
  •  3
  •   Derek    8 年前

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

    其余的答案取决于HPC群集设置。也许它们使用模块,在这种情况下,您需要运行类似于 module load R/3.2 。不管怎样,看起来您需要向HPC群集管理员寻求帮助。

        2
  •  1
  •   MAPK    8 年前

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

     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
  •  0
  •   Toni_Mashengo    8 年前

    “我想我也有一个类似的情况,”德里克。

    我的机器(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上运行。

    我很感兴趣,并且知道更多关于在哪里可以访问您正在谈论的提交节点和工作节点的信息。

    当做