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