build(photo-ai): CPU/GPU сборка, gfpgan+facexlib без dev-зависимостей, healthcheck
Stage 2: photo-ai/Dockerfile получил ARG TORCH_VARIANT/TORCH_INDEX (один образ, cu124 — вариант сборки) и явные пины gfpgan==1.3.8 / facexlib==0.3.0 через --no-deps: tb-nightly и yapf (dev-зависимости gfpgan/basicsr) больше не попадают в рантайм, matplotlib остаётся как зависимость filterpy (требование facexlib). Патч basicsr/data/degradations.py сохранён байт-в-байт — без него basicsr падает на torch >= 2.0. Пин numpy<2 был невыполним: opencv-python-headless 5.0.0.93 требует numpy >= 2. Зафиксирована фактическая версия numpy==2.2.6 в общем вызове pip install, а opencv-python (не-headless) больше не ставится — раньше он приходил через gfpgan и перезаписывал headless-сборку (активным был cv2 с GUI: QT5). I1 после этого перепроверен: 5/5 MATCH байт-в-байт против эталона Stage 0. ENV PHOTO_AI_MODELS_DIR=/models, MODEL_PATH остаётся валидным алиасом. COPY vendor/ ./vendor/ + vendor/.gitkeep — вендоренный CodeFormer (D5) подхватится из sys.path без правок Dockerfile. docker-compose.yml: у photo-ai новые env (DEVICE, TILE, FACE_MODEL, LOAD_ALL, JPEG_QUALITY, MODELS_DIR) и healthcheck со start_period 300s; MAX_INPUT_PIXELS заменён на канонический PHOTO_AI_MAX_PIXELS (старое имя читается app.py как алиас). У app — PHOTO_AI_FACE_MODEL и PHOTO_AI_FACE_TIMEOUT_MS (воркер читает их в Stage 4). Новый docker-compose.gpu.yml (по образцу minio): TORCH_VARIANT=cu124, PHOTO_AI_DEVICE=cuda, deploy.resources.reservations.devices для nvidia. .env.example и таблица переменных README описывают ровно те переменные, которые теперь подставляет compose; блок про GPU и NVIDIA Container Toolkit — Stage 6 (D6). Проверено на живом стеке: сборка EXIT=0 (2.63 ГБ), /health отдаёт device=cpu, face_models=[gfpgan], контейнер healthy, /api/photo-jobs/status отдаёт service.device, I3 (пустой PHOTO_AI_URL -> 503 + 8 маршрутов 200), I4 (PHOTO_AI_DEVICE=cuda без CUDA -> WARN + CPU), docker compose config валиден для базы, minio и gpu. GPU-пуск не выполнялся: nvidia-ctk на хосте отсутствует.
This commit is contained in:
+17
-1
@@ -36,14 +36,30 @@ CLOUDFLARE_TUNNEL_URL=http://app:3003
|
||||
# туннеля без VPN (сек). Если VPN-провайдер не отвечает — сайт всё равно поднимется.
|
||||
WG_HANDSHAKE_TIMEOUT=60
|
||||
|
||||
# === ИИ-улучшение фото (контейнер photo-ai, Real-ESRGAN) ===
|
||||
# === ИИ-улучшение фото (контейнер photo-ai, Real-ESRGAN + GFPGAN) ===
|
||||
# По умолчанию фото-ИИ включено: сервис photo-ai поднимается вместе со стеком
|
||||
# и работает на CPU. Оставьте значение пустым, чтобы выключить сервис —
|
||||
# тогда кнопка «🤖 ИИ» скрыта, а /api/entries/:id/photo/enhance-ai отвечает 503.
|
||||
# Ручные проверки сервиса идут по loopback-порту 127.0.0.1:8081 (наружу не публикуется):
|
||||
# curl http://127.0.0.1:8081/health
|
||||
PHOTO_AI_URL=http://photo-ai:8080
|
||||
# Максимум пикселей входного изображения, более крупный вход уменьшается.
|
||||
PHOTO_AI_MAX_PIXELS=4000000
|
||||
# Устройство инференса: auto (CUDA, если контейнеру выдан GPU, иначе CPU), cuda, cpu.
|
||||
# Явный cuda без доступной CUDA не роняет сервис: WARN в лог и работа на CPU.
|
||||
# GPU-запуск подключается файлом docker-compose.gpu.yml.
|
||||
PHOTO_AI_DEVICE=auto
|
||||
# Размер тайла инференса (0 — без тайлов). Меньше тайл — меньше памяти, медленнее.
|
||||
PHOTO_AI_TILE=256
|
||||
# Модель восстановления лиц: gfpgan (по умолчанию) или codeformer.
|
||||
# codeformer доступен только если модуль вендорен в photo-ai/vendor.
|
||||
PHOTO_AI_FACE_MODEL=gfpgan
|
||||
# Предзагрузка всех моделей при старте (1) или ленивая загрузка по требованию (0).
|
||||
PHOTO_AI_LOAD_ALL=0
|
||||
# Качество JPEG результата (70..100).
|
||||
PHOTO_AI_JPEG_QUALITY=92
|
||||
# Таймаут заданий с восстановлением лиц на стороне приложения (мс).
|
||||
PHOTO_AI_FACE_TIMEOUT_MS=600000
|
||||
# Сколько раз воркер повторит задание, если photo-ai недоступен (503/обрыв сети),
|
||||
# не увеличивая attempts; после исчерпания — одна честная ошибка в задании.
|
||||
PHOTO_AI_SOFT_MAX_RETRIES=60
|
||||
|
||||
Reference in New Issue
Block a user