[英]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.