【问题标题】:R-code in Slurm cluster not read properlySlurm 集群中的 R 代码无法正确读取
【发布时间】:2020-02-27 15:39:38
【问题描述】:

我正在使用以下“.sh”文件在 Slurm 集群上运行 R 代码:

#!/bin/bash
#SBATCH --partition=p_parallel
#SBATCH --nodes=1
#SBATCH --cpus-per-task=16
#SBATCH --workdir=/work/uder2/ODE/lancio/
module load statistics/r-3.6.1
srun Rscript   TEST.R

R 代码非常简单。有时喜欢

DIRbase     = "/work/uder2/ODE/"
DIRdata     = paste(DIRbase,"data/",sep="")
list.files(DIRdata)
load(paste(DIRdata,"Data.Rdata",sep=""))


NAME = "PriorU" 
ialg = 3

nG  = 500  
LimEta = 40  

LimMu2  = 15 
LimMin = 500

LimMu = 0.1
LimSpike = 10
LimSigma2 = (8)^2/(-2*log(LimMu))*1.2


NAME = paste(NAME,"_ng",nG, sep="")

### ### ### ### ### ### ### ### 
### MODELS
### ### ### ### ### ### ### ### 

DATA = allGenesData
nrowData = nrow(DATA$premature)


sd1 = as.numeric(apply(DATA$premature,1,var))
sd2 = as.numeric(apply(DATA$mature,1,var))
sd3 = as.numeric(apply(DATA$nascent,1,var))

epsi = 0.000001
App = c(which(sd1<=epsi),which(sd2<=epsi),which(sd3<=epsi))
App2 = c(which(sd1>50),which(sd2>100000),which(sd3>1500))

minep = 0.1
xy1 = as.numeric(apply(DATA$premature,1,min))
xy2 = as.numeric(apply(DATA$mature,1,min))
xy3 = as.numeric(apply(DATA$nascent,1,min))
App3 = c(which(xy1<=minep),which(xy2<=minep),which(xy3<=minep))

实际上,代码要长得多,但我认为文件的内容并不重要。

发生的情况是,有时代码编写不正确。例如,而不是

App3 = c(which(xy1<=minep),which(xy2<=minep),which(xy3<=minep))

已读

App3  which(xy1<=minep),which(xy2<=minep),which(xy3<=minep))

然后,无需接触代码并再次启动“.sh”文件,即可正确读取代码。 这是“随机”发生的,而且永远不会出现在代码的同一部分。

好像和码长有关。

有什么帮助吗?

谢谢

编辑 1:

例如,slurm 文件的输出是

[1] "Data.Rdata"
Loading required package: MASS
##
## Markov Chain Monte Carlo Package (MCMCpack)
## Copyright (C) 2003-2020 Andrew D. Martin, Kevin M. Quinn, and Jong Hee Park
##
## Support provided by the U.S. National Science Foundation
## (Grants SES-0350646 and SES-0350613)
##
Loading required package: stats4
null device 
          1 
Error: unexpected symbol in:
"      Beta0   = rep(-4,3),
      Betagonale Psi"
Execution halted
srun: error: node02: task 0: Exited with exit code 1

代码是

priors  = list(
     Beta0 = list(
         type        = "Normal",
         Par1        = rep(-4,3),
         Par2        = rep(10,3)
       ),
       Beta1 = list(
         type        = "Normal",
         Par1        = rep(1.8,3), 
         Par2        = rep(10,3)
       ),
      VarK   = list(
        type        = "TruncatedNormal",
        Par1        = rep(0,3),
        Par2        = rep(100,3),
        Par3        = rep(0.0000000,3),
        Par4        = rep(LimSigma2,3), 
        Par5        = rep(2,3)
        #Par5        = rep(2,3)
      ), 
      RegCoef = list(
          type        = "Normal",
          Par1        = c(0,0,0,0,0), ## (1 o stessa dimension)
          Par2        = rep(100,5)
      ),
      sigmaMat = list(
          type        = "InverseWishart",
          Par1        = rep(10,3), 
          Par2        = c(diag(1,5)) ## diagonale Psi
      ),

      DPpar = list(
          type        = "Gamma",
          Par1        = 1, 
          Par2        = 1 ## diagonale Psi
      )
    ) 

【问题讨论】:

  • 这听起来不可能。您是否有正在生成的slurm*.out 文件类型的示例。我敢打赌它与环境变量有关。为确保TEST.R 每次都是同一个文件,您可以对 md5sum 进行硬编码,然后在运行srun Rscript TEST.R 之前比较 R 脚本。每次TEST.R 更改时修改这有点烦人。
  • 如果您无法创建可重现的示例并且事情只是“随机”发生,那么它可能不是代码问题,而是运行时环境问题。您应该联系您的网络管理员寻求帮助。
  • @MrFlick 我联系了网络管理员,但我们无法弄清楚。该文件是相同的,也是因为有几次,为了测试问题,我在一分钟内启动了该文件 3 次,问题发生在第二个。我用 slurm*.out 文件的示例编辑了问题
  • 当作业在计算节点上运行时,您是否正在将提交节点上的TEST.R 修改为vimemacs
  • 这可能是一个潜在的原因,具体取决于 Sublime 和 NFS 客户端在节点上的确切行为。

标签: r syntax-error slurm


【解决方案1】:

这里描述的症状,存储在 NFS 服务器上的文件在读取时损坏,大部分时间与文件上的竞争条件有关。通常,该文件打开以从一个 NFS 客户端(登录节点)写入,并打开以从另一个客户端(计算节点)读取。由于 NFS 中没有全局锁定机制,正在读取文件的客户端并不知道正在写入文件。使用支持自动保存的高级编辑器,文件有时会以不一致的状态写入磁盘,例如在复制/粘贴操作的中间。

在这种情况下,一个选项是在提交作业时完全避免修改文件,或者至少禁用自动保存。

另一种选择是在提交作业之前制作文件副本,以便之后不会更新。

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2016-06-15
    相关资源
    最近更新 更多