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

الوحدة 3 — أصول البيانات ومخازن البيانات

بيانات سلسلة متاجرنا موجودة في حساب تخزين مشترك: ملفّ CSV أسبوعي بمبيعات كلّ متجر ومنتج. الوحدة السابقة أعطتنا الحوسبة. تبقى المسألة: كيف تصل هذه الحوسبة إلى تلك البيانات بطريقة قابلة للتكرار ومُصدَّرة وآمنة؟ الجواب في مفهومين: مخزن البيانات وأصل البيانات.

مخزن البيانات (Datastore)

مخزن البيانات مرجع محفوظ في مساحة العمل يشير إلى حاوية خارجية: Blob Storage، أو ADLS Gen2، أو ملفّ Azure Files. يحمل معلومات الاتّصال (اسم الحساب، اسم الحاوية) وطريقة التصريح (هُويّة مُدارة، مفتاح، SAS).

لسلسلة متاجرنا:

az ml datastore create --file datastore.yml

مع محتوى datastore.yml:

$schema: https://azuremlschemas.azureedge.net/latest/azureBlob.schema.json
name: sales_blob
type: azure_blob
account_name: salesdatasa
container_name: raw-sales
credentials:
# لا مفاتيح: تستعمل مساحة العمل هُويّتها المُدارة

بترك credentials فارغة، تستعمل مساحة العمل هُويّتها المُدارة التي أعطينا لها في الوحدة 1 دور Storage Blob Data Reader. لا سرّ يمرّ عبر ملفّ، ولا تنتهي صلاحيّته فجأة يوم أحد.

أصل البيانات (Data Asset)

مخزن البيانات يُخبر Azure ML أين تُوجد البيانات، لكنّه لا يُشير إلى ملفّ أو مجلّد بعينه ولا إلى نسخة معيّنة. أصل البيانات يفعل ذلك، وهو مُصدَّر: كلّ رفع جديد ينتج إصدارًا جديدًا يُحتفَظ بالسابق.

ثلاثة أنواع مدعومة:

النوعمتىمثال
uri_fileملفّ واحدملفّ CSV، نموذج ONNX
uri_folderمجلّد كاملمجموعة صور، مجلّد Parquet
mltableجدول مُصرَّح عنهبيانات مُهيكلة تُقرأ بعمود معلوم

uri_file وuri_folder: الأبسط

az ml data create \
--name sales_weekly \
--version 2026.36 \
--path azureml://datastores/sales_blob/paths/2026/week-36/sales.csv \
--type uri_file

يستعمل الإصدار تسمية إنسانية معنوية (2026.36 للأسبوع 36 من 2026). في مهمّة التدريب، تُشير إلى هذا الإصدار بالضبط:

inputs={"sales": Input(type="uri_file", path="azureml:sales_weekly:2026.36")}

خمس أسابيع لاحقًا يستطيع أيّ عضو من الفريق إعادة إنتاج التدريب على نفس البيانات، لا على أحدث ملفّ في الحاوية.

MLTable: البيانات المُصرَّح عنها

MLTable أقوى بكثير من ملفّ أو مجلّد. هو مجلّد فيه ملفّ MLTable نصّي يُصرّح:

  • ما الملفّات المشاركة (نمط *.parquet)
  • بأيّ صيغة تُقرَأ (parquet, delimited_text, json_lines)
  • بأيّ تحويلات أوّلية (استخراج تاريخ، تجاهل عمود، تصفية)

مثال ملفّ MLTable لبيانات المبيعات الأسبوعية:

paths:
- pattern: ./2026/week-*/*.csv
transformations:
- read_delimited:
delimiter: ","
encoding: utf8
header: all_files_same_headers
- keep_columns: [store_id, product_id, week, units_sold, price]
- convert_column_types:
- columns: week
column_type: datetime
- columns: [units_sold, price]
column_type: float

الفائدة الحاسمة: الشيمة (schema) ثابتة. لو أضاف زميل عمودًا زائدًا في ملفّ الأسبوع القادم، لن يكسر تدريبنا. ولو غيّر فاصل الحقول، سيرفض MLTable قراءة السطر بدل قراءة أرقام مغلوطة بصمت.

عند تحميل MLTable في مهمّة:

import mltable
tbl = mltable.load("azureml:sales_table:2026.36")
df = tbl.to_pandas_dataframe()

df جدول pandas عادي، لكنّ العقد بين البيانات والتدريب مُوثَّق ومُصدَّر.

نمطا الوصول: mount مقابل download

عند تنفيذ مهمّة، تعرض Azure ML البيانات بأحد نمطين:

  • ro_mount: تُثبَّت الحاوية كنظام ملفّات للقراءة فقط. القراءة على الطلب. مفيدة لبيانات ضخمة لا تحتاج قراءتها كاملة.
  • download: تُنسَخ الملفّات إلى القرص المحلّي أوّلًا. أسرع للقراءة المتكرّرة، لكن يتطلّب فضاءً على العقدة.

لتدريب انحدار على 200 ميغابايت من CSV، download أنسب. لصور بحجم 500 غيغابايت في مهمّة رؤية، ro_mount وحده مقبول.

الفخّ: أصل غير مُصدَّر

اختيار --version latest أو ترك الإصدار للأداة يعني أنّ إعادة تدريب اليوم قد لا تنتج نموذج الأمس. لا شيء يحمي مسار التدقيق. دائمًا ثبّت الإصدار في الشفرة، وأطلق أصل بيانات جديد يدويًّا حين توجد بيانات جديدة تستحقّ إصدارًا.

المسار الذهبي

مخزن بيانات نحو ADLS Gen2 + MLTable مُصدَّر مع شيمة صارمة + هُويّة مُدارة بدل مفاتيح. هذه الثلاثية تحلّ 90% من مشاكل البيانات في المشاريع الحقيقية على Azure ML.

الخلاصة

  • مخزن البيانات مرجع محفوظ للحاوية الخارجية، يستعمل الهُويّة المُدارة لا المفاتيح.
  • أصل البيانات مُصدَّر، من ثلاثة أنواع: uri_file، uri_folder، mltable.
  • MLTable يُصرّح الشيمة والتحويلات الأوّلية، ويحمي من الانجرافات الصامتة.
  • في المهمّة، ro_mount للبيانات الضخمة المقروءة قليلًا، وdownload للبيانات الصغيرة المقروءة كثيرًا.
  • ثبّت الإصدار في الشفرة دائمًا، لا latest.

الوحدة التالية: البيئات — كيف نصف بايثون والمكتبات التي تنفّذ تدريبنا بصورة قابلة للتكرار على أيّ عنقود.