Налаштування Docker для AI/ML з GPU-прискоренням та оптимізація образів

Проблеми стандартного Docker для AI/ML

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

Проблеми стандартного Docker для AI/ML

Припустимо, ваша команда використовує Docker для навчання моделей. Ви помічаєте, що образи важать 10+ ГБ, збірка займає 20 хвилин, а при деплої на продакшн виникає помилка «CUDA driver version is insufficient». Ці проблеми вирішуються правильним налаштуванням: вибір базового образу, багатостадійне складання та NVIDIA Container Toolkit. Нижче — перевірений підхід, який застосовують наші інженери з досвідом роботи понад 8 років.

Docker для AI/ML — це не просто упаковка коду. Це гарантія, що модель запуститься однаково на будь-якій інфраструктурі: від RTX 4090 розробника до A100 у хмарі. За 8+ років роботи ми розгорнули понад 50 продакшн-пайплайнів і виробили підходи, які економлять години налагодження. NVIDIA офіційно рекомендує використовувати Container Toolkit для GPU-прискорення в контейнерах.

NVIDIA Container Toolkit: призначення та встановлення

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

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 sudo apt install nvidia-container-toolkit sudo systemctl restart docker docker run --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi 

Після цього nvidia-smi всередині контейнера показує всі GPU. Важливо перевірити сумісність версії драйвера хоста та CUDA в образі.

Як налаштувати GPU в Docker? Покрокова інструкція

  1. Встановіть драйвер NVIDIA на хост (версія 525+).
  2. Встановіть NVIDIA Container Toolkit, як показано вище.
  3. Перевірте доступність GPU: docker run --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi.
  4. Використовуйте базовий образ з CUDA: nvidia/cuda:12.2.0-cudnn8-runtime-ubuntu22.04.
  5. Запускайте контейнер з флагом --gpus all або через docker-compose з resource reservations.

Чому багатостадійне складання критичне для AI?

Образи PyTorch з CUDA toolkit легко важать 10 ГБ. Якщо не розділяти стадії, підсумковий образ копіює всі заголовні файли та компілятори, не потрібні в продакшені. Наші інженери гарантують: використання runtime-тегу зменшує образ у 2 рази, а багатостадійне складання дає економію до 80%.

Тип образу Розмір Призначення
devel (full CUDA) 8-10 ГБ Розробка, збірка, навчання з динамічними графами
runtime 4-5 ГБ Інференс, донавчання без компіляції
runtime + ONNX 2-3 ГБ Інференс на ONNX Runtime, мінімальні залежності

Dockerfile для ML-проєкту: багатостадійне складання

Ми використовуємо багатостадійне складання, щоб підсумковий образ був мінімальним. Спочатку builder встановлює всі залежності, потім runtime копіює лише результат.

FROM nvidia/cuda:12.2.0-cudnn8-devel-ubuntu22.04 AS builder RUN apt-get update && apt-get install -y python3.11 python3-pip git \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --user --no-cache-dir -r requirements.txt FROM nvidia/cuda:12.2.0-cudnn8-runtime-ubuntu22.04 RUN apt-get update && apt-get install -y python3.11 \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /root/.local /root/.local ENV PATH=/root/.local/bin:$PATH WORKDIR /app COPY src/ ./src/ RUN useradd -m -u 1000 mluser USER mluser CMD ["python", "src/train.py"] 

Docker Compose для локальної розробки

Для розробки додаємо сервіси: MLflow для трекінгу, Postgres для метаданих. Приклад docker-compose.yml:

version: '3.8' services: training: build: . deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] volumes: - ./data:/app/data:ro - ./src:/app/src - ./outputs:/app/outputs environment: - MLFLOW_TRACKING_URI=http://mlflow:5000 depends_on: - mlflow mlflow: image: python:3.11-slim command: mlflow server --host 0.0.0.0 --port 5000 ports: - "5000:5000" volumes: - mlflow-data:/mlflow volumes: mlflow-data: 

Що робити, якщо контейнер не бачить GPU?

Типова причина — відсутність NVIDIA Container Toolkit або несумісність драйвера. Перевірте: nvidia-smi на хості працює? Встановлений toolkit? Чи правильно вказаний флаг --gpus all? Якщо проблема залишається, перевірте версію CUDA в образі (команда nvidia-smi всередині контейнера покаже сумісність). У 90% випадків допомагає перевстановлення драйвера або вибір іншого тегу CUDA.

Як оптимізувати розмір образу для інференсу?

Типові помилки та їх виправлення:

  • Використовувати devel замість runtime — замінити на runtime.
  • Відсутність --no-cache-dir у pip — завжди додавати.
  • Кеш apt після встановлення — видаляти через rm -rf /var/lib/apt/lists/*.
  • Монтування всього проєкту замість копіювання тільки src/ — структурувати.

Підсумковий образ для інференсу: PyTorch, ONNX Runtime, додаток — 2-3 ГБ. Порівняйте з 8-10 ГБ при наївному підході — різниця в 3-4 рази, що прямо впливає на вартість зберігання та швидкість розгортання.

Оптимізація Економія місця Складність
Багатостадійне складання 60-80% Низька
Використання runtime-тегу 40-50% Низька
ONNX Runtime замість PyTorch 30-40% Середня
Видалення кешу pip/apt 10-20% Дуже низька

Що входить у роботу?

При замовленні послуги ви отримуєте:

  • Готові Dockerfile та docker-compose для ML-пайплайнів з GPU-підтримкою.
  • Інтеграцію моніторингу (Prometheus + Grafana) для збору GPU-метрик.
  • CI-пайплайн з кешуванням шарів для прискорення збірок.
  • Документацію (model card, інструкції із запуску) та навчання команди.
  • Гарантію відтворюваності середовища на будь-якому етапі.

Зв'яжіться з нами, щоб оцінити ваш проєкт — отримайте консультацію та пропозицію під ключ протягом 3-5 днів. Понад 5 років на ринку, 8+ років досвіду в інженерів, 50+ впроваджених проєктів — ваш успіх у надійних руках. Замовте налаштування Docker для вашого ML-пайплайну — і ваша команда сфокусується на фічах, а не на оточенні.