الوحدة 5 — مهامّ التدريب وتتبّع التنفيذ
تجتمع القطع الأربع الآن: مساحة عمل، عنقود حساب، أصل بيانات مُصدَّر، بيئة مسجَّلة. الوحدة الحالية تشغّل أوّل تدريب رسمي لنموذج تنبّؤ الطلب لسلسلة متاجرنا، وتضبط تتبّعه بحيث نستطيع أن نُقارن ونعيد إنتاج أيّ نتيجة بعد أشهر.
مهمّة الأمر (Command Job)
النمط الأشيع في Azure ML. تُعرّف أمرًا ينفّذه Azure على العنقود، مع مدخلات ومخرجات وبيئة صريحة. عيّنة:
# jobs/train.yml
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
experiment_name: forecast-baseline
display_name: xgb-w36
code: ../src
command: >
python train.py
--data ${{inputs.sales}}
--alpha ${{inputs.alpha}}
--max-depth ${{inputs.max_depth}}
--model-out ${{outputs.model}}
environment: azureml:forecast-env:3
compute: azureml:cpu-cluster
inputs:
sales:
type: uri_file
path: azureml:sales_weekly:2026.36
mode: download
alpha: 0.1
max_depth: 6
outputs:
model:
type: uri_folder
الإطلاق:
az ml job create --file jobs/train.yml
خمس خصائص تستحقّ الفهم:
code: مجلّد يُرفَع إلى العقدة كاملًا. لا تضع فيه بيانات ثقيلة.command: سطر Shell يُنفَّذ داخل الحاوية بعد تحضير المدخلات.${{inputs.x}}: يستبدلها Azure بمسار محلّي (لملفّ) أو قيمة (لعدد).${{outputs.y}}: مسار مجلّد على العقدة. كلّ ما تكتب فيه يُحفَظ آليًّا في مخزن مساحة العمل.experiment_name: تجميع منطقي في Studio. المهامّ المتشابهة تحت اسم واحد تجعل المقارنة ممكنة.
التسجيل التلقائي بـMLflow
Azure ML مبنيّ حول MLflow: لا تحتاج ضبط خادم ولا مخزّن. داخل train.py:
import mlflow
import xgboost as xgb
from sklearn.metrics import mean_absolute_error
mlflow.xgboost.autolog()
model = xgb.XGBRegressor(alpha=args.alpha, max_depth=args.max_depth)
model.fit(X_train, y_train)
mae = mean_absolute_error(y_val, model.predict(X_val))
mlflow.log_metric("mae_val", mae)
mlflow.xgboost.save_model(model, args.model_out)
mlflow.xgboost.autolog() وحده يُسجّل: المعاملات الفائقة، رسوم أهمّية المتغيّرات، النموذج بصيغة MLflow. كلّ ذلك يظهر في Studio تحت Experiments > forecast-baseline > xgb-w36.
لا تعِد كتابة ما يُسجَّل تلقائيًّا. اكتفِ بإضافة القياس المخصّص الذي يهمّك (هنا mae_val).
المدخلات والمخرجات: النموذج العقلي
المهمّة صندوق نقيّ. المدخلات تدخل، المخرجات تخرج، وما بينهما تنفيذ محسوب. هذه الصفة هي ما يجعل التتبّع ذا معنى:
- كلّ تنفيذ يُخزَّن دائمًا مع إصدار أصل البيانات المستعمل، وإصدار البيئة، وسحابة رقمية للشفرة المرفوعة.
- في Studio، صفحة كلّ تنفيذ تعرض هذه الروابط الثلاثة، وتُتيح فتح الشفرة والبيانات والنموذج بنقرة.
- إذا ذبلت النتيجة في الإنتاج بعد شهرين، تجد بسرعة أيّ إصدار بيانات كان مستعملًا وقت التدريب الذي أنتج النموذج.
مسح المعاملات الفائقة (Sweep Job)
بدل تشغيل مهمّة واحدة، تُطلق مسحًا يستكشف مساحة معاملات آليًّا:
# jobs/sweep.yml
$schema: https://azuremlschemas.azureedge.net/latest/sweepJob.schema.json
experiment_name: forecast-sweep
type: sweep
sampling_algorithm: bayesian
objective:
goal: minimize
primary_metric: mae_val
search_space:
alpha:
type: uniform
min_value: 0.0
max_value: 1.0
max_depth:
type: choice
values: [4, 6, 8, 10]
limits:
max_total_trials: 40
max_concurrent_trials: 8
early_termination:
type: bandit
slack_factor: 0.2
evaluation_interval: 2
trial:
code: ../src
command: >
python train.py --data ${{inputs.sales}} --alpha ${{search_space.alpha}}
--max-depth ${{search_space.max_depth}}
environment: azureml:forecast-env:3
compute: azureml:cpu-cluster
ثلاث نقاط تستحقّ التوقّف:
sampling_algorithm: bayesianأفضل منgridلمساحات مستمرّة، ومنrandomعند احتمال 40 محاولة.max_concurrent_trialsينبغي أن يبقى تحتmax_instancesللعنقود.early_termination: banditيُوقف المحاولات التي يتضح أنّها أسوأ بـ20% من الأفضل الحالي بعد 4 خطوات، فتوفّر ساعات حوسبة.
قراءة النتائج في Studio
في صفحة تجربة، القائمة تعرض جميع التنفيذات مع القياسات كأعمدة. الاستعمالات النموذجية:
- الفرز حسب
mae_valلرؤية أحسن نموذج - تلوين حسب
max_depthلكشف تأثير معامل واحد - تصفية حسب علامة (مثلًا
stage=candidate) لعزل المحاولات المرشّحة للإنتاج
ك لّ تنفيذ صفحة تفصيلية بها: القياسات الحية، السجلّات، الملفّات المُنتَجة، النموذج، ولوحة نسب إلى البيانات والبيئة والشفرة.
جرّب المهمّة الفرديّة أوّلًا. لو انهارت للسبب البسيط (import مفقود، مسار خاطئ، بيانات مقلوبة)، عالج المشكلة على تنفيذ واحد بدل أن تدفع 40 مرّة نفس الخطأ. مسح ناجح يبدأ بمهمّة فردية ناجحة.
الخلاصة
- مهمّة الأمر هي الوحدة الأساسية: أمر + مدخلات + مخرجات + بيئة + حساب.
mlflow.autolog()يوفّر التسجيل الكامل تقريبًا، أضف قياساتك الخاصّة بعد ذلك.- كلّ تنفيذ مربوط دائمًا بـإصدار البيانات والبيئة والشفرة — أساس التكرار والتدقيق.
- مهمّة المسح تستكشف مساحة المعاملات بأخذ عيّنات ذكيّ وإيقاف مبكر.
- ابدأ بتنفيذ فردي ناجح قبل إطلاق أيّ مسح.
في العمل اليوميّ، ضع قاعدة بسيطة لفريقك: كلّ تنفيذ ذي قيمة يحصل على وسم واضح (النموذج، نسخة البيانات، الغاية) وشرح مختصر في mlflow.set_tag("purpose", "...")، وإلّا تحوّل السجلّ خلال أسابيع إلى ركام لا يمكن تصفيته. حدّد كذلك سياسة عمر: مسحات الاستكشاف تُنظَّف بعد شهر، بينما تنفيذات الإنتاج والمقارنات المرجعيّة تبقى دائمًا. هذه الحدود البسيطة تجعل من MLflow أداة اتّخاذ قرار حقيقيّة لا سلّة مهملات ضخمة.
الوحدة التالية: AutoML — متى يُوفّر عليك عملًا حقيقيًّا، ومتى يُعطي حلًّا أسوأ من نموذجك اليدوي.