المراقبة والملاحظة
تتبع التجارب وسجل النماذج
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)
مقارنة حلول التتبع
| الميزة | MLflow | Weights & Biases | Neptune |
|---|---|---|---|
| النشر | استضافة ذاتية أو مُدارة | سحابة فقط | سحابة فقط |
| التكلفة | مجاني (استضافة ذاتية) | طبقة مجانية + مدفوعة | طبقة مجانية + مدفوعة |
| الواجهة | أساسية | تصور غني | تصور غني |
| السجل | مدمج | محدود | محدود |
| الأفضل لـ | التحكم الكامل | تصور التجارب | فرق البحث |
نقطة حديث المقابلة: "أفضل MLflow للإنتاج لأننا يمكننا استضافته ذاتياً داخل VPC لأمان البيانات، ويتكامل جيداً مع خطوط أنابيب النشر."
أخطاء المقابلة الشائعة
# ما لا يجب قوله
mistakes:
- "نحفظ النماذج فقط في S3 مع الطوابع الزمنية"
why_bad: "لا نسب، لا يمكن إعادة الإنتاج، لا يمكن التدقيق"
- "نستخدم Git لإصدار النماذج"
why_bad: "Git غير مصمم للثنائيات الكبيرة"
- "كل مهندس يستخدم تتبعه الخاص"
why_bad: "لا تعاون، عمل مكرر، غير متسق"
# ما يجب قوله
best_practices:
- "خادم تتبع مركزي مع واجهة PostgreSQL"
- "توقيعات النموذج للتحقق من المدخلات/المخرجات"
- "ترقية آلية من خلال CI/CD"
- "مسار تدقيق للامتثال"
نصيحة احترافية: في المقابلات، اذكر توقيعات النموذج: "نستخدم توقيعات MLflow لالتقاط عدم تطابق مخطط المدخلات قبل أن تسبب أخطاء إنتاج."
في الدرس التالي، سنغطي مراقبة البنية التحتية لأنظمة ML. :::