Question: BioParallel::BatchtoolsParam() - how to pass customized resource variables to batchtool's "slurm-simple" template using BatchtoolsParam()?
gravatar for Chao-Jen Wong
12 months ago by
USA/Seattle/Fred Hutchinson Cancer Research Center
Chao-Jen Wong30 wrote:

I want to use "BatchtoolsParam" to parametrize schedule options on slurm backend. When using slurm backend, the template slurm-simpl.tmpl provided by batchtools is used to parametrize sbatch variables. My problem is that I cannot find a way to pass the resources variable to the template;

Here is my code:


piApprox <- function(n) {
    nums <- matrix(runif(2 * n), ncol = 2)
    d <- sqrt(nums[, 1]^2 + nums[, 2]^2)
    4 * mean(d <= 1)

param <- BatchtoolsParam(worker=4, cluster="slurm",
result <- bplapply(rep(10e5, 100), piApprox, BPPARAM=param)

I got the error message because sbatch variable cpus-per-task is invalid.

Adding 100 jobs ...
Submitting 100 jobs in 4 chunks using cluster functions 'Slurm' ...
Error in batchtools::submitJobs(ids = ids, resources = list(), reg = registry) :
  Fatal error occurred: 101. Command 'sbatch' produced exit code 1. Output: 'sbatch: error: Invalid numeric value "" for cpus-per-task.'

I use the The "slurm" template from batchtools:

a <- batchtoolsTemplate("slurm")

The slurm template looks like this:


#SBATCH --job-name=<%= %>
#SBATCH --output=<%= log.file %>
#SBATCH --error=<%= log.file %>
#SBATCH --time=<%= ceiling(resources$walltime / 60) %>
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=<%= resources$ncpus %>
#SBATCH --mem-per-cpu=<%= resources$memory %>

I want to set resources$ncpus and resources$partition, but don't know how. If I just modify the template manually, that will do. But I am curious what is the best practice to modify the resources using BatchtoolsParam.

Thank you for your support.

> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS

Matrix products: default
BLAS/LAPACK: /app/easybuild/software/OpenBLAS/0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.1/lib/

 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] BatchJobs_1.7        BBmisc_1.11          BiocParallel_1.14.2
[4] BiocInstaller_1.30.0

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.18      magrittr_1.5      rappdirs_0.3.1    hms_0.4.2
 [5] progress_1.2.0    bit_1.1-14        debugme_1.1.0     R6_2.2.2
 [9] rlang_0.2.1       brew_1.0-6        sendmailR_1.2-1   blob_1.1.1
[13] tools_3.5.1       parallel_3.5.1    checkmate_1.8.5   data.table_1.11.4
[17] DBI_1.0.0         withr_2.1.2       assertthat_0.2.0  base64url_1.4
[21] bit64_0.9-7       digest_0.6.15     crayon_1.3.4      base64enc_0.1-3
[25] fs_1.2.5          batchtools_0.9.10 memoise_1.1.0     RSQLite_2.1.1
[29] stringi_1.2.4     compiler_3.5.1    prettyunits_1.0.2 backports_1.1.2
[33] pkgconfig_2.0.1
ADD COMMENTlink modified 12 months ago by Mike Smith4.0k • written 12 months ago by Chao-Jen Wong30
Answer: BioParallel::BatchtoolsParam() - how to pass customized resource variables to ba
gravatar for Mike Smith
12 months ago by
Mike Smith4.0k
EMBL Heidelberg / de.NBI
Mike Smith4.0k wrote:

I think the appropriate way is to use the resources argument to BatchToolsParam, which takes a named list e.g.

BatchtoolsParam(resources = list(ncpus=4))

You can find a list of the resources you can set via ?batchtools::submitJobs

This is using:

ADD COMMENTlink modified 12 months ago • written 12 months ago by Mike Smith4.0k

Mike, thanks for your prompt help. I still run into the problems. It seems like resources is not a valid argument for BatchtoolsParam. Here is my code to include resource as an input argument for the BatchtoolsParam constructor:

param <- BatchtoolsParam(worker=4, cluster="slurm",
                                       walltime=30L * 24L * 60L * 60L,

I got error message

Error in BatchtoolsParam(worker = 4, cluster = "slurm", jobname = "test",  :
  unused argument (resources = list(ncpus = 1, walltime = 30 * 24 * 60 * 60, partition = "campus"))

I don't understand why BatchJobParam allows resources argument, but not BatchtoolsParam. Or do I do something wrong here??? 

My session info is the same as above.

ADD REPLYlink modified 12 months ago • written 12 months ago by Chao-Jen Wong30

I think my example only works for the developmental version of BiocParallel - apologies for that.  I've updated the post with the package versions.

ADD REPLYlink modified 12 months ago • written 12 months ago by Mike Smith4.0k

The argument you need is `template`

param <- BatchtoolsParam(workers=5, cluster="sge", template=template)

The template can hold your ncpus information.  There is also an option called `registryargs` where you can pass in the resources you want. 

Please check the vignette,

And feel free to reply if you have any more questions. 

ADD REPLYlink modified 12 months ago • written 12 months ago by nitesh.turaga140

Thank you, Mike. But registryargs only takes arguments ‘file.dir’, ‘work.dir’, ‘packages’, ‘namespaces’, ‘source’, ‘load’, and ‘make.default’. It is not for resrouces vaiables. When I set cluster="slurm", BatchtoolsParam uses batchtool's default template(batchtoolsTemplate("slurm")). So here is my code:

FUN <- function(i) system("hostname", intern=TRUE)
param <- BatchtoolsParam(worker=4, cluster="slurm",
bplapply(rep(10e5, 10), FUN, BPPARAM=param)

And error for saying that those resource variables for the default templated provided by batchtools are not volid arguements.

> bplapply(rep(10e5, 10), FUN, BPPARAM=param)
Error in (function (file.dir = "registry", work.dir = getwd(), conf.file = findConfFile(),  :
  unused arguments (ncpus = 1, partition = "campus")

Can I make a conclusion here that the release version of BatchtoolsParam does not provide a channel to send resources variable to the template? But the devel version has fixed it?

ADD REPLYlink modified 12 months ago • written 12 months ago by Chao-Jen Wong30

Obviously some confusion here to straighten out! I think resources=list(ncpus=10L) is the argument you're aiming for. From ?BatchtoolsParam:

resources: 'named list()'
     Arguments passed to the 'resources' argument of
     'batchtools::submitJobs' during evaluation of 'bplapply' and
     similar functions. These name-value pairs are used for
     substitution into the template file.

And yes, the release version (until October 31) doesn't provide a solution; the template would have to use some other means for identifying number of cores. (Hi Chao-Jen!)

ADD REPLYlink modified 12 months ago • written 12 months ago by Martin Morgan ♦♦ 23k

Thank Matin. That straighten out my confusion!!!

(Hi Martin!)

ADD REPLYlink modified 12 months ago • written 12 months ago by Chao-Jen Wong30

The batchtools package replaces BatchJobs for reasons outlined in the 'Migration from...' section of the vignette in batchtools, and so BatchtoolsParam replaces BatchJobsParam. The resources= argument was not included in the initial implementation of BatchtoolsParam (maybe by oversight...), but was added as a 'new feature' (rather than 'bug fix') during the most recent development cycle. As a 'new feature', it is only available in devel. The devel branch becomes the release branch on (all being well) October 31.

It is not possible to port this feature to the release branch because the next release is in just a few days; the release branch is no longer being built.

ADD REPLYlink written 12 months ago by Martin Morgan ♦♦ 23k
Please log in to add an answer.


Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 16.09
Traffic: 425 users visited in the last hour