Загрузка урока...
Когда ваше решение переезжает с локального ноутбука на сервер, главная проблема — это зависимости. Версия драйвера CUDA, библиотеки PyTorch и специфические системные зависимости могут превратить деплой в кошмар. Решение — контейнеризация.
В этом уроке мы научимся правильно упаковывать ИИ-модели в Docker так, чтобы они «видели» видеокарту и работали максимально стабильно.
По умолчанию Docker-контейнеры изолированы от «железа» хоста. Чтобы контейнер мог использовать видеокарту, необходимо установить NVIDIA Container Toolkit.
Он позволяет пробрасывать драйверы и библиотеки CUDA внутрь контейнера без их установки непосредственно в образ. Это критически важно: образ остается легким и переносимым, а тяжелые драйверы используются с хост-машины.
Типичная ошибка — пытаться собрать образ на базе чистого Python. Всегда используйте официальные образы от NVIDIA, где уже настроены CUDA и cuDNN.
Пример эффективного Dockerfile:
Dockerfile
# 1. Используем базовый образ с CUDA и поддержкой runtime
FROM nvidia/cuda:12.1.0-base-ubuntu22.04
# 2. Устанавливаем Python и системные зависимости
RUN apt-get update && apt-get install -y \
python3-pip \
python3-dev \
git \
&& rm -rf /var/lib/apt/lists/*
# 3. Настраиваем рабочую директорию
WORKDIR /app
# 4. Копируем зависимости и устанавливаем их
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
# 5. Копируем код приложения и веса модели (или путь к ним)
COPY . .
# 6. Команда запуска
CMD ["python3", "main.py"]
Чтобы запустить собранный контейнер с доступом к видеокарте, используется флаг --gpus.
Запуск со всеми GPU: docker run --gpus all my-ai-app
Запуск с конкретной картой: docker run --gpus '"device=0"' my-ai-app
Веса LLM могут весить десятки и сотни гигабайт. Запихивать их внутрь Docker-образа — плохая практика по трем причинам:
Образ становится неповоротливым (неудобно пушить в реестр).
Каждое обновление кода требует пересборки огромного образа.
Сложно масштабироваться.
Как делать правильно:
Используйте Volumes (тома). Храните веса моделей на диске сервера и монтируйте их в контейнер при запуске:
docker run --gpus all -v /mnt/models:/app/models my-ai-app
Когда у вас не один сервер, а кластер, в игру вступает Kubernetes (K8s). Он позволяет:
Auto-scaling: Поднимать новые поды (контейнеры) с моделью, когда очередь запросов растет.
Health Checks: Автоматически перезапускать модель, если она «упала» из-за ошибки памяти (OOM - Out Of Memory).
Resource Quotas: Четко распределять, какой сервис может использовать конкретную GPU.
Установите (или проверьте наличие) Docker и NVIDIA Container Toolkit на вашем сервере или локальной машине с GPU.
Попробуйте запустить официальный образ для проверки:
docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi
Если вы увидели таблицу с характеристиками вашей видеокарты — всё настроено верно.
Подумайте: если вам нужно запустить 3 разные модели на одном сервере с 2 видеокартами, как бы вы распределили ресурсы в Docker?
NVIDIA Container Toolkit — обязательное звено для связи Docker и GPU.
Базовые образы от NVIDIA экономят часы на настройке окружения.
Веса моделей всегда держите отдельно от кода (через Volumes).
В этом материале нет файлов для просмотра.