All pages

GPU host

An NVIDIA GPU with the driver and CUDA, Docker, and the NVIDIA Container Toolkit so containers can reach it. Local captioning, curator's GPU image, ComfyUI renders and forge training all run here. Several services can share one GPU through cortex's lease.

Used by

PackageWhat forReads
argus-lens (opens in new tab)

Local backends (wd14-gpu, RAM++, Florence-2, BLIP-2), and models unloaded when idle.

[wd14-gpu], [local], ARGUS_MODEL_IDLE_SECONDS, ARGUS_GPU_MIN_VRAM_MB

argus-curator (opens in new tab)

The latest-gpu image (CUDA 13 wheels, so the driver must support CUDA 13).

CURATOR_GPU, [gpu]

argus-forge (opens in new tab)

POST /run in the -train image (torch on CUDA 12.4, kohya sd-scripts). Run it with --gpus all --shm-size=8g.

ARGUS_FORGE_READONLY=0, FORGE_BUILD_TARGET=train

argus-darkroom, argus-atlas

Nothing in the package itself: they render through ComfyUI, which needs the GPU.

—

argus-cortex (opens in new tab)

argus_cortex.gpu: a file lease so services sharing a GPU take turns. Every container mounts the same lock directory.

ARGUS_GPU_COORDINATOR=lease, ARGUS_GPU_LEASE_PATH, ARGUS_GPU_LEASE_TIMEOUT_S, ARGUS_GPU_DEVICE, [gpu]

argus-studio (opens in new tab)

compose.gpu.yaml reserves GPUs for lens, Ollama and curator, swaps in curator's -gpu image and turns the lease on.

-f compose.gpu.yaml, ARGUS_GPU_LOCK_DIR

Official guides

Minimal setup

  1. Install the NVIDIA driver. Curator's GPU image ships CUDA 13 wheels, so the driver must support CUDA 13. nvidia-smi shows the highest CUDA version the driver supports.

  2. Install Docker Engine and the NVIDIA Container Toolkit, then check that a container can see the GPU:

    docker run --rm --gpus all ubuntu nvidia-smi
    
  3. In Studio, layer the GPU override on top of the stack:

    docker compose -f compose.yaml -f compose.gpu.yaml --profile full up
    

Sharing one GPU

Lens, curator and Ollama can all load models onto the same card. With ARGUS_GPU_COORDINATOR=lease (set by compose.gpu.yaml), cortex's argus_cortex.gpu makes them take turns through a lock file. Every container must mount the same lock directory (ARGUS_GPU_LOCK_DIR, mounted at /run/argus-gpu), or each one gets its own lock and they no longer wait for each other. Lens unloads idle models after ARGUS_MODEL_IDLE_SECONDS (300 by default) to give VRAM back.

ComfyUI usually runs outside the stack on the same host, and the stack reaches it at http://host.docker.internal:8188. It doesn't take part in the lease, so a big render can still collide with a caption run.