ТЕХНОЛОГИИ

CDI-устройство не найдено: проверка имени и спецификации NVIDIA GPU

В этом материале
ГЛАВНОЕ ЗА МИНУТУ

CDI device not found требует проверки qualified name и действующей спецификации устройств. Сначала сравните запрошенное имя с nvidia-ctk cdi list. Наличие GPU в host nvidia-smi ещё не доказывает, что container engine видит актуальный CDI definition.

CDI device not found требует проверки qualified name и действующей спецификации устройств. Сначала сравните запрошенное имя с nvidia-ctk cdi list. Наличие GPU в host nvidia-smi ещё не доказывает, что container engine видит актуальный CDI definition.

Определите режим подключения

Сохраните версию NVIDIA Container Toolkit, container engine и launch command. CDI описывает устройства декларативно, включая необходимые nodes, mounts и hooks. Имя вида nvidia.com/gpu=0 относится к этой спецификации, а не является обычным путём /dev. Проверьте поддержку CDI и каталогов discovery у engine. Для Docker документирована версия включения CDI по умолчанию, однако на существующем узле фактическая конфигурация может отличаться после обновлений и локальных изменений.

Официальный источник 1.

Сопоставьте список и файл

Получите nvidia-ctk cdi list и найдите действующую YAML/JSON спецификацию. Сравните её устройства с хостом, проверьте читаемость и путь, используемый engine. Новые версии Toolkit поддерживают автоматическую генерацию через nvidia-cdi-refresh. У этого механизма есть документированные ограничения, например после отдельных изменений MIG. Сохраните состояние service/path units и журнал генерации, если они применимы. Успешный запуск генератора не подтверждает, что другой daemon читает именно этот каталог.

Официальный источник 2.

Разберите устаревшее определение

В учебном сценарии конфигурация устройства меняется, а контейнер запрашивает прежнее qualified name. Host enumeration уже отражает новое состояние, CDI list — ещё старое. После корректного обновления спецификации список согласуется с хостом и выбор становится проверяемым. Не предполагается, что идентификаторы после изменения сохранят прежний смысл. Для каждого нового definition сравните UUID или MIG identity, а не только удобный порядковый номер в команде.

ПроверкаНужное доказательство
Запрошенное имяТочная строка —device
DiscoveryКаталог, который читает engine
ИнвентарьCDI list и host identities
RefreshУспешная актуальная генерация

Исключите двойную инъекцию

Документация NVIDIA предупреждает о конфликте CDI с legacy runtime hook. Проверьте наличие OCI hook и использование NVIDIA_VISIBLE_DEVICES, не смешивая механизмы случайно. Не удаляйте системные файлы вслепую: сначала определите, какие workload зависят от текущего режима. Для перехода сохраните рабочую конфигурацию и проверенный путь возврата. Успех одного контейнера не означает, что все daemon или runtime на узле автоматически переключились на новый способ предоставления устройств.

Проверьте новый запуск

Создайте отдельный тестовый контейнер с конкретным CDI device name и сопоставьте видимый UUID с ожидаемым. Затем повторите после предусмотренного refresh или перезапуска узла в тестовой процедуре. Артефакт должен содержать версии, путь спецификации, selected name и фактическую identity. Не включайте в него лишние разрешения ради успешной демонстрации. Корректный CDI selection подтверждает передачу выбранного устройства, а запуск вычисления и совместимость приложения остаются следующими самостоятельными проверками.

Храните выбранное qualified name рядом с фактической identity. Само имя удобно для запуска, но его смысл следует подтверждать после изменения инвентаря, чтобы прежний аргумент не стал неявной ссылкой на другое устройство.

Связанные разборы: gpu containers vs vms; server preparation.

← Все материалы