A connector between mlr3 and batchtools. This allows to run large-scale benchmark experiments on scheduled high-performance computing clusters.
The package comes with two core functions for switching between
mlr3 and batchtools to perform a
benchmark:
design object (as required for
mlr3’s benchmark() function), instead of
benchmark() call batchmark() which populates
an ExperimentRegistry for the computational jobs of the
benchmark. You are now in the world of batchtools where you
can selectively submit jobs with different resources, monitor the
progress or resubmit as needed.reduceResultsBatchmark() to return to mlr3.
The resulting object is a regular BenchmarkResult.library("mlr3")
library("batchtools")
library("mlr3batchmark")
tasks = tsks(c("iris", "sonar"))
learners = lrns(c("classif.featureless", "classif.rpart"))
resamplings = rsmp("cv", folds = 3)
design = benchmark_grid(
tasks = tasks,
learners = learners,
resamplings = resamplings
)
reg = makeExperimentRegistry(NA)## No readable configuration file found
## Created registry in '/tmp/RtmpbcuMc4/registry27b8961304f5da' using cluster functions 'Interactive'
ids = batchmark(design, reg = reg)## Adding algorithm 'run_learner'
## Adding problem 'abc694dd29a7a8ce'
## Exporting new objects: '2da7eeb80b94fc3b' ...
## Exporting new objects: 'c905990877a775af' ...
## Exporting new objects: '3acc41a799a260d8' ...
## Exporting new objects: 'ecf8ee265ec56766' ...
## Overwriting previously exported object: 'ecf8ee265ec56766'
## Adding 6 experiments ('abc694dd29a7a8ce'[1] x 'run_learner'[2] x repls[3]) ...
## Adding problem 'f9791e97f9813150'
## Exporting new objects: '62ac3bb85aabfbaf' ...
## Adding 6 experiments ('f9791e97f9813150'[1] x 'run_learner'[2] x repls[3]) ...
submitJobs()## Submitting 12 jobs in 12 chunks using cluster functions 'Interactive' ...
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
## Error in workhorse(iteration = job$repl, task = data, learner = learner, :
## unused argument (lgr_threshold = lgr::get_logger("mlr3")$threshold)
getStatus()## Status for 12 jobs at 2025-05-26 09:23:22:
## Submitted : 12 (100.0%)
## -- Queued : 0 ( 0.0%)
## -- Started : 12 (100.0%)
## ---- Running : 0 ( 0.0%)
## ---- Done : 0 ( 0.0%)
## ---- Error : 12 (100.0%)
## ---- Expired : 0 ( 0.0%)
reduceResultsBatchmark()##
## ── <BenchmarkResult> of 0 rows with 0 resampling run ───────────────────────────