使用future.batchtools时记录R消息和错误

时间:2019-01-30 14:47:02

标签: r parallel-processing future rstan r-future

过去,我可以通过查看作业的日志文件来监视我们的Torque / PBS计算集群上的作业。我(或我正在使用的程序包)必须在某些时候进行了某些更改,以便作业中的错误不再记录在日志文件中。我无法弄清楚到底是什么。

library(future)
library(future.batchtools)
options(future.globals.maxSize = 2000*1024^2)
# login just once, deliver multiple jobs
login <- tweak(remote, workers = "XXX", persistent = FALSE)
qsub <- tweak(batchtools_torque, template = 'torque-lido.tmpl')
plan(list(login, qsub))

test %<-% { test2 %<-% { 
  message("Logged message")
  cat("Not logged text")
  warning("Logged warning")
  stop("not logged error")
}
  test2
}

我在日志文件中收到消息和警告。我根本听不懂猫的文字。我在R端收到错误,但我也希望将其记录下来。

反而我得到

  

### [bt]:作业成功终止[batchtools job.id = 1]

这似乎不正确吗?

我的模板文件如下

#!/bin/bash
<%
## Check some resources and set sane defaults
resources$walltime = assertString(resources$walltime)
resources$queue = assertString(resources$queue)
resources$memory = asInt(resources$memory, lower = 1L, upper = 1000L)
resources$ncpus = if (is.null(resources$ncpus)) 1L else asInt(resources$ncpus, lower = 1L)
resources$nodes = if (is.null(resources$nodes)) 1L else asInt(resources$nodes, lower = 1L)
job.name = assertString(resources$job.name)

## first string of queue, selected by walltime
queue = resources$queue

log.file = resources$log.file
-%>

#PBS -N <%= job.name %>
#PBS -l walltime=<%= resources$walltime %>,nodes=<%= resources$nodes %>:ppn=<%= resources$ncpus %>
#PBS -l mem=<%= resources$memory %>gb
#PBS -q <%= queue %>
#PBS -o $HOME/logs/
#PBS -e $HOME/logs/
#PBS -j oe
#PBS -m e
#PBS -d .


## export value of DEBUGME environemnt var to slave
export DEBUGME=<%= Sys.getenv("DEBUGME") %>

## run R
Rscript -e 'batchtools::doJobCollection("<%= uri %>")'

在我真正的问题中,我想通过brms监视长期运行的rstan fit的进度和错误。但是,采样过程消息不会打印在任何地方。我尝试切换各种选项(silentopen_progress),但这并没有改变任何内容。我得到的最后一条日志是采样开始之前的警告。

testbrms %<-% {
testbrms2 %<-% 
      {
        model <- brms::brm(file = model_name, silent = FALSE, open_progress = TRUE,
                     formula = outcome ~ 1, data = testdf, cores = 1, iter = 2000)
    }
}

有人有主意吗?

0 个答案:

没有答案