NVIDIA Container Toolkit¶
NVIDIA Container Toolkit — набор утилит и компонентов, обеспечивающих доступ контейнеров к графическим процессорам NVIDIA с поддержкой технологий виртуализации. Инструментарий позволяет запускать CUDA-приложения, машинное обучение и графические нагрузки внутри Docker, Kubernetes и других контейнерных сред, используя GPU хост-системы. Проект развивается корпорацией NVIDIA и распространяется по лицензии Apache 2.0.
¶Состав и архитектура
NVIDIA Container Toolkit состоит из нескольких компонентов, работающих в связке:
- nvidia-container-runtime — модифицированный рантайм OCI, который перехватывает запуск контейнера и добавляет в него необходимые драйверные библиотеки и устройства GPU.
- nvidia-container-cli — утилита командной строки, выполняющая настройку окружения контейнера (добавление библиотек в
LD_LIBRARY_PATH, монтирование устройств/dev/nvidia*). - nvidia-container-runtime-hook — OCI-хук, срабатывающий при создании контейнера и вызывающий
nvidia-container-cli. - nvidia-docker2 — пакет, интегрирующий поддержку GPU с Docker через конфигурацию рантаймов (в современных версиях заменён более общим механизмом
nvidia-container-runtime). - nvidia-ctk — утилита для настройки Docker-хоста, включая генерацию конфигурации рантаймов и интеграцию с CDI (Container Device Interface).
В контейнере при запуске с поддержкой GPU появляются характерные переменные окружения (NVIDIA_VISIBLE_DEVICES, NVIDIA_DRIVER_CAPABILITIES) и файлы устройств, через которые приложение обращается к драйверу NVIDIA.
¶Принцип работы
При запуске контейнера с GPU Docker вызывает рантайм nvidia-container-runtime, который вместо стандартного runc выполняет предварительную настройку. Утилита nvidia-container-cli определяет доступные GPU хост-системы, копирует в контейнер необходимые драйверные библиотеки (например, libcuda.so, libnvidia-ml.so) и монтирует файлы устройств. После этого запускается обычный runc, который создаёт изолированный контейнер с уже подготовленным окружением.
Такой подход позволяет обойтись без установки полного драйверного стека внутрь образа: в контейнер попадают только пользовательские библиотеки, а ядро драйвера остаётся на хосте. Это уменьшает размер образа и упрощает обновление драйверов.
¶Поддержка Kubernetes
Для кластеров Kubernetes NVIDIA предоставляет GPU Operator и NVIDIA Device Plugin. GPU Operator автоматизирует развёртывание всех необходимых компонентов (драйверы, рантаймы, мониторинг) на узлах кластера. Device Plugin сообщает Kubernetes о наличии GPU на узле и позволяет запрашивать их в спецификации пода:
``yaml resources: limits: nvidia.com/gpu: 1 ``
Такой механизм позволяет планировщикам Kubernetes распределять GPU-нагрузки по узлам и изолировать ресурсы между подами.
¶Установка и использование
На Ubuntu/Debian установка выполняется через официальный репозиторий NVIDIA:
``bash curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg sudo apt-get install nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker ``
Для запуска контейнера с GPU указывается рантайм:
``bash docker run --runtime=nvidia --gpus all nvidia/cuda:12.0-base-ubuntu22.04 nvidia-smi ``
Начиная с Docker Engine 19.03 поддержка GPU доступна через флаг --gpus без необходимости указывать рантайм вручную.
¶Применение
Основные сценарии использования NVIDIA Container Toolkit:
- Обучение и инференс нейросетей (PyTorch, TensorFlow, JAX).
- Обработка видео и изображений (FFmpeg с NVENC, OpenCV).
- Научные вычисления и моделирование (CUDA-приложения).
- Облачные GPU-сервисы и MLOps-платформы.
- Игровые стриминговые и виртуализационные решения (включая NVIDIA vGPU и GRID).
Компания NVIDIA также предоставляет готовые образы с предустановленными фреймворками — nvidia/cuda, nvidia/pytorch, nvidia/tensorflow, которые рассчитаны на использование с данным инструментарием.
¶Ограничения
Для работы требуется Linux с проприетарным драйвером NVIDIA (версия 450.80.02 и новее) и поддержка NVIDIA Container Runtime на уровне драйвера. Виртуализация GPU в контейнерах не обеспечивает полной изоляции на уровне аппаратного ускорения: контейнеры разделяют один GPU-драйвер хоста. Для мультиарендности и жёсткой изоляции требуется аппаратная поддержка (например, MIG — Multi-Instance GPU).
Источники:
- Документация NVIDIA Container Toolkit (docs.nvidia.com)
- Репозиторий проекта на GitHub (NVIDIA/nvidia-container-toolkit)
- Документация NVIDIA GPU Operator
- Руководство по установке NVIDIA Container Runtime
