বিশৃঙ্খলা থেকে ধারাবাহিকতা: AI workflows-এর জন্য Docker

আপনি মডেলটি ট্রেন করেছেন। নোটবুকটি চলছে। ডেমোটি কাজ করছে।

তারপর আপনি এটি আপনার একজন সহকর্মীকে পাঠালেন। চল্লিশ মিনিট পর আপনি একটি মেসেজ পেলেন। তাদের CUDA error দেখাচ্ছে। Torch ইমপোর্ট হচ্ছে না। তাদের পাইথন ভার্সনটিও ভুল।

আপনি সেই কথাটি বললেন যা প্রতিটি ইঞ্জিনিয়ার ভয় পান: "It works on my machine."

"It works on my machine" একটি স্বীকারোক্তি। এর মানে হলো আপনার কোডটি আপনার ল্যাপটপের এমন কিছু জিনিসের ওপর নির্ভরশীল যা আপনি ডকুমেন্ট করেননি। আপনি হয়তো কোনো Python version, কোনো system library অথবা CUDA toolkit বাদ দিয়ে ফেলেছেন।

Docker এটি প্রতিরোধ করে।

একটি সাধারণ ওয়েব অ্যাপের খুব কম ডিপেন্ডেন্সি থাকে। কিন্তু AI প্রজেক্টের অনেকগুলো লেয়ার থাকে:

• Python packages: Torch, Transformers, এবং Numpy। • System libraries: Libgl1 অথবা ffmpeg। • The CUDA stack: Drivers এবং toolkits। • Model weights: বড় ফাইল যা আপনার repo-তে নেই। • Python version: আপনার ল্যাপটপে 3.10, সার্ভারে 3.12।

একটি requirements.txt ফাইল শুধুমাত্র একটি লেয়ারকে ধারণ করে। Docker সবকটি লেয়ারকেই ধারণ করে।

একটি Docker image হলো একটি কম্পিউটারের স্ন্যাপশট। এতে OS, Python, প্যাকেজ এবং আপনার কোড অন্তর্ভুক্ত থাকে। একটি container হলো সেই স্ন্যাপশটের একটি চলমান কপি।

একটি container আপনার মেশিনের kernel শেয়ার করে। এটি কয়েক সেকেন্ডের মধ্যেই চালু হয়ে যায়। একটি image আপনার ল্যাপটপ এবং ক্লাউড 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 ব্যবহার করুন। ৫GB-র মডেলগুলো ইমেজের ভেতরে রাখবেন না। আপনার লোকাল ফোল্ডারকে কন্টেইনারের সাথে লিঙ্ক করতে একটি volume ব্যবহার করুন। • প্রতি কন্টেইনারে একটি প্রসেস। আপনার API এবং database একই কন্টেইনারে রাখবেন না। তাদের লিঙ্ক করতে 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