在 运行 集群中的作业时强制加载 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
有没有办法在 运行ning r as qsub 时强制加载包?
提交节点和工作节点上的R版本似乎不同。 运行 命令 R --version
并提交一个只有 运行s R --version
的 pbs 脚本。他们可能会有所不同。
其余答案取决于您的 HPC 集群设置。也许他们使用模块,在这种情况下,您将需要 运行 类似于 module load R/3.2
的命令。无论哪种方式,看起来您都需要向 HPC 集群管理员寻求帮助。
我想我也和你说的@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
我 运行 R.version 在 Rapache 和 R 上,它给了我两个不同的版本!
Rapache 运行ning 在 3.0.2 中,我的 R 在机器 3.3.0 中。
我很感兴趣并且知道更多关于我在哪里可以访问您正在谈论的这个提交节点和工作节点。
此致!
设置定时器重新加载每个包,直到成功加载列表中的每个包。当 运行 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)
}
当我在 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
有没有办法在 运行ning r as qsub 时强制加载包?
提交节点和工作节点上的R版本似乎不同。 运行 命令 R --version
并提交一个只有 运行s R --version
的 pbs 脚本。他们可能会有所不同。
其余答案取决于您的 HPC 集群设置。也许他们使用模块,在这种情况下,您将需要 运行 类似于 module load R/3.2
的命令。无论哪种方式,看起来您都需要向 HPC 集群管理员寻求帮助。
我想我也和你说的@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
我 运行 R.version 在 Rapache 和 R 上,它给了我两个不同的版本! Rapache 运行ning 在 3.0.2 中,我的 R 在机器 3.3.0 中。
我很感兴趣并且知道更多关于我在哪里可以访问您正在谈论的这个提交节点和工作节点。
此致!
设置定时器重新加载每个包,直到成功加载列表中的每个包。当 运行 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)
}