Revert "Drop careless-gpu: the [cuda] pip extra install covers GPU and CPU nodes"

This reverts commit f6c2f5a650.
This commit is contained in:
2026-08-18 11:14:13 +02:00
parent f6c2f5a650
commit cc44565e35
7 changed files with 98 additions and 12 deletions
+8 -4
View File
@@ -11,10 +11,14 @@ inference (variational merging), built on TensorFlow.
Upstream recommends a fresh conda env, but repo.anaconda.com is not
reachable from Ra, so the build uses uv instead: it fetches a standalone
Python 3.12 into `$PREFIX/python` (upstream supports >=3.9,<3.13), creates
`$PREFIX/venv`, and runs `uv pip install careless[cuda]==<version>` into
it. The `[cuda]` extra ships the NVIDIA libraries (CUDA, cuDNN, ...) as
pip wheels, so the one install uses the GPU on GPU nodes (only the node's
NVIDIA driver is needed — no cuda module) and falls back to CPU elsewhere.
`$PREFIX/venv`, and runs `uv pip install careless==<version>` into it.
This is the CPU build; the GPU build (with the `[cuda]` extra and the
cluster `cuda/12.8.1` module) is the separate `careless-gpu` module.
To share one uv download cache between the careless and careless-gpu
builds, run each with `UV_CACHE_DIR=<shared path> modbuild build <version>`
— a cache outside PREFIX is kept, an in-PREFIX cache is removed after a
successful install.
`uv` must be on PATH on the build host (e.g. `pip install --user uv`).
+5 -5
View File
@@ -9,8 +9,9 @@ pbuild::configure() {
# uv fetches a standalone CPython instead; keep it inside PREFIX so the
# venv's interpreter symlinks don't depend on the builder's home cache.
UV="${UV:-$HOME/.local/bin/uv}"
# ~/.cache/uv hits the home disk quota; default the cache into PREFIX
# (overridable: UV_CACHE_DIR=<path> modbuild build <version>)
# ~/.cache/uv hits the home disk quota; default the cache into PREFIX.
# Overridable so careless and careless-gpu can share one cache:
# UV_CACHE_DIR=<shared path> modbuild build <version>
export UV_CACHE_DIR="${UV_CACHE_DIR:-$PREFIX/.uv-cache}"
export UV_PYTHON_INSTALL_DIR="$PREFIX/python"
"$UV" venv --python 3.12 "$PREFIX/venv"
@@ -23,9 +24,8 @@ pbuild::compile() {
pbuild::install() {
UV="${UV:-$HOME/.local/bin/uv}"
export UV_CACHE_DIR="${UV_CACHE_DIR:-$PREFIX/.uv-cache}"
# [cuda] extra ships the NVIDIA stack (CUDA, cuDNN, ...) as pip wheels:
# uses the GPU when present (needs only the node driver), else falls back to CPU
"$UV" pip install --python "$PREFIX/venv/bin/python" "careless[cuda]==${V_PKG}"
# CPU version; the GPU build with the [cuda] extra is the careless-gpu module
"$UV" pip install --python "$PREFIX/venv/bin/python" "careless==${V_PKG}"
# only auto-remove the cache if it lives inside this PREFIX (never a shared one)
[[ "$UV_CACHE_DIR" == "$PREFIX"* ]] && rm -rf "$UV_CACHE_DIR" || :
}
+2 -3
View File
@@ -7,9 +7,8 @@ module-maintainer "MX Data <jiaxin.duan@psi.ch>"
module-help "
careless: scaling and merging of X-ray diffraction data using
approximate Bayesian inference (TensorFlow). Installed with the
[cuda] extra: uses NVIDIA GPUs when present (no cuda module
needed), falls back to CPU otherwise.
approximate Bayesian inference (TensorFlow). CPU build; for
NVIDIA GPU nodes load careless-gpu instead.
"
setenv CARELESS_ENV $PREFIX/venv