# Переопределение photo-ai для работы на NVIDIA GPU. # Использование: # docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d --build photo-ai # # Требуется драйвер NVIDIA и NVIDIA Container Toolkit. GPU выдаётся контейнеру ключом # `gpus: all`: Docker сам подставляет драйвер NVIDIA, правка /etc/docker/daemon.json и # перезапуск демона не нужны. # Схема через CDI (deploy.resources.reservations.devices -> nvidia.com/gpu=all) здесь # НЕ используется намеренно: спека /etc/cdi/nvidia.yaml запекает нумерацию /dev/dri/card* # на момент генерации, поэтому после переподключения видеокарты или смены порта # она начинает ссылаться на несуществующий узел и контейнер не стартует # ("CDI device injection failed: failed to stat CDI host device /dev/dri/cardN"). # Перегенерация спеки требует sudo и теряется при каждой перегенерации; # `gpus: all` от этого свободен. Если nvidia-runtime зарегистрирован в демоне # (nvidia-ctk runtime configure --runtime=docker), можно вместо этого указать # deploy.resources.reservations.devices с driver: nvidia, count: 1 — результат тот же. # TORCH_VARIANT=cu126, а не cu124: в индексе cu124 последний torch — 2.6.0, а cu126 даёт ровно # те же torch 2.14.0 / torchvision 0.29.0, что и CPU-образ, поэтому варианты сборки отличаются # только CUDA-библиотеками. # Образ тегируется отдельно (whatido-photo-ai:cu126), чтобы сборка GPU-варианта не перетирала # CPU-образ whatido-photo-ai:latest. # PHOTO_AI_DEVICE=cuda при недоступной CUDA не роняет сервис: app.py пишет WARN и работает # на CPU, /health при этом отвечает 200. services: photo-ai: image: whatido-photo-ai:cu126 build: args: TORCH_VARIANT: cu126 environment: PHOTO_AI_DEVICE: ${PHOTO_AI_DEVICE:-cuda} gpus: all