Files
esh-pfi-infrastructure/stacks/augaman/compose.yaml
T
vh 317868dc7e feat(augaman): second, fixtures-only instance on fv-ml1 GPU 1; CPU vs GPU speed bench (v0.1.2 baseline)
Prime asked for augaman on fv-ml1's utility card, beside vllm-coder. Mirror
augaman-dev's f77164f compose, which parameterises the GPU reservation (GPU_ID,
default 0) and the Homepage card name (CARD_SUFFIX). esh-ml1's resolved config is
unchanged: same config hash, no recreate.

On fv-ml1: augaman:0.1.2 built on-box from the tag, GPU_ID=1, healthy on CUDA
at 1264 MiB, and pytest -m gpu tests/vision passes 3/3 on the Blackwell. It has
its own gallery and no gallery backup, so it is fixtures-only. The host's raw
restic copy of /var/lib/docker/volumes is not a consistent SQLite backup.

docs/pfi/augaman-speed-bench/ holds the harness (augaman-dev's recipe plus a
no-face control frame and a face-count check on every response), the raw rows
and the summary. Server-side, one face:
- esh-ml1 GPU 144 ms
- fv-ml1 GPU 75 ms
- fv-ml1 CPU on 6 cores 152 ms
- esh-ml1 CPU 888 ms
It agrees with augaman-dev's independent esh-ml1 measurement once each
harness's floor is subtracted. This is the before for v0.1.3's detector fix.
2026-09-27 00:28:20 -07:00

72 lines
3.4 KiB
YAML

# augaman: the fleet's face-recognition service for Cicada (gitea pfi/augaman). The primary
# instance is on esh-ml1 (CT 110 on esh-pve, RTX 2000E Ada 16 GB), with the gallery and the
# backup. A second, fixtures-only instance runs on fv-ml1 (GPU_ID=1, no backup). Enroll,
# recognize, verify; buffalo_l (SCRFD + ArcFace w600k_r50) on ONNX Runtime CUDA. Canonical copy:
# this file in pfi/augaman; the eshpfi stack mirrors it as stacks/augaman.
#
# ⚠ BIOMETRIC DATA. The gallery volume holds face embeddings and crops of household members.
# - The live SQLite stays on the local named volume. Never NFS (the service refuses it).
# - esh-ml1 is OUTSIDE vzdump. The gallery reaches backup only through the backup CLI,
# writing to BACKUP_DIR, a restic-covered host path. Wire the schedule and VERIFY A
# RESTORE before real people are enrolled (operator ruling):
# docker exec augaman python -m augaman.gallery.backup --db /data/gallery.db --dest /backup/gallery.db
# It prints one JSON line and exits 0, or "backup failed: ..." and exits 1.
# - BACKUP_DIR must be writable by uid 10001, the container user. Backups are mode 0600.
#
# Startup refuses to serve unless CUDA really runs every convolution: a profiled warmup plus
# ORT's CPU fallbacks turned off. /health reports backend "cuda" only then. Confirm once by the
# process in `nvidia-smi` on the host. Warmup, including the first CUDA inference, is covered
# by the healthcheck's start_period.
#
# Only AUGAMAN_* variables reach the app, and it refuses any it does not know, so compose's own
# variables below carry no AUGAMAN_ prefix and are never passed through wholesale (no env_file).
#
# .env (tunables): IMAGE, PORT (8040), BACKUP_DIR, HOST_IP (10.0.50.80), AUGAMAN_API_TOKEN
# (>= 32 visible-ASCII characters; the source of truth is the vault), GPU_ID (the host's card
# index, default 0), CARD_SUFFIX (appended to the Homepage name, e.g. " (fv-ml1)").
# AUGAMAN_CUDA_DEVICE_ID stays "0" on every host: the reservation shows the container only the
# card GPU_ID names, and it sees that card as index 0.
name: augaman
services:
augaman:
image: ${IMAGE:?set IMAGE}
container_name: augaman
restart: unless-stopped
ports:
- "${PORT:-8040}:8040"
environment:
AUGAMAN_API_TOKEN: ${AUGAMAN_API_TOKEN:?set AUGAMAN_API_TOKEN}
AUGAMAN_DEVICE: cuda
AUGAMAN_CUDA_DEVICE_ID: "0"
volumes:
- gallery:/data
- ${BACKUP_DIR:?set BACKUP_DIR}:/backup
# Multipart spools of large uploads land here: RAM only, never persistent disk (api INV-A07).
tmpfs:
- /tmp:size=512m
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["${GPU_ID:-0}"]
capabilities: [gpu]
healthcheck:
# 200 only when ready and not degraded; a 503 (degraded) fails the check.
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8040/health', timeout=5)"]
interval: 30s
timeout: 10s
retries: 3
start_period: 180s
labels:
- homepage.group=AI - Eval & Retrieval
- homepage.name=augaman — face recognition${CARD_SUFFIX:-}
- homepage.icon=mdi-face-recognition
- homepage.description=Enroll, recognize, verify (buffalo_l on CUDA) for Cicada
- homepage.href=http://${HOST_IP:-10.0.50.80}:${PORT:-8040}/health
volumes:
gallery: