انتقل إلى المحتوى الرئيسي

الوحدة 7 — سجلّ النماذج وإصداره

بعد التدريب في الوحدة 5 وتجربة AutoML في الوحدة 6، لدينا عدّة نماذج مرشّحة. الوحدة الحالية تجيب: كيف نُحوّل واحدًا منها إلى أصل رسمي يمكن نشره وتتبّعه ومشاركته وترقيّته بين البيئات؟ الجواب: سجلّ النماذج.

السجلّ: مورد مساحة العمل

كلّ مساحة عمل Azure ML لها سجلّ نماذج داخلي. يحفظ:

  • الملفّات (أوزان، بيانات وصفيّة)
  • الصيغة (MLflow، ONNX، مخصّص، Triton…)
  • الإصدار (رقم متتابع، أو تسمية إنسانية)
  • العلامات (stage=production, owner=data-team)
  • الوصف
  • النسب: إلى المهمّة التي أنتجته، إلى أصل البيانات، إلى البيئة

هذا السجلّ الداخلي مناسب لمساحة عمل واحدة (تطوير مثلًا)، لكنّه لا يسمح بمشاركة نموذج بين مساحات (تطوير → اختبار → إنتاج).

سجلّ Azure ML المشترك

للسيناريو المشترك، يُوفّر Azure ML مورد سجلّ (Registry) مستقلّ عن أيّ مساحة، على مستوى الاشتراك أو المؤسّسة. جميع المساحات المُصرَّح لها تكتب فيه أو تقرأ منه.

المشهد الإنتاجي النموذجي:

  1. مساحة تطوير تُنتج نماذج مرشّحة، تسجّلها في السجلّ المشترك بعلامة stage=candidate.
  2. مساحة اختبار تسحب نموذجًا من السجلّ، تشغّل عليه اختبارات جودة، تُعيد كتابة العلامة stage=validated.
  3. مساحة إنتاج لا تسحب إلّا النماذج بعلامة 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

يستطيع فريق الإنتاج البحث في السجلّ عن stage=production والحصول على النموذج الحالي دون معرفة رقم إصداره:

az ml model list --name demand-forecast --query "[?tags.stage=='production']"

النسب (Lineage)

هذه هي القيمة الأعظم لسجلّ Azure ML. كلّ نموذج مسجَّل من مخرجات مهمّة يحمل:

  • رابط إلى المهمّة: مع شفرتها ومعاملاتها الفائقة
  • رابط إلى إصدار البيانات المُدخَل
  • رابط إلى إصدار البيئة

بعد ستّة أشهر، عند تشغيل تدقيق تنظيمي على قرار قرض مثلًا، ينبغي إثبات:

  • بيانات ماذا دُرِّب عليها النموذج (azureml:credit_table:2026.10)
  • بأيّ شفرة بالضبط (سحابة رقمية للمجلّد المرفوع)
  • بأيّ مكتبات (sklearn==1.5.2, pandas==2.2.2)

كلّ ذلك موجود في نقرتين. لولا هذه السلسلة، إثبات الامتثال يستحيل.

قصص الفشل الشائعة

  • نموذج بدون نسب: مُرفَع يدويًّا من حاسوب مطوّر (az ml model create --path ./model.pkl). لا يعرف Azure من أين أتى. ممنوع بتاتًا في الإنتاج.
  • إعادة استعمال إصدار سابق دون بيان: يبدو التوقّع في الإنتاج غريبًا فجأة، لكنّ لا سجلّ يوضّح متى وقعت العودة إلى الإصدار السابق. حلّ: نشر جديد يعني إصدارًا جديدًا، ولو كانت الأوزان متطابقة.
  • العلامة latest في الإنتاج: endpoint --model demand-forecast:latest تعني أنّ آخر تسجيل يذهب مباشرة إلى الإنتاج، حتى لو كان نموذج تجربة. دائمًا ثبّت رقم الإصدار.
قاعدة الترقية

لا ترقّي نموذجًا إلى الإنتاج قبل أن يمرّ يومًا على الأقلّ في بيئة الاختبار مع حركة اصطناعية. الأخطاء البسيطة (مسار بيانات، مكتبة ناقصة، رقم إصدار خاطئ) تُكشف في الساعات الأولى، لا في التقييم الأوّلي.

الخلاصة

  • سجلّ النماذج يحفظ الملفّات والصيغة والإصدار والعلامات والنسب.
  • السجلّ المشترك يسمح بترقية نموذج بين مساحات التطوير والاختبار والإنتاج.
  • صيغة MLflow تُغني عن شفرة الاستدلال في نشر افتراضي.
  • العلامات (خاصّة stage) تحمل معنى وظيفيًّا يُبحَث به.
  • النسب إلى المهمّة والبيانات والبيئة أساس التدقيق التنظيمي.

الوحدة التالية: نشر النموذج — نقاط النهاية المتّصلة للطلبات الحيّة، ونقاط النهاية بالدفعات للتنبّؤات على ملايين السطور.