0Pricing
Learn AI with Python · درس

وضع نماذج التعلم الآلي في حاويات باستخدام Docker

‏Dockerfile متعدد المراحل، وصور CUDA الأساسية، ونسخ مخرجات النموذج باستخدام COPY، ونقاط نهاية فحص الصحة

وضع نماذج التعلم الآلي في حاويات باستخدام Docker درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

لماذا نضع نماذج تعلم الآلة في حاويات

تعتمد نماذج تعلم الآلة على إصدار محدد من Python، ومكتبات النظام، وإصدارات مثبتة من الحزم. وتجمع Docker كل ذلك في صورة واحدة غير قابلة للتغيير، بحيث يعمل النموذج بالطريقة نفسها على حاسوب محمول، وعامل CI، وعنقود إنتاج.

تتمثل أكبر مشكلة في تعلم الآلة في انجراف التبعيات: فقد يتصرف نموذج دُرّب باستخدام numpy 1.24 بشكل غير صحيح بصمت عند تشغيله باستخدام numpy 2.0. وتعمل الحاوية على تثبيت هذه الإصدارات.

الصورة الساذجة أحادية المرحلة

تثبّت المحاولة الأولى كل شيء في مرحلة واحدة. وهذا ينجح، لكنه يضمّن أدوات البناء، مثل المصرّفات وذاكرات التخزين المؤقت وترويسات التطوير، في الصورة النهائية، مما يجعلها كبيرة ويزيد مساحة الهجوم.

FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]

البناء متعدد المراحل: الفكرة

يستخدم البناء متعدد المراحل مرحلةً لتجميع التبعيات وتثبيتها، وهي مرحلة الإنشاء، ثم ينسخ العناصر النهائية فقط إلى مرحلة نهائية نظيفة. ولا تصل أدوات البناء فقط إلى بيئة الإنتاج.

  • مرحلة الإنشاء: صورة أساس كاملة، وتشغّل pip install
  • المرحلة النهائية: صورة أساس خفيفة، وتنسخ الحزم المثبتة

مرحلة الإنشاء: pip install

تثبّت مرحلة الإنشاء الحزم في مسار بادئة معروف، بحيث يسهل نسخها إلى الخارج. ويضع استخدام --user الحزم تحت /root/.local، وهو مجلد واحد يمكننا نسخه لاحقاً.

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

المرحلة النهائية الخفيفة

تبدأ المرحلة النهائية من python:3.11-slim وتنسخ الحزم المثبتة من مرحلة الإنشاء. وتستبعد الصورة الخفيفة سلاسل أدوات البناء، مما يقلل حجم الصورة بمئات الميغابايتات.

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .

نسخ أوزان النموذج

ينبغي نسخ أوزان النماذج الكبيرة في طبقة مستقلة حتى يتمكن Docker من تخزينها مؤقتًا. إذا تغيّر الرمز البرمجي وحده، يُعاد استخدام طبقة الأوزان وتصبح عمليات إعادة البناء سريعة.

COPY model/ /app/model/
COPY src/ /app/src/

كشف منفذ الخدمة باستخدام EXPOSE

تستمع خوادم الاستدلال (FastAPI وTriton وTorchServe) إلى منفذ. توثّق EXPOSE 8000 أن الحاوية تقدّم الخدمة عبر المنفذ 8000. لكنها لا تنشر المنفذ تلقائيًا؛ فما زال يتعين ربطه باستخدام -p 8000:8000 عند التشغيل.

EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

أساسيات HEALTHCHECK

تحتاج أدوات تنسيق الحاويات إلى معرفة ما إذا كان خادم النموذج قيد التشغيل. يشغّل توجيه HEALTHCHECK أمرًا على فترات زمنية محددة؛ ويؤدي خروج الأمر برمز غير صفري إلى اعتبار الحاوية غير سليمة، بحيث يمكن إعادة تشغيلها أو إزالتها من موازن التحميل.

استخدام HEALTHCHECK مع curl

من الأنماط الشائعة استدعاء نقطة نهاية خفيفة مثل /health. يفشل curl -f (بخروج ذي رمز غير صفري) عند حدوث أي خطأ في HTTP، وهذا هو بالضبط ما يتوقعه HEALTHCHECK.

HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

نقطة نهاية صحية بسيطة

ينبغي أن يوفّر تطبيق الخدمة لديك نقطة نهاية سريعة تؤكد تحميل النموذج، من دون تنفيذ استدلال كامل.

from fastapi import FastAPI

app = FastAPI()
model = None  # loaded at startup

@app.get("/health")
def health():
    return {"status": "ok", "model_loaded": model is not None}

ملف Dockerfile الكامل

بجمع كل العناصر معًا: تثبّت مرحلة البناء التبعيات، ثم تنسخ مرحلة نهائية خفيفة هذه التبعيات بالإضافة إلى النموذج، وتكشف المنفذ 8000، وتعلن عن فحص للصحة.

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY model/ /app/model/
COPY src/ /app/src/
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

تحقق سريع

اختبر مدى فهمك لعمليات البناء متعددة المراحل.

مراجعة

لقد تعلّمت كيفية وضع نموذج تعلّم آلي في حاوية باستخدام ملف Dockerfile مناسب لبيئات الإنتاج:

  • بناء متعدد المراحل: تثبّت مرحلة البناء التبعيات، ثم تنسخها المرحلة النهائية الخفيفة
  • توثّق EXPOSE 8000 منفذ تقديم الخدمة
  • يتيح HEALTHCHECK CMD curl لأدوات تنسيق الحاويات اكتشاف الحاويات المتوقفة
  • نسخ الأوزان في طبقة مستقلة قابلة للتخزين المؤقت

بعد ذلك، ستنشر نموذجًا موضوعًا في حاوية على خدمة سحابية مُدارة.

الأسئلة الشائعة

هل درس «وضع نماذج التعلم الآلي في حاويات باستخدام Docker» مجاني؟

نعم — نص درس «وضع نماذج التعلم الآلي في حاويات باستخدام Docker» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

ماذا ستتعلم في «وضع نماذج التعلم الآلي في حاويات باستخدام Docker»؟

‏Dockerfile متعدد المراحل، وصور CUDA الأساسية، ونسخ مخرجات النموذج باستخدام COPY، ونقاط نهاية فحص الصحة تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟

لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «وضع نماذج التعلم الآلي في حاويات باستخدام Docker»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟

نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. وضع نماذج التعلم الآلي في حاويات باستخدام Docker
  2. النشر السحابي: AWS SageMaker
  3. تقديم عالي الأداء باستخدام Triton Inference Server
  4. توسيع نطاق نقاط نهاية النماذج وتوسيعها تلقائيًا
← العودة إلى Learn AI with Python