Від хаосу до стабільності: Docker для AI-процесів
Ви навчили модель. Ноутбук працює. Демонстрація працює.
Потім ви надсилаєте її колезі. Через сорок хвилин ви отримуєте повідомлення. У них помилка CUDA. Torch не імпортується. У них інша версія Python.
Ви вимовляєте слова, яких боїться кожен інженер: «На моїй машині все працює».
«На моїй машині все працює» — це зізнання. Це означає, що ваш код залежить від речей на вашому ноутбуці, які ви не задокументували. Ви пропустили версію Python, системну бібліотеку або CUDA toolkit.
Docker запобігає цьому.
Типовий вебдодаток має небагато залежностей. AI-проєкти мають багато рівнів:
• Python-пакети: Torch, Transformers та Numpy. • Системні бібліотеки: Libgl1 або ffmpeg. • Стек CUDA: драйвери та інструментарії (toolkits). • Ваги моделі: великі файли, яких немає у вашому репозиторії. • Версія Python: 3.10 на вашому ноутбуці, 3.12 на сервері.
Файл requirements.txt фіксує лише один рівень. Docker фіксує всі.
Docker-образ — це знімок (snapshot) комп'ютера. Він включає ОС, Python, пакети та ваш код. Контейнер — це запущена копія цього знімка.
Контейнер використовує ядро вашої машини. Він запускається за лічені секунди. Один і той самий образ працює однаково як на вашому ноутбуці, так і на хмарному GPU-сервері.
Використовуйте Dockerfile, щоб написати свій «рецепт». Ось шаблон для PyTorch:
FROM python:3.11-slim
RUN apt-get update && apt-get install -y --no-install-recommends
build-essential
libgl1
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "predict.py"]
Дотримуйтесь цих правил, щоб уникнути помилок:
• Фіксуйте версії. Використовуйте torch==2.3.1 замість просто torch. Це забезпечує відтворюваність.
• Спочатку копіюйте requirements. Це використовує кешування Docker. Це пришвидшує збірку, пропускаючи повторне встановлення, якщо ваш код змінюється, а пакети — ні.
• Використовуйте volumes для ваг. Не кладіть моделі розміром 5 ГБ всередину образу. Використовуйте volume, щоб підключити вашу локальну папку до контейнера.
• Один процес на один контейнер. Не розміщуйте API та базу даних в одному контейнері. Використовуйте Docker Compose, щоб пов'язати їх.
З Docker вашому колезі знадобляться лише дві команди:
git clone your-repo docker compose up
Більше ніякого налагодження помилок середовища. Все працює на будь-якій машині.
Source: https://dev.to/sachinsingh2156/from-chaos-to-consistency-docker-for-modern-ai-workflows-2gb7
Додаткова спільнота для навчання: https://t.me/GyaanSetuAi