Проблемы стандартного 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? Пошаговая инструкция
- Установите драйвер NVIDIA на хост (версия 525+).
- Установите NVIDIA Container Toolkit как показано выше.
- Проверьте доступность GPU:
docker run --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi. - Используйте базовый образ с CUDA:
nvidia/cuda:12.2.0-cudnn8-runtime-ubuntu22.04. - Запускайте контейнер с флагом
--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-пайплайна — и ваша команда сфокусируется на фичах, а не на окружении.







