Налаштування NVIDIA GPU для Docker: повний посібникАвточернетка

Ілюстрація NVIDIA Docker

Сучасні завдання машинного навчання, глибокого навчання та обробки великих об’ємів даних часто вимагають використання графічних процесорів (GPU) для прискорення обчислень. Контейнеризація за допомогою Docker стала стандартним підходом до розгортання таких програм, але як ефективно поєднати ці технології?

У цій статті ми розглянемо, як правильно налаштувати Docker для використання потужності NVIDIA GPU. Ми порівняємо два основні підходи — сучасний NVIDIA Container Toolkit і старіший nvidia-docker2, а також розберемо типові проблеми та їх вирішення.

Різниця між NVIDIA Container Toolkit і nvidia-docker2

Перш ніж перейти до налаштування, важливо зрозуміти різницю між цими двома технологіями.

NVIDIA Container Toolkit (сучасний підхід)

NVIDIA Container Toolkit — це сучасне рішення, яке активно розвивається і рекомендується самою NVIDIA. Ось його ключові особливості:

  • Активний розвиток: Toolkit постійно оновлюється і підтримується
  • Сучасна інтеграція: Краще працює з новими версіями Docker
  • Гнучкість: Пропонує більш детальні налаштування доступу до GPU
  • Широка підтримка: Працює з найновішими драйверами та обладнанням NVIDIA

nvidia-docker2 (старий підхід)

nvidia-docker2 — це старіша версія інструментів, яка все ще працює, але вже не розвивається активно:

  • Архівований статус: Зараз фактично є обгорткою над Container Toolkit
  • Простота використання: Часто простіший у налаштуванні для базових сценаріїв
  • Синтаксис: Використовує параметр runtime: nvidia в docker-compose
  • Сумісність: Краще працює зі старішими версіями Docker

Налаштування NVIDIA Container Toolkit

Налаштування сучасного NVIDIA Container Toolkit відбувається в кілька простих кроків.

Крок 1: Встановлення NVIDIA Container Toolkit

Спочатку потрібно налаштувати репозиторій NVIDIA та встановити сам toolkit:

# Налаштовуємо репозиторій NVIDIA
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

# Додаємо репозиторій з правильним підписом
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# Оновлюємо пакети та встановлюємо NVIDIA Container Toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

Крок 2: Налаштування Docker для використання NVIDIA Container Toolkit

Після встановлення toolkit’у потрібно настроїти Docker для його використання:

# Налаштовуємо Docker для використання NVIDIA Container Toolkit
sudo nvidia-ctk runtime configure --runtime=docker

# Перезапускаємо Docker, щоб застосувати зміни
sudo systemctl restart docker

Крок 3: Перевірка інтеграції

Перевіримо, чи все працює правильно, запустивши тестовий контейнер:

# Тестуємо, чи працює інтеграція з GPU
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

Якщо все налаштовано правильно, ви повинні побачити вивід утиліти nvidia-smi, який показує інформацію про ваші GPU.

Крок 4: Налаштування docker-compose.yml

Для використання GPU в docker-compose додайте такі налаштування до вашого файлу:

services:
  tensorflow-service:
    # ...інші налаштування...
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=all
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [compute, utility]

Цей приклад конфігурації показує, як зарезервувати один GPU з можливостями обчислень та утиліт для вашого сервісу.

Налаштування nvidia-docker2

Якщо з якихось причин вам потрібно використовувати старіший підхід, ось як налаштувати nvidia-docker2.

Крок 1: Встановлення nvidia-docker2

# Додаємо ключі репозиторію NVIDIA
distribution=$(. /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
sudo apt-get update
sudo apt-get install -y nvidia-docker2

# Перезапускаємо Docker
sudo systemctl restart docker

Крок 2: Перевірка інтеграції

Перевіримо, чи правильно працює інтеграція:

# Тестуємо, чи працює інтеграція з GPU
docker run --runtime=nvidia --rm nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

Крок 3: Налаштування docker-compose.yml

Для nvidia-docker2 конфігурація трохи простіша:

services:
  tensorflow-service:
    # ...інші налаштування...
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all

Виправлення типових проблем

При налаштуванні Docker для роботи з GPU можуть виникати різні помилки. Розглянемо найпоширеніші з них та способи їх вирішення.

Помилка: “could not select device driver with capabilities: [[compute utility]]”

Ця помилка зазвичай вказує на проблеми з налаштуванням Container Toolkit. Спробуйте такі кроки:

  1. Переконайтеся, що Container Toolkit встановлено правильно: sudo apt-get install -y nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker
  2. Перевірте, чи Docker розпізнає NVIDIA runtime: docker info | grep -i nvidia У виводі повинна бути інформація про налаштований NVIDIA runtime.
  3. Спробуйте змінити capabilities для GPU в docker-compose.yml: capabilities: [gpu] # Замість [compute, utility]

Помилка: “nvidia-container-cli: requirement error: unsatisfied condition: cuda>=X.X”

Ця помилка вказує на несумісність версій CUDA в контейнері та на хост-системі.

Рішення:

  1. Перевірте вашу версію CUDA: nvidia-smi | grep "CUDA Version"
  2. Використовуйте сумісний образ: # Наприклад, якщо на хості CUDA 11.8 docker run --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

Перевірка статусу GPU в запущеному контейнері

Для діагностики проблем з GPU в запущеному контейнері виконайте:

docker exec -it назва_вашого_контейнера nvidia-smi

Ця команда покаже стан GPU всередині контейнера.

Висновки

Обидва методи інтеграції NVIDIA GPU з Docker дозволяють використовувати потужність графічних процесорів у ваших контейнерах. Проте NVIDIA Container Toolkit є більш сучасним та гнучким рішенням, яке рекомендується для нових проектів.

Головні висновки:

  • NVIDIA Container Toolkit — сучасний, гнучкий підхід з кращою інтеграцією з новими версіями Docker
  • nvidia-docker2 — простіший старіший підхід, який все ще працездатний і може бути кращим для певних сценаріїв

Вибір між ними залежить від ваших конкретних потреб, версії Docker та бажаного рівня гнучкості налаштувань.

Незалежно від обраного підходу, правильне налаштування GPU в Docker відкриває широкі можливості для обчислювально-інтенсивних завдань, таких як машинне навчання, аналіз даних та інженерне моделювання.


Маєте запитання щодо налаштування NVIDIA GPU з Docker? Залиште їх у коментарях нижче, і ми будемо раді допомогти!

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *