569e1af9ca
Move the ~22-service flat "AI Systems" group off the Main tab into a new four-tab layout (Main / AI / Infrastructure / Toolchain). The AI tab sorts the inference fleet by function into seven groups: AI - Inference gen, char-rp, char-rp-reasoning, Granite summarizer AI - Eval & Retrieval Selene, Skywork Reward, Qwen3 rerank/embed, image-bench AI - Gateways & Chat LiteLLM, Asset Engine, Gateway Chat, Open WebUI, ... AI - Speech (TTS) Chatterbox Fast, Kokoro, mOrpheus AI - Audio Tools Parakeet ASR, YT Voice Clipper AI - Image & Media ComfyUI, Arbo AI - Dormant stopped rollback seats + retired auditions Relabel each stack's homepage.group so canonical stacks/ matches the live containers on ana-ml2, ana-docker, and irv-ml1. Dormant stacks were refreshed with `docker compose up --no-start` so they carry the new label while staying stopped (compose-start rollback preserved). settings.yaml drives tab/order/ columns; services.yaml and README updated to the new scheme.
99 lines
4.8 KiB
YAML
99 lines
4.8 KiB
YAML
# ComfyUI — node-based Stable Diffusion / Flux inference UI.
|
|
#
|
|
# Runs on irv-ml1 (dual GPU: RTX 3090 + RTX A6000). PINNED to the A6000
|
|
# (device 1) via NVIDIA_VISIBLE_DEVICES=1 — the 3090 hosts the audio/TTS
|
|
# zoo (chatterbox, parakeet, vibevoice, ytvc, kokoro) so ComfyUI gets the
|
|
# full 48 GB A6000 to itself (operator consolidation 2026-06-18).
|
|
#
|
|
# All user state — models, workflows, custom_nodes, input, output —
|
|
# lives under a single BASE_DIRECTORY tree on /worktank (462 GB
|
|
# dedicated), owned by lkraven:lkraven (1000:1000) so external
|
|
# tooling can read and write workflow files directly on the host.
|
|
#
|
|
# Runtime state (ComfyUI source, venv, pip cache) lives in a bind
|
|
# mount at ${COMFYUI_RUNDIR} — disposable (can be wiped on version
|
|
# bumps to force re-bootstrap), but owned by the host user so no
|
|
# sudo dance is needed. (Named volumes would be created root-owned
|
|
# and the image refuses to chown a mounted path.)
|
|
#
|
|
# First-run prerequisite: both ${COMFYUI_BASEDIR} and ${COMFYUI_RUNDIR}
|
|
# must exist on the host with ownership matching COMFYUI_UID:COMFYUI_GID
|
|
# before `up`. See README for the bootstrap command.
|
|
#
|
|
# All tunables live in .env — edit that, not this file.
|
|
|
|
services:
|
|
comfyui:
|
|
image: mmartial/comfyui-nvidia-docker:${COMFYUI_VERSION}
|
|
container_name: comfyui
|
|
restart: unless-stopped
|
|
runtime: nvidia
|
|
ports:
|
|
- "${COMFYUI_BIND:-0.0.0.0}:${COMFYUI_PORT}:8188"
|
|
environment:
|
|
- NVIDIA_VISIBLE_DEVICES=1
|
|
# Pin torch at the current 2.12.1+cu129 so the boot script stops
|
|
# auto-upgrading it — compiled SageAttention kernels must not drift
|
|
# (comfy-dev torch-pin, operator-approved 2026-06-18).
|
|
- DISABLE_UPGRADES=true
|
|
- WANTED_UID=${COMFYUI_UID}
|
|
- WANTED_GID=${COMFYUI_GID}
|
|
- BASE_DIRECTORY=/basedir
|
|
- SECURITY_LEVEL=${COMFYUI_SECURITY_LEVEL:-normal}
|
|
- USE_UV=true
|
|
# Extra ComfyUI launch flags (image appends these to main.py, then adds
|
|
# --base-directory + --enable-manager itself):
|
|
# --disable-cuda-malloc — use PyTorch's native allocator instead of the
|
|
# default cudaMallocAsync, which phantom-OOMs ("allocation would exceed
|
|
# allowed memory", 0 B allocated) when the A6000 is shared with the
|
|
# pinned TTS services (chatterbox-fast / csm-expressiva, ~22 GB).
|
|
# --fp8_e4m3fn-text-enc — load the FLUX.2 Qwen3-8B text encoder as fp8
|
|
# (~8.7 GB) instead of upcasting the fp8 file to fp16 (~16 GB). Matches
|
|
# the box's Ampere-fp8 posture; the encoder runs once per gen so the
|
|
# upcast-on-compute cost is negligible.
|
|
# --use-sage-attention — 0.24.1's NATIVE attention selection (the node-based
|
|
# BlehGlobalSageAttention is dead on 0.24.1: "does not support the new
|
|
# ComfyUI attention changes"). Binds the in-image sageattention v2.2.0
|
|
# sm_86 build (rebuilt against the pinned torch 2.12.1). Global speedup
|
|
# across Flux/SDXL/Wan (comfy-dev benchmarking, 2026-06-18).
|
|
- COMFY_CMDLINE_EXTRA=--disable-cuda-malloc --fp8_e4m3fn-text-enc --use-sage-attention
|
|
# Let PyTorch's native caching allocator grow segments instead of
|
|
# pre-carving fixed blocks — cuts fragmentation OOMs on long-lived
|
|
# Qwen-Image-Edit sessions (a ~2 GB alloc failing with 1.75 GB free while
|
|
# 45 GB sat allocated + reserved-but-unallocated). Cache-preserving: packs
|
|
# better WITHOUT unloading the checkpoint, so no edit-latency hit. Only
|
|
# valid under the native allocator (paired with --disable-cuda-malloc
|
|
# above; incompatible with cudaMallocAsync). comfy-dev request 2026-06-25.
|
|
- PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
|
|
volumes:
|
|
- ${COMFYUI_BASEDIR}:/basedir
|
|
# models/ overlaid from storetank. The ~325 GB model tree was migrated
|
|
# off the near-full worktank NVMe (2026-06-13) to /storetank/arbo (roomy
|
|
# SATA SSD). This nested mount shadows the models subdir of /basedir;
|
|
# everything else (custom_nodes, output, input, user, workflows) stays on
|
|
# worktank. Inventory: docs/arbo-comfyui-model-catalog.md.
|
|
- ${COMFYUI_MODELS_DIR:-/storetank/arbo/models}:/basedir/models
|
|
- ${COMFYUI_RUNDIR}:/comfy/mnt
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -fsS http://localhost:8188/ >/dev/null || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
# First boot installs ~5 GB of Python packages; allow generous
|
|
# start_period so the container isn't marked unhealthy during
|
|
# bootstrap. Subsequent starts are fast.
|
|
start_period: 600s
|
|
networks:
|
|
- tnet
|
|
labels:
|
|
- homepage.group=AI - Image & Media
|
|
- homepage.name=ComfyUI
|
|
- homepage.icon=mdi-image-auto-adjust
|
|
- homepage.description=Node-based SD/Flux inference (irv-ml1)
|
|
- homepage.href=http://10.100.79.3:${COMFYUI_PORT}
|
|
|
|
networks:
|
|
tnet:
|
|
name: traefik-net
|
|
external: true
|