خطوط التدريب وتتبع التجارب
درس 1 من 3
1خطوط التدريب وتتبع التجارب
الصورة الكبيرة«النموذج الجيد كان في تجربة الثلاثاء، لكن لا أذكر أي إعدادات». هذه أشهر جملة في فرق تعلم الآلة. MLOps يبدأ بأن تسجل كل تجربة تلقائيًا.
ماذا تشاهد في الرسم: خط تدريب قابل للتكرار: كل مدخل له إصدار، وكل مخرج مسجّل مع ما صنعه.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
مثل طاهٍ يجرب وصفات: لو لم يكتب الكميات والحرارة والوقت لكل محاولة، فلن يعيد أفضل طبق أبدًا. تتبع التجارب هو دفتر الطاهي، لكنه يُكتب تلقائيًا.
قابلية التكرار: commit الكود، وإصدار البيانات (DVC أو تجزئة الملف أو جدول بنسخة زمنية)، والبيئة (requirements مثبتة أو صورة Docker)، والبذور (random، numpy، torch)، مع العلم أن بعض عمليات GPU غير حتمية. تتبع التجارب (MLflow، Weights & Biases): المعاملات، والمقاييس عبر الحقب، والمخرجات (النموذج، المصفوفة)، ووسوم. الخط (pipeline) خطوات منفصلة: تحضير، تقسيم، تدريب، تقييم، تسجيل، بملف إعداد واحد، ويُشغّل في CI أو مُجدول. سجل النماذج: إصدارات بمراحل (staging، production) وبطاقة نموذج توثق البيانات والمقاييس والقيود.
قبل أن تبدأ
🧠التعلم الآلي الكلاسيكي
درّبت وقيّمت نموذجًا.
🚀التشغيل
مسار تشغيل النماذج.
الفكرة الجوهرية
1سجل تجارب بنفسك
قبل الأدوات، الفكرة: كل تشغيل يسجل بصمة البيانات والإعدادات والنتيجة. هنا «تدريب» بسيط حتمي وسجل في الذاكرة:
import hashlib
import json
import random
DATA = [(x, 2 * x + 1) for x in range(20)]
runs = []
def fingerprint(data):
return hashlib.sha256(json.dumps(data).encode()).hexdigest()[:10]
def train(lr, epochs, seed):
rng = random.Random(seed)
w, b = rng.random(), rng.random()
for _ in range(epochs):
for x, y in DATA:
err = (w * x + b) - y
w -= lr * err * x
b -= lr * err
loss = sum(((w * x + b) - y) ** 2 for x, y in DATA) / len(DATA)
return round(loss, 6)
for lr in (0.001, 0.003):
params = {"lr": lr, "epochs": 30, "seed": 42}
runs.append({"data": fingerprint(DATA), **params, "loss": train(**params)})
best = min(runs, key=lambda r: r["loss"])
for r in runs:
print(r)
print("best:", best["lr"], "reproduced:", train(best["lr"], 30, 42) == best["loss"])2MLflow
نفس الفكرة بأداة حقيقية: كل start_run يسجل المعاملات والمقاييس والنموذج، وتقارن التجارب في واجهة ويب:
import mlflow
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
mlflow.set_experiment("reviews-sentiment")
with mlflow.start_run():
params = {"C": 0.5, "max_iter": 500}
mlflow.log_params(params)
mlflow.set_tag("data_version", "reviews-2026-10")
model = LogisticRegression(**params).fit(X_train, y_train)
mlflow.log_metric("accuracy", accuracy_score(y_test, model.predict(X_test)))
mlflow.sklearn.log_model(model, "model", registered_model_name="sentiment")
# mlflow ui -> http://localhost:50003إصدارات البيانات
البيانات تتغير، والنموذج يتغير معها. سجّل بصمة البيانات مع كل تجربة، وللملفات الكبيرة استخدم DVC الذي يحفظ مؤشرًا صغيرًا في Git والملف الضخم في تخزين منفصل:
pip install dvc dvc init dvc add data/reviews.csv # creates data/reviews.csv.dvc (tracked by git) git add data/reviews.csv.dvc .gitignore git commit -m "Track reviews dataset v1" dvc remote add -d store s3://my-bucket/dvc dvc push
مثال محلول
المسألة: دقة النموذج في الإنتاج 79% والفريق يتذكر 87%. التحقيق: سجل MLflow يظهر أن 87% كانت على بيانات reviews-2026-08 وبذرة 1، والنموذج المنشور دُرّب على reviews-2026-10 بعد تغيير في التنظيف أزال الإيموجي. الحل: إعادة التدريب بالخط المسجل، وإضافة اختبار في الخط يرفض أي نموذج دقته أقل من الإصدار الحالي.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| MLOps للشركات الكبيرة فقط. | شخص واحد يحتاج أن يعرف أي إعدادات صنعت أفضل نموذج. سجل بسيط يكفي للبداية. |
| تثبيت البذرة يجعل كل شيء حتميًا. | بعض عمليات GPU والتوازي غير حتمية. سجّل كل شيء وتوقع فروقًا صغيرة. |
اختبر فهمك
ما الذي تسجله مع كل تجربة؟
بدونها لا تعيد صنع النموذج.
لماذا لا تضع ملف بيانات 10GB في Git؟
DVC يحفظ مؤشرًا صغيرًا في Git والملف في تخزين منفصل.
ما سجل النماذج؟
تعرف منه أي إصدار في الإنتاج وكيف صُنع.
بطاقات مراجعة سريعة
تحقق من فهمك
لماذا سكربت بدل دفتر للتدريب النهائي؟
السكربت يعمل من الصفر بترتيب ثابت، والدفتر قد يحمل حالة خفية.
ماذا تفعل البصمة (hash) للبيانات؟
تكشف أي تغيير في البيانات، ولو حرفًا، وتربطه بالتجربة.
ما الاختبار الذي تضيفه للخط قبل النشر؟
رفض النموذج الجديد إن كانت مقاييسه أسوأ من الحالي على نفس بيانات الاختبار.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
توثيق رسمي2
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.