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

Диагностика: CDI-устройство не найдено: проверка имени и спецификации NVIDIA GPU. Признаки, последовательность проверки, рабочий пример и критерии восстановления.

Автор: Команда Retrivium
Обновлено: 2026-11-01
Канонический URL: https://retrivium.ai/ru/journal/nvidia-cdi-device-selection/
Language: ru

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](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/cdi-support.html).

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

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


[Официальный источник 2](https://docs.docker.com/reference/cli/docker/container/run/).

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

В учебном сценарии конфигурация устройства меняется, а контейнер запрашивает прежнее 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](/ru/journal/gpu-containers-vs-vms/); [server preparation](/ru/journal/server-preparation/).
