افراتفری سے مستقل مزاجی تک: AI ورک فلو کے لیے Docker
آپ نے ماڈل کو ٹرین کر لیا۔ نوٹ بک چل رہی ہے۔ ڈیمو کام کر رہا ہے۔
پھر آپ اسے اپنے کسی ساتھی کو بھیجتے ہیں۔ چالیس منٹ بعد، آپ کو ایک پیغام ملتا ہے۔ انہیں CUDA ایرر آ رہا ہے۔ Torch امپورٹ نہیں ہو رہا۔ ان کے پاس Python کا غلط ورژن ہے۔
آپ وہ الفاظ کہتے ہیں جن سے ہر انجینئر ڈرتا ہے: "یہ میرے سسٹم پر تو چل رہا ہے۔"
"یہ میرے سسٹم پر تو چل رہا ہے" ایک اعتراف ہے۔ اس کا مطلب ہے کہ آپ کا کوڈ آپ کے لیپ ٹاپ کی ایسی چیزوں پر منحصر ہے جن کا آپ نے ذکر نہیں کیا۔ آپ Python کا ورژن، کوئی سسٹم لائبریری، یا CUDA ٹول کٹ بھول گئے۔
Docker اسے روکتا ہے۔
ایک عام ویب ایپ میں چند ہی انحصار (dependencies) ہوتے ہیں۔ AI پروجیکٹس میں کئی تہیں (layers) ہوتی ہیں:
• Python پیکیجز: Torch، Transformers، اور Numpy۔ • سسٹم لائبریریز: Libgl1 یا ffmpeg۔ • CUDA اسٹیک: ڈرائیورز اور ٹول کٹس۔ • ماڈل ویٹس (weights): بڑی فائلیں جو آپ کے ریپوزٹری (repo) میں نہیں ہوتیں۔ • Python ورژن: آپ کے لیپ ٹاپ پر 3.10، سرور پر 3.12۔
ایک requirements.txt فائل صرف ایک تہہ کو محفوظ کرتی ہے۔ Docker ان تمام تہوں کو محفوظ کر لیتا ہے۔
ایک Docker امیج ایک کمپیوٹر کا اسنیپ شاٹ (snapshot) ہے۔ اس میں OS، Python، پیکیجز اور آپ کا کوڈ شامل ہوتا ہے۔ کنٹینر (container) اس اسنیپ شاٹ کی چلتی ہوئی کاپی ہے۔
کنٹینر آپ کے مشین کرنل (kernel) کو شیئر کرتا ہے۔ یہ سیکنڈوں میں شروع ہو جاتا ہے۔ ایک ہی امیج آپ کے لیپ ٹاپ اور کلاؤڈ GPU سرور پر ایک ہی طرح سے چلتی ہے۔
اپنی ترکیب (recipe) لکھنے کے لیے 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"]
غلطیوں سے بچنے کے لیے ان اصولوں پر عمل کریں:
• اپنے ورژنز کو پن (pin) کریں۔ صرف torch کے بجائے torch==2.3.1 استعمال کریں۔ یہ دوبارہ پیدا کرنے کی صلاحیت (reproducibility) کو یقینی بناتا ہے۔ • پہلے requirements کو کاپی کریں۔ یہ Docker کی کیشنگ (caching) کا استعمال کرتا ہے۔ اگر آپ کا کوڈ تبدیل ہوتا ہے لیکن پیکیجز نہیں، تو یہ دوبارہ انسٹالیشن کو چھوڑ کر بلڈز کو تیز کر دیتا ہے۔ • ویٹس (weights) کے لیے والیومز (volumes) کا استعمال کریں۔ 5GB کے ماڈلز کو امیج کے اندر نہ رکھیں۔ اپنے لوکل فولڈر کو کنٹینر سے جوڑنے کے لیے والیوم کا استعمال کریں۔ • فی کنٹینر ایک پراسیس۔ اپنی API اور ڈیٹا بیس کو ایک ہی کنٹینر میں نہ رکھیں۔ انہیں جوڑنے کے لیے Docker Compose کا استعمال کریں۔
Docker کے ساتھ، آپ کے ساتھی کو صرف دو کمانڈز کی ضرورت ہے:
git clone your-repo
docker compose up
اب انوائرمنٹ (environment) کے ایررز کو ڈی بگ کرنے کی ضرورت نہیں پڑے گی۔ یہ ہر مشین پر کام کرتا ہے۔
Source: https://dev.to/sachinsingh2156/from-chaos-to-consistency-docker-for-modern-ai-workflows-2gb7
اختیاری لرننگ کمیونٹی: https://t.me/GyaanSetuAi