The CPU target contains the core and R environments. The GPU target adds the GPU environment. Optional subprocess backends use separate build targets; neither default image contains every backend. Environment recipes are not yet fully locked.
Build the CPU-only image:
make imageThis runs:
docker build --target cpu -t cellquorum:<version> -f docker/Dockerfile .The version is read from cellquorum.__version__.
The GPU recipe is undergoing compatibility validation; see the deployment status. A successful image build alone does not prove that GPU kernels or complete analyses run.
Build the GPU-enabled image (includes CUDA-enabled PyTorch and scvi-tools):
make image-gpuThis runs:
docker build --target gpu -t cellquorum:<version>-gpu -f docker/Dockerfile .The optional backends target creates the scclr toolchain environment. It installs
scclr only when SCCLR_SRC names a source location available inside that build:
docker build --target backends -t cellquorum:<version>-backends \
--build-arg SCCLR_SRC=/opt/cellquorum/vendor/scclr \
-f docker/Dockerfile .For this example, place the source in vendor/scclr in the build context and
ensure it is not excluded by .dockerignore. The argument itself does not copy a
host path. The Dockerfile uses pip install in the scclr environment. The
backends target has an unresolved hdWGCNA solve issue and is not validated for
deployment.
Run the three-part smoke test to verify the image is functional:
make smokeThis performs:
- Version check: Confirms
cellquorum --versionruns. - Plan dry-run: Confirms
cellquorum plan --config docker/smoke/smoke.yaml --jsonruns without error on the bundled smoke config. - Environment inventory: Confirms the CPU target's required environments are present:
cellquorum-corecellquorum-r
This checks startup and planning. Installed analysis, checkpoint recovery, and backend execution still need separate validation.
After building the GPU target, run make smoke-gpu. It checks the three required
environments, runs the CLI in cellquorum-gpu, and probes both RAPIDS and
PyTorch/scVI with real device operations. Missing capabilities fail the command.
This target requires a Docker installation with NVIDIA GPU access; on Windows,
Docker Desktop must also expose its engine to the WSL distribution.
For a GPU analysis, pass GPU access explicitly:
docker run --rm --gpus all \
-v /path/to/data:/data \
cellquorum:<version>-gpu \
run --config /data/my_config.yaml --output-dir /data/resultsThe analysis configuration must select the GPU backend for supported methods. Device probes do not replace installed-workflow acceptance or memory benchmarks.
Enter an interactive shell inside the image:
docker run --rm -it --entrypoint micromamba cellquorum:<version> run -n cellquorum-core /bin/bashOnce inside, the cellquorum CLI is available:
cellquorum --version
cellquorum plan --helpRun a single cellquorum command:
docker run --rm cellquorum:<version> --versionTo analyze data on the host, mount the data directory into the container:
docker run --rm \
-v /path/to/data:/data \
cellquorum:<version> \
run --config /data/my_config.yaml --output-dir /data/resultsThe image runs the CLI inside cellquorum-core (CPU image) or cellquorum-gpu
(GPU image). R/Bioconductor lives in the separate cellquorum-r environment,
and CellQuorum invokes R by running Rscript as a direct subprocess — not via
micromamba run -n cellquorum-r. Because Rscript is therefore not on the CLI
env's PATH, R-backed methods would otherwise record a clean
Rscript unavailable skip.
To make them run, point r.rscript_path at the cellquorum-r env's Rscript in
your config:
r:
enabled: true
rscript_path: /opt/conda/envs/cellquorum-r/bin/Rscript/opt/conda is the MAMBA_ROOT_PREFIX of the mambaorg/micromamba base image;
confirm the exact path for your build with:
docker run --rm --entrypoint micromamba cellquorum:<version> run -n cellquorum-r which RscriptInvoking that env's Rscript binary directly loads the cellquorum-r R library,
so edgeR/limma/DESeq2/Milo/propeller resolve without any further activation. The
engine honors this configured path (it checks the configured Rscript, not a bare
Rscript on PATH); a missing or wrong path still yields a recorded skip rather
than a crash.
Run the multi-hypothesis workflow matrix (see docs/guide/snakemake.md for details):
make matrixOr equivalently:
docker run --rm \
-v $(PWD):/work -w /work \
--entrypoint micromamba \
cellquorum:<version> \
run -n cellquorum-core snakemake --snakefile workflow/Snakefile --cores 4 --keep-going- All isolated backend environments are pre-installed and available inside the image. CellQuorum will automatically invoke the isolated Python backends (pySCENIC, hdWGCNA, scCODA, scclr, CellOracle) via
micromamba run -n <env>as needed. Thecellquorum-renvironment is the exception: R is reached as a directRscriptsubprocess, so setr.rscript_pathas described in "Running R-backed methods" above. - The GPU image requires a host with NVIDIA drivers and
nvidia-dockerruntime configured. - See
envs/README.mdfor details on the environment architecture anddocs/guide/snakemake.mdfor the Snakemake workflow structure.