[英]debugging R code when using slurm
我正在集群中的R
运行仿真。 每个R
文件包含100个模型。 每个模型分析不同的数据集。 群集命令包含在slurm
文件中,如下所示。
一小部分模型显然收敛得不够好,无法估计Hessian,因此这些模型会产生误差。 错误将放置在错误日志文件中。 但是,我无法通过查看参数估计值,错误日志文件和输出日志文件来确定100个模型中的哪个正在生成错误。
这是错误消息的示例
Error in chol.default(fit$hessian) :
the leading minor of order 3 is not positive definite
Calls: chol2inv -> chol -> chol.default
尽管存在这些错误,但仍返回参数估计值。 一些SE很大,但是我认为即使没有返回错误消息,SE有时也可能很大。
是否可以在下面的我的slurm
文件中包括一行附加内容,以生成一个日志文件,其中包含错误和输出的其余部分,并且错误显示在其原始位置(例如,在我的计算机上显示错误的位置) Windows笔记本电脑)。 这样,我可以通过查看日志文件来快速确定哪些模型正在产生错误。 我一直在尝试解决问题的方法,但到目前为止还无法提出任何建议。
这是一个slurm
文件:
#!/bin/bash
#SBATCH -J JS_N200_301_400_Oct31_17c.R
#SBATCH -n 1
#SBATCH -c 1
#SBATCH -N 1
#SBATCH -t 2000
#SBATCH -p community.q
#SBATCH -o JS_N200_301_400_Oct31_17c.out
#SBATCH -e JS_N200_301_400_Oct31_17c.err
#SBATCH --mail-user markwm@myuniversity.edu
#SBATCH --mail-type ALL
Rscript JS_N200_301_400_Oct31_17c.R
不确定这是否是您想要的,但是R选项error
允许控制应发生的错误(否则您不会捕获)。 例如,设置
options(error = function() {
traceback(2L)
dump.frames(dumpto = "last.dump", to.file = TRUE)
})
在* .R脚本的开头或.Rprofile
启动脚本中,将(a)如果出现错误则输出回溯,但更重要的是,它还将(b)将调用堆栈转储到文件last.dump.rda
,您可以在新的R会话中加载为:
dump <- get(load("last.dump.rda"))
请注意, get(load(
是不是一个错误,在这里dump
的类的对象dump.frames
它允许你检查调用堆栈和它的内容。
您当然可以自定义error
以执行其他操作。
我从集群的IT负责人那里了解到,只需删除slurm
文件中对错误日志的引用,就可以将错误消息添加到输出日志中。 见下文。 似乎足够好。
我还计划在每个模型输出的开头和结尾将型号编号输出到日志中,以提高清晰度(我从一开始就应该这样做)。
#!/bin/bash
#SBATCH -J JS_N200_301_400_Oct31_17c.R
#SBATCH -n 1
#SBATCH -c 1
#SBATCH -N 1
#SBATCH -t 2000
#SBATCH -p community.q
#SBATCH -o JS_N200_301_400_Oct31_17c.out
#SBATCH --mail-user markwm@myuniversity.edu
#SBATCH --mail-type ALL
Rscript JS_N200_301_400_Oct31_17c.R
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.