الوحدة 7 — سجلّ النماذج وإصداره
بعد التدريب في الوحدة 5 وتجربة AutoML في الوحدة 6، لدينا عدّة نماذج مرشّحة. الوحدة الحالية تجيب: كيف نُحوّل واحدًا منها إلى أصل رسمي يمكن نشره وتتبّعه ومشاركته وترقيّته بين البيئات؟ الجواب: سجلّ النماذج.
السجلّ: مورد مساحة العمل
كلّ مساحة عمل Azure ML لها سجلّ نماذج داخلي. يحفظ:
- الملفّات (أوزان، بيانات وصفيّة)
- الصيغة (MLflow، ONNX، مخصّص، Triton…)
- الإصدار (رقم متتابع، أو تسمية إنسانية)
- العلامات (
stage=production,owner=data-team) - الوصف
- النسب: إلى المهمّة التي أنتجته، إلى أصل البيانات، إلى البيئة
هذا السجلّ الداخلي مناسب لمساحة عمل واحدة (تطوير مثلًا)، لكنّه لا يسمح بمشاركة نموذج بين مساحات (تطوير → اختبار → إنتاج).
سجلّ Azure ML المشترك
للسيناريو المشترك، يُوفّر Azure ML مورد سجلّ (Registry) مستقلّ عن أيّ مساحة، على مستوى الاشتراك أو المؤسّسة. جميع المساحات المُصرَّح لها تكتب فيه أو تقرأ منه.
المشهد الإنتاجي النموذجي:
- مساحة تطوير تُنتج نماذج مرشّحة، تسجّلها في السجلّ المشترك بعلامة
stage=candidate. - مساحة اختبار تسحب نموذجًا من السجلّ، تشغّل عليه اختبارات جودة، تُعيد كتابة العلامة
stage=validated. - مساحة إنتاج لا تسحب إلّا النماذج بعلامة
validated، وتنشرها.
هذا الفصل يضمن أنّ نموذجًا لم يمرّ عبر الاختبار لا يمكن أن يصل إلى الإنتاج.
صيغة MLflow: الخيار الافتراضي
في الوحدة 5 استعملنا mlflow.xgboost.autolog(). النموذج يُحفَظ تلقائيًّا بصيغة MLflow، التي تحوي:
model/
├── MLmodel # وصف يمكن للخادم قراءته
├── conda.yaml # المتطلّبات الدقيقة
├── requirements.txt
└── model.xgb # الأوزان الفعلية
فائدة MLflow: النشر لا يحتاج شفرة استدلال مخصّصة. Azure ML يستطيع بناء نقطة نهاية جاهزة من مجرّد النموذج، لأنّ MLmodel يصف الإشارة والتحويلات.
تسجيل النموذج بعد المهمّة:
az ml model create \
--name demand-forecast \
--version 12 \
--type mlflow_model \
--path azureml://jobs/<job-name>/outputs/model
يمكن أيضًا التسجيل من داخل الشفرة عبر mlflow.register_model().
الصيغ المخصّصة
في حالات نادرة، النموذج ليس MLflow: نموذج ONNX تصدّرته من فريق آخر، نموذج مخصّص يجمع خطوة معالجة أوّلية غير قياسية، خدمة Triton مركّبة. تسجّل الملفّات كـcustom_model:
az ml model create \
--name demand-forecast-onnx \
--version 5 \
--type custom_model \
--path ./models/onnx/
الفارق الأهمّ: يجب أن تُقدّم شفرة استدلال (score.py) عند النشر (الوحدة 8). Azure ML لا يعرف كيف يقود النموذج وحده.
الإصدارات والعلامات
قاعدتان تُبقيان السجلّ نظيفًا:
الإصدار رقم متتابع يعيّنه Azure. لا يجوز حذفه أو إعادة استعماله. النماذج تتراكم — هذا مقصود لأنّه يسمح بالعودة إلى إصدار سابق بلحظة.
العلامات حرّة، وتحمل المعنى الوظيفي:
az ml model update \
--name demand-forecast \
--version 12 \
--set tags.stage=production \
tags.metric_mae=1.8 \
tags.deployment_date=2026-09-06