از آشفتگی تا ثبات: Docker برای جریان‌های کاری هوش مصنوعی (AI Workflows)

شما مدل را آموزش دادید. نوت‌بوک اجرا می‌شود. دمو کار می‌کند.

سپس آن را برای یکی از همکارانتان می‌فرستید. چهل دقیقه بعد، پیامی دریافت می‌کنید. آن‌ها با خطای CUDA مواجه شده‌اند. Torch وارد (import) نمی‌شود. نسخه Python آن‌ها اشتباه است.

شما همان جمله‌ای را می‌گویید که هر مهندسی از شنیدنش وحشت دارد: «روی سیستم من که کار می‌کرد!»

«روی سیستم من که کار می‌کرد!» در واقع یک اعتراف است. یعنی کد شما به چیزهایی در لپ‌تاپ شما وابسته است که آن‌ها را مستند نکرده‌اید. شما یک نسخه Python، یک کتابخانه سیستمی یا یک CUDA toolkit را فراموش کرده‌اید.

Docker جلوی این اتفاق را می‌گیرد.

یک اپلیکیشن وب معمولی وابستگی‌های کمی دارد. اما پروژه‌های هوش مصنوعی (AI) لایه‌های زیادی دارند:

• بسته‌های Python: Torch، Transformers و Numpy. • کتابخانه‌های سیستمی: Libgl1 یا ffmpeg. • پشته (Stack) مربوط به CUDA: درایورها و تولکیت‌ها. • وزن‌های مدل (Model weights): فایل‌های حجیمی که در مخزن (repo) شما نیستند. • نسخه Python: نسخه ۳.۱۰ روی لپ‌تاپ شما و ۳.۱۲ روی سرور.

یک فایل requirements.txt فقط یک لایه را پوشش می‌دهد. اما Docker تمام آن‌ها را در بر می‌گیرد.

یک Docker image در واقع یک اسنپ‌شات (snapshot) از یک کامپیوتر است. این تصویر شامل سیستم‌عامل، Python، بسته‌ها و کد شماست. یک container نیز نسخه در حال اجرای همان اسنپ‌شات است.

یک container از هسته (kernel) سیستم شما استفاده می‌کند. در عرض چند ثانیه بالا می‌آید. یک image به همان شکلی که روی لپ‌تاپ شما اجرا می‌شود، روی یک سرور GPU ابری نیز اجرا خواهد شد.

از یک Dockerfile برای نوشتن دستورالعمل (recipe) خود استفاده کنید. در اینجا یک قالب برای 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"]

برای جلوگیری از اشتباهات، این قوانین را دنبال کنید:

• نسخه‌ها را ثابت (Pin) کنید. به جای استفاده از torch فقط، از torch==2.3.1 استفاده کنید. این کار تکرارپذیری (reproducibility) را تضمین می‌کند. • ابتدا requirements را کپی کنید. این کار از قابلیت کش (caching) در Docker استفاده می‌کند. اگر کد شما تغییر کند اما بسته‌ها تغییر نکنند، با نادیده گرفتن نصب مجدد، سرعت ساخت (build) را بالا می‌برد. • برای وزن‌های مدل از volume استفاده کنید. مدل‌های ۵ گیگابایتی را داخل image قرار ندهید. از یک volume برای متصل کردن پوشه محلی خود به container استفاده کنید. • هر container فقط یک فرآیند (process) داشته باشد. API و پایگاه داده خود را در یک container قرار ندهید. از Docker Compose برای متصل کردن آن‌ها استفاده کنید.

با Docker، همکار شما فقط به دو دستور نیاز دارد:

git clone your-repo
docker compose up

دیگر خبری از خطاهای محیطی (environment errors) در هنگام عیب‌یابی نیست. کد روی هر سیستمی کار می‌کند.

منبع: https://dev.to/sachinsingh2156/from-chaos-to-consistency-docker-for-modern-ai-workflows-2gb7

جامعه یادگیری اختیاری: https://t.me/GyaanSetuAi