अराजकता से निरंतरता तक: AI वर्कफ़्लो के लिए Docker
आपने मॉडल को ट्रेन किया। नोटबुक चल रही है। डेमो काम कर रहा है।
फिर आप इसे अपने किसी साथी को भेजते हैं। चालीस मिनट बाद, आपको एक मैसेज मिलता है। उन्हें CUDA एरर आ रहा है। Torch इम्पोर्ट नहीं हो रहा है। उनके पास गलत Python वर्शन है।
आप वे शब्द कहते हैं जिनसे हर इंजीनियर डरता है: "यह मेरी मशीन पर काम कर रहा है।"
"यह मेरी मशीन पर काम कर रहा है" एक स्वीकारोक्ति है। इसका मतलब है कि आपका कोड आपके लैपटॉप की उन चीज़ों पर निर्भर है जिनका आपने दस्तावेज़ीकरण (document) नहीं किया था। आप कोई Python वर्शन, सिस्टम लाइब्रेरी, या CUDA टूलकिट भूल गए।
Docker इसे रोकता है।
एक सामान्य वेब ऐप में कुछ ही डिपेंडेंसीज़ (dependencies) होती हैं। AI प्रोजेक्ट्स में कई लेयर्स होती हैं:
• Python पैकेज: Torch, Transformers, और Numpy। • सिस्टम लाइब्रेरीज़: Libgl1 या ffmpeg। • CUDA स्टैक: ड्राइवर्स और टूलकिट्स। • मॉडल वेट्स (weights): बड़ी फ़ाइलें जो आपके रेपो (repo) में नहीं हैं। • Python वर्शन: आपके लैपटॉप पर 3.10, सर्वर पर 3.12।
एक requirements.txt फ़ाइल केवल एक लेयर को कैप्चर करती है। Docker उन सभी को कैप्चर करता है।
एक Docker इमेज एक कंप्यूटर का स्नैपशॉट है। इसमें OS, Python, पैकेज और आपका कोड शामिल होता है। एक कंटेनर उस स्नैपशॉट की एक रनिंग कॉपी है।
एक कंटेनर आपके मशीन कर्नेल (kernel) को साझा करता है। यह सेकंडों में शुरू हो जाता है। एक ही इमेज आपके लैपटॉप और क्लाउड 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"]
गलतियों से बचने के लिए इन नियमों का पालन करें:
• अपने वर्शन पिन (pin) करें। सिर्फ torch के बजाय torch==2.3.1 का उपयोग करें। यह पुनरुत्पादकता (reproducibility) सुनिश्चित करता है। • पहले requirements कॉपी करें। यह Docker कैशिंग (caching) का उपयोग करता है। यदि आपका कोड बदलता है लेकिन आपके पैकेज नहीं बदलते हैं, तो यह री-इंस्टॉलेशन को छोड़कर बिल्ड को तेज़ बनाता है। • वेट्स (weights) के लिए वॉल्यूम (volumes) का उपयोग करें। 5GB के मॉडल को इमेज के अंदर न रखें। अपने लोकल फोल्डर को कंटेनर से जोड़ने के लिए वॉल्यूम का उपयोग करें। • प्रति कंटेनर एक प्रोसेस। अपने API और डेटाबेस को एक ही कंटेनर में न रखें। उन्हें जोड़ने के लिए Docker Compose का उपयोग करें।
Docker के साथ, आपके साथी को केवल दो कमांड्स की आवश्यकता होती है:
git clone your-repo
docker compose up
अब एनवायरनमेंट एरर्स को डीबग करने की ज़रूरत नहीं। यह हर मशीन पर काम करता है।
स्रोत: https://dev.to/sachinsingh2156/from-chaos-to-consistency-docker-for-modern-ai-workflows-2gb7
वैकल्पिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi