Открыть сервисСервис

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
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru