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

الوحدة 4 — البيئات وصور الحاويات

المهمّة التي ستُدرِّب نموذج تنبّؤ الطلب تحتاج بايثون بإصدار معيّن، وpandas بإصدار محدَّد، وxgboost بإصدار متوافق، وربّما مكتبة داخلية لتحويلات الشركة. هذه الحزمة الكاملة هي البيئة. إن كانت غير مضبوطة أو غير مُصدَّرة، فإعادة تدريب النموذج بعد ستّة أشهر تُنتج نتائج مختلفة أو تفشل أصلًا. هذه الوحدة تُعالج هذا الأصل الصامت.

ما هي البيئة في Azure ML

بيئة Azure ML صورة حاوية Docker مسجَّلة في مساحة العمل. لكلّ مهمّة، تسحب العقدة هذه الصورة، تُشغّلها، وتنفّذ داخلها الشفرة. الصورة قد تكون:

  • منسّقة (Curated): صورة رسمية جاهزة تقدّمها Microsoft، مُحدَّثة ومختبَرة.
  • مخصّصة (Custom): صورة تبنيها بنفسك من ملفّ conda.yml أو Dockerfile.

اختيار النوع يحدّد سرعة الابتداء، حجم الصيانة، والدرجة التي تسيطر بها على المحتوى.

البيئات المنسّقة: خيار البداية

Microsoft تُصدر عشرات الصور المنسّقة، محدَّثة بأمان وأداء:

# داخل تعريف مهمّة تدريب
environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest

مثل هذه الصورة تحوي بايثون، scikit-learn، pandas، numpy، والمُدرِّج الضروري لتسجيل MLflow. تُستعمل مباشرة، دون بناء. تسحبها العقدة أسرع لأنّها مخزَّنة قرب مناطق Azure.

استعمالها المناسب:

  • المشاريع النموذجية التي لا تحتاج مكتبة نادرة
  • المرحلة الأولى من مشروع، قبل ثبات المتطلّبات

الحدّ الأكبر: لا تستطيع تعديلها. لو نقصت مكتبة، ينبغي بيئة مخصّصة.

البيئات المخصّصة عبر conda

الطريقة الأخفّ. تكتب ملفّ conda.yml يصف ما تحتاج:

# environments/forecast/conda.yml
name: forecast-env
channels: [conda-forge]
dependencies:
- python=3.11
- pip=24.2
- pip:
- azureml-mlflow==1.57.0
- mlflow==2.16.0
- pandas==2.2.2
- scikit-learn==1.5.2
- xgboost==2.1.1
- lightgbm==4.5.0

ثمّ تسجّل البيئة:

az ml environment create \
--name forecast-env \
--version 3 \
--conda-file environments/forecast/conda.yml \
--image mcr.microsoft.com/azureml/openmpi5.0-ubuntu24.04:latest

Azure ML يبني الصورة أوّل مرّة (تُنجَز حوالي 5 إلى 8 دقائق)، ثمّ تُخزَّن في Container Registry المرافق لمساحة العمل. المرّة الثانية، سحبها فوري.

قيّد الإصدارات دائمًا بـ==. علامة >= تعني أنّ إعادة البناء بعد شهر قد تجلب إصدارًا جديدًا يكسر التوافق بصمت. pip freeze بعد أوّل تشغيل ناجح، ثمّ ثبِّت.

البيئات المخصّصة عبر Dockerfile

إن احتجت مكتبات النظام (compiler C++، حزمة Debian، خطّ عربي لتقرير PDF)، فـconda.yml وحده لا يكفي. تكتب Dockerfile:

FROM mcr.microsoft.com/azureml/openmpi5.0-ubuntu24.04:latest

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libgomp1 \
fonts-noto-color-emoji \
&& rm -rf /var/lib/apt/lists/*

COPY conda.yml /tmp/conda.yml
RUN conda env update -n azureml_py310 -f /tmp/conda.yml && \
conda clean -a -y

ثمّ:

az ml environment create \
--name forecast-env \
--version 4 \
--build-context environments/forecast/

هذا يعطي سيطرة كاملة، بمقابل: صيانة أعلى، وأمان يقع عليك.

الإصدارات: القاعدة الذهبية

كلّ بيئة مُصدَّرة. لا تُعدّل بيئة موجودة أبدًا، بل تنشئ إصدارًا جديدًا. المهامّ الجارية القديمة تبقى مربوطة بإصدارها الأصلي، ولن تنكسر.

استرداد إصدار سابق:

az ml environment show --name forecast-env --version 3

الفخّ الصامت: مهمّة تدريب تربط الشفرة بـforecast-env:latest بدل forecast-env:3. بعد أشهر، latest يُشير إلى إصدار مختلف تمامًا، ومحاولة إعادة إنتاج نموذج الميلاد الأوّل مستحيلة. دائمًا ثبّت رقم الإصدار في تعريف المهمّة.

التخزين المؤقّت للطبقات

Dockerfile جيّد يستفيد من التخزين المؤقّت لطبقات Docker. ضع الأشياء الأقلّ تغيّرًا في الأعلى والأشياء الأكثر تغيّرًا في الأسفل. تعديل ملفّ conda.yml وحده يعيد بناء طبقاته فقط، لا طبقات النظام. هذا يُقصّر إعادة البناء من 8 دقائق إلى دقيقتين.

من يبني ماذا

عند إنشاء بيئة مخصّصة، Azure ML يبني الصورة على Container Instance مؤقّت أو AKS، ثمّ يسلّمها إلى Container Registry. البناء يدفع لبضع دقائق من الحوسبة — سعر مقبول جدًّا. مراقبة سجلّ البناء تكون في Studio تحت البيئة > إصدار > Build log.

البيئة غير المُصدَّرة

كتابة environment: forecast-env:latest في تعريف المهمّة هي المخاطرة الرقم واحد على استمرارية التدريب. اختر رقمًا صريحًا مثل :3، وحين تنتقل إلى إصدار جديد، حدّث الشفرة بوعي واختبر النموذج قبل الترقية في الإنتاج.

الخلاصة

  • بيئة Azure ML صورة Docker مسجَّلة في مساحة العمل، منسّقة أو مخصّصة.
  • ابدأ بـبيئة منسّقة إذا كفتك، ثمّ انتقل إلى conda.yml لمكتبات pip الخاصّة.
  • استعمل Dockerfile فقط عند الحاجة إلى مكتبات نظام أو ملفّات نظام.
  • ثبّت إصدارات المكتبات بـ==، وسمّ رقم إصدار البيئة في المهمّة، لا latest.
  • تخزين طبقات Docker يوفّر دقائق ثمينة عند كلّ إعادة بناء.

الوحدة التالية: مهامّ التدريب — كيف نُطلق عملية حسابية حقيقية على الحوسبة والبيانات والبيئة التي بنيناها.