Как использовать графический процессор NVIDIA с контейнерами Docker — CloudSavvy IT

Графика с логотипами NVIDIA и Docker

Контейнеры Docker не видят графический процессор вашей системы автоматически. Это приводит к снижению производительности в рабочих нагрузках, зависящих от графического процессора, таких как платформы машинного обучения. Вот как предоставить доступ к графическому процессору NVIDIA вашего хоста вашим контейнерам.

Заставляем графические процессоры работать в Docker

Контейнеры Docker совместно используют ядро ​​вашего хоста, но имеют собственную операционную систему и программные пакеты. Это означает, что им не хватает драйверов NVIDIA, используемых для взаимодействия с вашим графическим процессором. Docker даже не добавляет графические процессоры в контейнеры по умолчанию, поэтому простой запуск докера вообще не увидит ваше оборудование.

На высоком уровне подготовка графического процессора к работе представляет собой двухэтапную процедуру: установите драйверы в свой образ, а затем проинструктируйте Docker добавить устройства графического процессора в ваши контейнеры во время выполнения.

Это руководство ориентировано на современные версии CUDA и Docker. Последний выпуск NVIDIA Container Toolkit разработан для сочетания CUDA 10 и Docker Engine 19.03 и более поздних версий. Для более старых сборок драйверов CUDA, Docker и NVIDIA могут потребоваться дополнительные действия.

Добавление драйверов NVIDIA

Прежде чем продолжить настройку Docker, убедитесь, что драйверы NVIDIA правильно работают на вашем хосте. Вы должны иметь возможность успешно запустить nvidia-smi и увидеть имя вашего графического процессора, версию драйвера и версию CUDA.

Чтобы использовать свой графический процессор с Docker, начните с добавления NVIDIA Container Toolkit на свой хост. Это интегрируется в Docker Engine для автоматической настройки ваших контейнеров для поддержки графического процессора.

Добавьте репозиторий пакетов инструментария в вашу систему, используя пример команды:

распределение = $ (. / etc / os-release; echo $ ID $ VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add — && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

Затем установите пакет nvidia-docker2 на свой хост:

apt-get update apt-get install -y nvidia-docker2

Перезапустите демон Docker, чтобы завершить установку:

sudo systemctl перезапустить докер

Теперь набор инструментов для контейнера должен быть готов к работе. Вы готовы запустить тестовый контейнер.

Запуск контейнера с доступом к графическому процессору

Поскольку Docker не предоставляет графические процессоры вашей системы по умолчанию, вам необходимо создать контейнеры с флагом —gpus, чтобы ваше оборудование отображалось. Вы можете указать определенные устройства для включения или использовать ключевое слово all.

Образы nvidia / cuda предварительно настроены с использованием двоичных файлов CUDA и инструментов графического процессора. Запустите контейнер и выполните команду nvidia-smi, чтобы проверить доступность вашего графического процессора. Результат должен соответствовать тому, что вы видели при использовании nvidia-smi на вашем хосте. Версия CUDA может отличаться в зависимости от версий набора инструментов на вашем хосте и в выбранном вами образе контейнера.

docker run -it —gpus все nvidia / cuda: 11.4.0-base-ubuntu20.04 nvidia-smi

Выбор базового изображения

Использование одного из тегов nvidia / cuda — это самый быстрый и простой способ запустить рабочую нагрузку графического процессора в Docker. Доступно множество различных вариантов; они предоставляют матрицу операционной системы, версии CUDA и опций программного обеспечения NVIDIA. Образы созданы для нескольких архитектур.

Каждый тег имеет такой формат:

11.4.0-база-убунту20.04

  • 11.4.0 — Версия CUDA.
  • база — имидж ароматизатора.
  • ubuntu20.04 — Версия операционной системы.

Доступны три различных варианта изображения. Базовый образ — это минимальный вариант с основными исполняемыми исполняемыми файлами CUDA. runtime — это более полнофункциональный вариант, который включает математические библиотеки CUDA и NCCL для связи между графическими процессорами. Третий вариант — это devel, который предоставляет вам все, начиная от среды выполнения, а также с заголовками и инструментами разработки для создания пользовательских образов CUDA.

Если один из образов подойдет вам, постарайтесь использовать его в качестве основы в своем Dockerfile. Затем вы можете использовать обычные инструкции Dockerfile для установки языков программирования, копирования исходного кода и настройки приложения. Это устраняет сложность ручной настройки графического процессора.

ОТ nvidia / cuda: 11.4.0-base-ubuntu20.04 RUN apt update RUN apt-get install -y python3 python3-pip RUN pip install tensorflow-gpu КОПИРОВАТЬ tenor-code.py. ENTRYPONT [«python3», «tensor-code.py»]

Сборка и запуск этого образа с флагом —gpus запустит вашу рабочую нагрузку Tensor с ускорением графического процессора.

Настройка изображения вручную

Вы можете вручную добавить поддержку CUDA в свой образ, если вам нужно выбрать другую основу. Лучший способ добиться этого — обратиться к официальным файлам NVIDIA Dockerfiles.

Скопируйте инструкции, используемые для добавления репозитория пакетов CUDA, установки библиотеки и привязки ее к своему пути. Мы не воспроизводим все шаги в этом руководстве, поскольку они различаются в зависимости от версии CUDA и операционной системы.

Обратите внимание на переменные среды в конце файла Dockerfile — они определяют, как контейнеры, использующие ваш образ, интегрируются с NVIDIA Container Runtime:

ENV NVIDIA_VISIBLE_DEVICES все ENV NVIDIA_DRIVER_CAPABILITIES вычисление, утилита

Ваше изображение должно определять ваш графический процессор после установки CUDA и установки переменных среды. Это дает вам больше контроля над содержимым вашего изображения, но оставляет вам возможность корректировать инструкции по мере выпуска новых версий CUDA.

Как это работает?

NVIDIA Container Toolkit — это набор пакетов, которые обертывают среды выполнения контейнеров, такие как Docker, с интерфейсом для драйвера NVIDIA на хосте. Библиотека libnvidia-container отвечает за предоставление API и интерфейса командной строки, которые автоматически предоставляют графические процессоры вашей системы контейнерам через оболочку времени выполнения.

Компонент nvidia-container-toolkit реализует предварительный запуск среды выполнения контейнера. Это означает, что он получает уведомление, когда новый контейнер вот-вот начнется. Он смотрит на графические процессоры, которые вы хотите подключить, и вызывает libnvidia-container для обработки создания контейнера.

Ловушка активируется nvidia-container-runtime. Это обертывает вашу «настоящую» среду выполнения контейнера, такую ​​как containerd или runc, чтобы гарантировать запуск обработчика предварительного запуска NVIDIA. Ваша существующая среда выполнения продолжает процесс запуска контейнера после выполнения ловушки. Когда набор инструментов контейнера установлен, вы увидите, что среда выполнения NVIDIA выбрана в вашем файле конфигурации демона Docker.

Резюме

Использование графического процессора NVIDIA внутри контейнера Docker требует, чтобы вы добавили NVIDIA Container Toolkit на хост. Это интегрирует драйверы NVIDIA со средой выполнения вашего контейнера.

Вызов docker run с флагом —gpu делает ваше оборудование видимым для контейнера. Это должно быть установлено для каждого запускаемого контейнера после установки Container Toolkit.

NVIDIA предоставляет предварительно настроенные образы CUDA Docker, которые вы можете использовать в качестве быстрого старта для своего приложения. Если вам нужно что-то более конкретное, обратитесь к официальным файлам Docker, чтобы собрать свой собственный, который все еще совместим с Container Toolkit.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.