Experiment Tracking
يسجل تتبّع التجارب المعلمات وإصدارات التعليمات البرمجية والبيانات والمقاييس والمخرجات لكل جولة تدريب للتعلّم الآلي، ما يتيح مقارنة الجولات وإعادة إنتاجها.
تتبّع التجارب هو تسجيل كل ما يتعلق بكل تشغيل لتدريب التعلّم الآلي، بما في ذلك إصدار الشيفرة وإصدار البيانات والإعدادات والبيئة والمقاييس بمرور الوقت وملفات المخرجات مثل الأوزان والرسوم، في مخزن واحد قابل للبحث. ينتج عن المشروع الذي يجرّب عشرات معدلات التعلّم وإعدادات زيادة البيانات وأحجام النماذج عمليات تدريب متشابهة في المظهر على القرص؛ ويحتفظ التتبّع بالإعدادات المرتبطة بكل نتيجة، بحيث يمكن مقارنة أفضل تشغيل وإعادة إنتاجه وتتبع مصدره بعد أشهر. وقد جعل TensorBoard، الذي صدر مع TensorFlow عام 2015، منحنيات التدريب المباشرة أمرًا شائعًا، وأصدرت Databricks مشروع MLflow مفتوح المصدر عام 2018، وكان التتبّع أحد مكوناته الأصلية الثلاثة. ومن أدوات التتبّع الأخرى واسعة الاستخدام Weights & Biases وComet وClearML وDVC.
ما الذي تسجّله أداة التتبّع#
يحصل كل تشغيل على معرّف فريد وينتمي إلى تجربة، وهي مجموعة مسماة من عمليات التشغيل ذات الصلة. ويتضمن سجل التشغيل النموذجي ما يلي:
- المعلمات الفائقة: معدل التعلّم وحجم الدفعة والمحسّن وبنية النموذج والبذرة العشوائية وكل إعداد آخر يؤثر في التدريب.
- المقاييس: خسائر التدريب والتحقق ودرجاتهما المسجلة لكل خطوة أو حقبة، بالإضافة إلى مقاييس النظام مثل ذاكرة GPU واستخدامها.
- العناصر: نقاط التحقق ومصفوفات الالتباس والتنبؤات النموذجية وملفات الإعداد.
- النسب: إيداع Git وإصدار مجموعة البيانات وإصدارات الحزم والعتاد والمؤلف الذي أنتج التشغيل.
يتم التسجيل باستدعاء من العميل لكل قيمة، أو تلقائيًا عبر عمليات التكامل للتسجيل التلقائي التي تلتقط معلمات الإطار ومقاييسه دون إضافة شيفرة. ويجمع خادم تتبّع مشترك عمليات التشغيل من كل حاسوب محمول وجهاز سحابي ومهمة CI في الفريق، كما تعرض لوحة معلوماته منحنيات الخسارة للتشغيلات المحددة فوق بعضها وتتيح تصفيتها حسب أي معلمة أو مقياس، ما يجعل مشكلات مثل فرط التكيّف واضحة للوهلة الأولى.
يسجّل تدريب Ultralytics YOLO وسيطات كل تشغيل في args.yaml وخسائره ومقاييسه لكل حقبة في results.csv، كما ترسل عمليات التكامل المدمجة القيم نفسها إلى MLflow أو Comet أو ClearML أو DVC فور تثبيت حزمتها، بينما يُفعّل TensorBoard وWeights & Biases عبر yolo settings. وتصبح وسيطتا التدريب project وname اسمي التجربة والتشغيل في MLflow، لذا تصل عملية ضبط YOLO26 إلى أداة التتبّع منظّمة مسبقًا.
مقارنة عمليات التشغيل وإعادة إنتاجها#
ترسم لوحات المعلومات مقياسًا مقابل معلمة عبر عمليات التشغيل، أو تنشئ مخططات الإحداثيات المتوازية التي تصل إعدادات كل تشغيل بنتيجته، ما يوضح الإعدادات المهمة في عملية مسح. في Ultralytics Platform، يقارن المشروع نماذجه بعرض منحنيات المقاييس والخسارة فوق بعضها وجدول جنبًا إلى جنب، ويحوّل درس مقارنة التشغيلات واختيار الأفضل هذه المقارنة إلى بوابة ترقية مكتوبة بنص برمجي. ويتطلب استنساخ تشغيل ما أكثر من معلماته الفائقة: يجب أن يتضمن السجل أيضًا إيداع الشيفرة، ولقطة البيانات الدقيقة، وإصدارات الحزم، والبذرة العشوائية، لأن أنوية GPU وترتيب تحميل البيانات قد يغيّران النتائج قليلًا حتى بين تشغيلات متطابقة فيما عدا ذلك.
يدرّب هذا البرنامج النصي لـMLflow شجرة قرار بأربعة أعماق على مجموعة الأرقام المكتوبة يدويًا في scikit-learn، ويسجّل كل عمق بوصفه معلمة والدقة على مجموعة التحقق بوصفها مقياسًا، ثم يستعلم عن التجربة كما لو كانت جدولًا:
import mlflow
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Store runs in a local SQLite file and group them under one experiment
mlflow.set_tracking_uri("sqlite:///mlflow.db")
mlflow.set_experiment("digits-tree-depth")
X_train, X_val, y_train, y_val = train_test_split(*load_digits(return_X_y=True), random_state=0)
# One tracked run per setting: the parameter goes in, the metric comes out
for depth in [2, 4, 8, 16]:
with mlflow.start_run(run_name=f"depth-{depth}"):
model = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(X_train, y_train)
mlflow.log_param("max_depth", depth)
mlflow.log_metric("val_accuracy", model.score(X_val, y_val))
# Query the experiment like a table, best run first
runs = mlflow.search_runs(order_by=["metrics.val_accuracy DESC"])
print(runs[["params.max_depth", "metrics.val_accuracy"]])في قاعدة بيانات جديدة، يسرد الجدول العمق 16 أولًا بدقة تحقق تبلغ 0.838، ثم العمق 8 بدقة 0.818، والعمق 4 بدقة 0.533، والعمق 2 بدقة 0.318. يؤدي تشغيل mlflow ui في المجلد نفسه باستخدام --backend-store-uri sqlite:///mlflow.db إلى فتح عمليات التشغيل نفسها في المتصفح.
تتبّع التجارب وممارسات ذات صلة#
يمثل تتبّع التجارب مرحلة من عمليات التعلّم الآلي (MLOps)، إلى جانب ثلاث ممارسات غالبًا ما تختلط به:
- سجل النماذج: يحتفظ بالنماذج القليلة المدرّبة الجديرة بالنشر، ويربط إصدار كل منها بتشغيل التتبّع الذي أنتجه.
- مراقبة النماذج: تراقب مدخلات النموذج المنشور ومخرجاته ودقته في بيئة الإنتاج، بعد أن يُنجز التتبّع مهمته أثناء التطوير.
- ضبط المعلمات الفائقة: تطلق أدوات البحث مثل Optuna وRay Tune عمليات تشغيل كثيرة تلقائيًا، وتخزّن أداة التتبّع كل واحدة منها وترتّبها.










