البنية التحتية والنشر
Docker لنماذج ML
5 دقيقة للقراءة
تعبئة Docker في حاويات أمر أساسي لـ MLOps. يتوقع المحاورون أن تحسن الحاويات لأحمال عمل ML.
سؤال المقابلة: البناء متعدد المراحل
السؤال: "كيف ستحسن صورة Docker لتقديم نموذج PyTorch؟"
هيكل الإجابة القوية:
# المرحلة 1: مرحلة البناء - تتضمن أدوات البناء
FROM python:3.11-slim AS builder
WORKDIR /app
# تثبيت تبعيات البناء
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
&& rm -rf /var/lib/apt/lists/*
# تثبيت تبعيات Python
COPY requirements.txt .
RUN pip wheel --no-cache-dir --wheel-dir /wheels -r requirements.txt
# المرحلة 2: مرحلة التشغيل - الحد الأدنى
FROM python:3.11-slim AS runtime
WORKDIR /app
# نسخ العجلات فقط، وليس أدوات البناء
COPY /wheels /wheels
RUN pip install --no-cache-dir /wheels/* && rm -rf /wheels
# نسخ النموذج وكود الاستدلال
COPY model/ ./model/
COPY src/ ./src/
# مستخدم غير root للأمان
RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser
EXPOSE 8080
CMD ["python", "src/serve.py"]
استراتيجيات التحسين الرئيسية
| الاستراتيجية | التأثير | كيفية الشرح |
|---|---|---|
| البناء متعدد المراحل | تقليل الحجم 60-80% | "تبعيات البناء لا تُشحن للإنتاج" |
| ترتيب الطبقات | إعادة بناء أسرع | "ضع الطبقات نادرة التغيير أولاً (OS، deps)" |
| dockerignore. | سياق أصغر | "استبعاد بيانات التدريب، الدفاتر، الاختبارات" |
| صور أساسية نحيفة | أصغر 5 مرات | "python:3.11-slim مقابل python:3.11" |
| تثبيت pip بدون cache | توفير 100MB+ | "العجلات لا تحتاج cache في الحاوية" |
أسئلة المتابعة الشائعة في المقابلات
س: "كيف تتعامل مع أوزان النموذج؟"
# الخيار 1: تضمين في الصورة (للنماذج الصغيرة <500MB)
COPY model_weights.pt /app/model/
# الخيار 2: التنزيل عند البدء (للنماذج الكبيرة)
# استخدم init container أو سكريبت entrypoint
ENV MODEL_PATH=/models/bert-large
RUN mkdir -p /models
# الخيار 3: التحميل من volume (الإنتاج)
# عند التشغيل: -v /host/models:/app/models
س: "كيف تتعامل مع حاويات GPU؟"
# استخدم صورة NVIDIA الأساسية لدعم CUDA
FROM nvidia/cuda:12.1-runtime-ubuntu22.04
# أو PyTorch مع CUDA مثبت مسبقاً
FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime
# تحقق من الوصول إلى GPU عند التشغيل
# docker run --gpus all my-ml-image nvidia-smi
أفضل ممارسات الأمان
غالباً ما يتحقق المحاورون من الوعي الأمني:
# 1. لا تشغل كـ root في الإنتاج أبداً
USER appuser
# 2. ثبت الإصدارات للتكرارية
FROM python:3.11.7-slim@sha256:abc123...
# 3. افحص الصور في CI/CD
# trivy image my-ml-image:latest
# 4. لا تضمن الأسرار
# سيء: ENV AWS_SECRET_KEY=xyz
# جيد: استخدم مدير الأسرار عند التشغيل
إشارة المقابلة: ذكر Trivy أو Grype لفحص الحاويات يُظهر نضج أمني.
في الدرس التالي، سنغطي أسئلة مقابلات Kubernetes. :::