簡體   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