المراقبة والملاحظة

تتبع التجارب وسجل النماذج

4 دقيقة للقراءة

تتبع التجارب هو كيف تتجنب الفرق فوضى "أي إصدار من النموذج في الإنتاج؟". يتوقع المحاورون أن تعرف MLflow بعمق.

مفاهيم MLflow الأساسية

المفهومالغرضنقطة المقابلة
التجربةتجميع التشغيلات المرتبطةواحدة لكل مشروع/مهمة
التشغيلتنفيذ تدريب واحدله معاملات، مقاييس، أصول
الأصلملفات الإخراجالنماذج، الرسوم البيانية، عينات البيانات
سجل النماذجدورة حياة النموذجانتقالات Staging → Production

سؤال المقابلة: إعداد MLflow

السؤال: "اشرح لي إعداد تتبع التجارب لفريق من 10 مهندسي ML."

import mlflow
from mlflow.tracking import MlflowClient

# تكوين الخادم (للوصول الجماعي)
# mlflow server --backend-store-uri postgresql://... --default-artifact-root s3://...
TRACKING_URI = "http://mlflow.internal:5000"
mlflow.set_tracking_uri(TRACKING_URI)

def train_model_with_tracking(params: dict, data):
    # إنشاء أو الحصول على التجربة
    experiment = mlflow.set_experiment("fraud_detection_v2")

    with mlflow.start_run(run_name=f"run_{datetime.now().isoformat()}"):
        # تسجيل المعاملات
        mlflow.log_params(params)

        # التدريب
        model = train(data, **params)
        metrics = evaluate(model, test_data)

        # تسجيل المقاييس
        mlflow.log_metrics({
            "precision": metrics["precision"],
            "recall": metrics["recall"],
            "f1": metrics["f1"],
            "auc_roc": metrics["auc_roc"]
        })

        # تسجيل النموذج مع التوقيع
        signature = mlflow.models.infer_signature(
            X_train, model.predict(X_train)
        )

        mlflow.sklearn.log_model(
            model,
            artifact_path="model",
            signature=signature,
            registered_model_name="fraud_detector"
        )

        # تسجيل أصول إضافية
        mlflow.log_artifact("feature_importance.png")
        mlflow.log_artifact("confusion_matrix.png")

        return mlflow.active_run().info.run_id

سير عمل سجل النماذج

from mlflow.tracking import MlflowClient

client = MlflowClient()

def promote_model(model_name: str, run_id: str, stage: str):
    """
    المراحل: None → Staging → Production → Archived
    """
    # الحصول على إصدار النموذج من التشغيل
    model_uri = f"runs:/{run_id}/model"

    # التسجيل إذا لم يكن موجوداً
    model_version = mlflow.register_model(model_uri, model_name)

    # انتقال المرحلة
    client.transition_model_version_stage(
        name=model_name,
        version=model_version.version,
        stage=stage,
        archive_existing_versions=(stage == "Production")
    )

    # إضافة وصف
    client.update_model_version(
        name=model_name,
        version=model_version.version,
        description=f"تمت الترقية إلى {stage} في {datetime.now()}"
    )

    return model_version.version

# الاستخدام
promote_model("fraud_detector", "abc123", "Staging")  # بعد التحقق
promote_model("fraud_detector", "abc123", "Production")  # بعد الموافقة

سؤال المقابلة: تحميل نموذج الإنتاج

السؤال: "كيف تضمن أن كود التقديم يستخدم دائماً أحدث نموذج إنتاج؟"

import mlflow

def load_production_model(model_name: str):
    """تحميل نموذج الإنتاج الحالي"""

    # الطريقة 1: بالمرحلة (موصى بها)
    model = mlflow.pyfunc.load_model(
        model_uri=f"models:/{model_name}/Production"
    )

    # الطريقة 2: بالإصدار (للتكرارية)
    # model = mlflow.pyfunc.load_model(
    #     model_uri=f"models:/{model_name}/3"
    # )

    return model

def predict_with_production_model(features):
    model = load_production_model("fraud_detector")
    return model.predict(features)

مقارنة حلول التتبع

الميزةMLflowWeights & BiasesNeptune
النشراستضافة ذاتية أو مُدارةسحابة فقطسحابة فقط
التكلفةمجاني (استضافة ذاتية)طبقة مجانية + مدفوعةطبقة مجانية + مدفوعة
الواجهةأساسيةتصور غنيتصور غني
السجلمدمجمحدودمحدود
الأفضل لـالتحكم الكاملتصور التجاربفرق البحث

نقطة حديث المقابلة: "أفضل MLflow للإنتاج لأننا يمكننا استضافته ذاتياً داخل VPC لأمان البيانات، ويتكامل جيداً مع خطوط أنابيب النشر."

أخطاء المقابلة الشائعة

# ما لا يجب قوله
mistakes:
  - "نحفظ النماذج فقط في S3 مع الطوابع الزمنية"
    why_bad: "لا نسب، لا يمكن إعادة الإنتاج، لا يمكن التدقيق"

  - "نستخدم Git لإصدار النماذج"
    why_bad: "Git غير مصمم للثنائيات الكبيرة"

  - "كل مهندس يستخدم تتبعه الخاص"
    why_bad: "لا تعاون، عمل مكرر، غير متسق"

# ما يجب قوله
best_practices:
  - "خادم تتبع مركزي مع واجهة PostgreSQL"
  - "توقيعات النموذج للتحقق من المدخلات/المخرجات"
  - "ترقية آلية من خلال CI/CD"
  - "مسار تدقيق للامتثال"

نصيحة احترافية: في المقابلات، اذكر توقيعات النموذج: "نستخدم توقيعات MLflow لالتقاط عدم تطابق مخطط المدخلات قبل أن تسبب أخطاء إنتاج."

في الدرس التالي، سنغطي مراقبة البنية التحتية لأنظمة ML. :::

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

الوحدة 4: المراقبة والملاحظة

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.