Skip to main content

2026-09

Cap how many runs of a batch use the LSF cluster at the same time, or run batches of short runs on a pool of Dask workers. The server is easier to deploy from scratch, and re-running outputs or tuning on LSF goes through the configured LSF bridge.

Project integration

Limit batch concurrency on LSF

Set runners.lsf.concurrency in qaboard.yaml, or use qa batch --lsf-concurrency 20, so a batch never has more than 20 LSF jobs running at once and doesn't flood the cluster. The default, 0, keeps the previous behavior: no limit.

Learn more →
Project integration

Dask runner

With qa batch --runner dask, a batch's runs execute on a few long-lived Dask workers started as LSF jobs, with a bounded number of runs in flight. It avoids paying LSF's scheduling overhead for each of many short runs. Install it with pip install "qaboard[dask]".

Learn more →

CLI and project setup​

  • By default the LSF concurrency limit uses an LSF job array with a slot limit: a new run starts as soon as one ends. Set runners.lsf.concurrency_strategy: waves to send runs in groups that each wait for the previous group to end, if job arrays don't work for you.
  • The Dask runner is configured under runners.dask in qaboard.yaml: concurrency (or --dask-concurrency), the worker jobs' cluster size and memory, and scheduler_address to use a Dask cluster you already run.
  • With --no-wait, the Dask runner sends a small "driver" LSF job that runs the batch, with its own LSF options (runners.dask.driver), and qa batch returns right away.
  • Dask workers' and the driver's logs are saved in the batch directory, under dask/, and each run's output directory gets a log.dask.txt. Stopping a batch from QA-Board also stops its Dask workers.
  • qa save-artifacts and other commands no longer crash with "'NoneType' object is not iterable" in legacy projects whose configuration defines no inputs.

Server and administration​

  • "Redo" actions on a batch (deleted, failed or all outputs) and tuning batches sent to LSF from the web app now go through the backend's QA_RUNNERS_LSF_BRIDGE, which supports the {user} and {bsub_command} placeholders, instead of a hardcoded SSH host. Set it to use these features with LSF (see LSF bridges).
  • The Flower dashboard for Celery now runs from the backend image: there is no separate Flower image to build anymore.
  • The documentation site's image now builds with Docusaurus 3.10.
  • The SIRC deployment's files, including .env.sirc.example, now all live under deployments/sirc/.

Documentation​

  • New Dask integration page. The CLI docs now list the batch runners (local, LSF, Dask, Celery) and how to limit their concurrency, and the LSF page documents --lsf-concurrency.

Fixes​

  • Fixed results uploads failing (HTTP 500 on every new output) on servers whose database was created from scratch rather than migrated from an older version.
  • The database container now starts on a fresh, empty volume: its custom configuration is applied only once the database is initialized.
  • Fixed Docker builds that download a CA certificate (CA_CERT_URL) failing when the certificate file already existed.

Notes​

  • The LSF concurrency limit and the Dask runner are in qaboard 1.1, released in October.