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:
@@ -153,11 +153,7 @@ curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-contai
|
||||
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
|
||||
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
|
||||
|
||||
# 2. GPU-образ (для устройств с поддержкой CDI спеку генерирует сам toolkit)
|
||||
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
|
||||
sudo systemctl restart docker
|
||||
|
||||
# 3. Запуск
|
||||
# 2. Запуск
|
||||
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d --build photo-ai
|
||||
curl http://127.0.0.1:8081/health
|
||||
```
|
||||
@@ -166,10 +162,15 @@ curl http://127.0.0.1:8081/health
|
||||
те же версии, что и в CPU-образе, отличаются только CUDA-библиотеки), поэтому CPU-образ
|
||||
`whatido-photo-ai:latest` не перетирается и переключение обратно — обычный `docker compose up -d photo-ai`.
|
||||
|
||||
GPU выдаётся контейнеру через CDI (`device_ids: nvidia.com/gpu=all`), поэтому править
|
||||
`/etc/docker/daemon.json` и перезапускать демон не нужно. Если nvidia-runtime уже зарегистрирован в
|
||||
демоне (`nvidia-ctk runtime configure --runtime=docker`), в оверрайде можно заменить это на
|
||||
классическое резервирование `driver: nvidia, count: 1` — результат тот же.
|
||||
GPU выдаётся контейнеру ключом `gpus: all`, поэтому править `/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` — результат тот же.
|
||||
|
||||
Проверка результата: в `/health` должны быть `device: cuda:0`, `half: true`, непустые
|
||||
`vram_total_mb`/`vram_free_mb`. На 4 ГБ (например, RTX 3050 Laptop) реально держатся одновременно
|
||||
|
||||
Reference in New Issue
Block a user