n1ro°
RU

Текст и данные · Инструкция

Docker --gpus: передать конкретный GPU контейнеру

Выбор конкретного GPU полезен на многокарточных машинах: контейнер не должен занимать ускорители соседних задач. Сам флаг не устанавливает драйверы и runtime — они должны быть подготовлены на хосте.

Редакция N1RO · Проверено

Короткий ответ

Если хост и Docker настроены для GPU, укажите нужное устройство через --gpus вместо передачи всех ускорителей. После запуска сверяйте видимость GPU внутри.

Что важно понять до начала

Docker CLI поддерживает параметр `--gpus` и выбор набора GPU. Хост должен иметь совместимый GPU stack и container runtime integration. Внутри контейнера нужно проверять фактическую видимость и номера/UUID устройств. Номер GPU может быть менее стабилен для автоматизации, чем UUID, если конфигурация хоста меняется.

Совет: Практический ориентир: Да, Docker поддерживает вариант для всех доступных GPU, но на общей машине точечный выбор безопаснее для распределения ресурсов.

Пошаговый порядок действий

  1. 1. Убедитесь, что GPU виден на хосте и базовый GPU-контейнер запускается.
  2. 2. Получите идентификатор нужного ускорителя штатной утилитой драйвера.
  3. 3. Запустите контейнер с `--gpus` и селектором конкретного устройства.
  4. 4. В контейнере выполните диагностическую команду GPU и убедитесь, что лишние устройства не доступны.
  5. 5. Проведите короткую вычислительную нагрузку и проверьте, что она попала на выбранный GPU.

Важно: Критично для этой задачи: Не лечите ошибку «GPU не найден» случайным добавлением `--privileged`: сначала проверьте runtime, драйвер и синтаксис `--gpus`.

Ошибки и пограничные случаи

Не лечите ошибку «GPU не найден» случайным добавлением `--privileged`: сначала проверьте runtime, драйвер и синтаксис `--gpus`. При оркестрации нескольких задач фиксируйте правило назначения GPU в конфигурации, иначе после перезапуска можно случайно конкурировать за одно устройство.

Предупреждение: Пограничный случай: Для статичной машины индекс проще. Для автоматизации UUID обычно однозначнее, особенно если порядок устройств может меняться.

Проверка перед завершением

  • Убедитесь, что GPU виден на хосте и базовый GPU-контейнер запускается.
  • Запустите контейнер с `--gpus` и селектором конкретного устройства.
  • Проведите короткую вычислительную нагрузку и проверьте, что она попала на выбранный GPU.
  • Проверено отдельно: Да, Docker поддерживает вариант для всех доступных GPU, но на общей машине точечный выбор безопаснее для распределения ресурсов.

Практический сценарий и контроль результата

На многокарточном хосте проверяйте выбор ускорителя внутри контейнера, а не только успешный старт. Номер устройства удобен для ручного теста, но при перестановке карт или изменении конфигурации индекс может стать менее предсказуемым; для автоматизации полезнее устойчивый идентификатор, если ваш GPU‑стек его поддерживает. Если --gpus задан, а устройство не видно, проблема обычно находится до приложения: драйвер хоста, runtime integration или образ. Не компенсируйте такой сбой передачей всех GPU без диагностики.

Дополнительные нюансы и проверка

После запуска контейнера сравните список доступных GPU с ожидаемым. Если контейнер видит больше ускорителей, чем должен, настройка селектора фактически не решила задачу изоляции. Если не видит ни одного, сначала подтвердите работу GPU‑контейнера без селектора. Это отделяет ошибку выбора устройства от проблем драйвера или runtime. Для длительной автоматизации сохраните идентификатор выбранной карты в конфигурации и повторите проверку после обслуживания хоста или перестановки оборудования.

Что учитывать

Docker CLI поддерживает параметр `--gpus` и выбор набора GPU. Хост должен иметь совместимый GPU stack и container runtime integration. Внутри контейнера нужно проверять фактическую видимость и номера/UUID устройств. Номер GPU может быть менее стабилен для автоматизации, чем UUID, если конфигурация хоста меняется.

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. docker container run). Пример и формулировки — редакция N1RO на 2026-09-22.