fix(photo-ai): GPU выдаётся ключом gpus: all вместо CDI-спеки

CDI-спека /etc/cdi/nvidia.yaml запекает нумерацию /dev/dri/card* на момент
генерации, поэтому после переподключения видеокарты или смены порта
контейнер не стартует с "CDI device injection failed". Ключ gpus: all от
этого свободен: Docker сам подставляет драйвер NVIDIA, правка
/etc/docker/daemon.json и перезапуск демона не нужны.
This commit is contained in:
dev
2026-10-04 21:04:53 +03:00
parent b5f377b1bf
commit 1d71e249e4
3 changed files with 26 additions and 23 deletions
+13 -13
View File
@@ -2,11 +2,18 @@
# Использование:
# docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d --build photo-ai
#
# Требуется драйвер NVIDIA и NVIDIA Container Toolkit. GPU выдаётся контейнеру через CDI
# (device_ids ниже соответствует спеку /etc/cdi/nvidia.yaml): этот путь не требует правки
# /etc/docker/daemon.json и перезапуска демона. Если nvidia-runtime зарегистрирован в демоне
# (nvidia-ctk runtime configure --runtime=docker), вместо CDI можно вернуть классический вид
# резервирования: driver: nvidia, count: 1 — результат тот же.
# Требуется драйвер 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-библиотеками.
@@ -22,11 +29,4 @@ services:
TORCH_VARIANT: cu126
environment:
PHOTO_AI_DEVICE: ${PHOTO_AI_DEVICE:-cuda}
deploy:
resources:
reservations:
devices:
- driver: cdi
device_ids:
- nvidia.com/gpu=all
capabilities: [gpu]
gpus: all