Від хаосу до стабільності: 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