سجل المقاييس والمعلمات والملفات باستخدام MLflow

ينطبق على: Python SDK azure-ai-ml v2 (الحالي)

يدعم التعلم الآلي من Azure تسجيل التجارب وتتبعها باستخدام تتبع MLflow. يمكنك تسجيل النماذج والمقاييس والمعلمات والبيانات الاصطناعية باستخدام MLflow، إما محليا على الكمبيوتر أو في بيئة سحابية.

هام

على عكس Azure التعلم الآلي SDK v1، لا توجد وظيفة تسجيل في Azure التعلم الآلي SDK ل Python (v2). إذا استخدمت Azure التعلم الآلي SDK v1 من قبل، نوصيك باستغلال MLflow لتتبع التجارب. راجع ترحيل التسجيل من SDK v1 إلى MLflow للحصول على إرشادات محددة.

يمكن أن تساعدك السجلات في تشخيص الأخطاء والتحذيرات أو تتبع مقاييس الأداء مثل المعلمات وأداء النموذج. توضح هذه المقالة كيفية تمكين تسجيل الدخول في السيناريوهات التالية:

  • سجل المقاييس والمعلمات والنماذج عند إرسال المهام.
  • تعقب عمليات التشغيل عند التدريب بشكل تفاعلي.
  • سجل المقاييس بشكل غير متزامن.
  • عرض معلومات تشخيصية حول التدريب.

تلميح

توضح لك هذه المقالة كيفية مراقبة عملية التدريب النموذجية. إذا كنت مهتما بمراقبة استخدام الموارد والأحداث من Azure التعلم الآلي، مثل الحصص النسبية أو مهام التدريب المكتملة أو عمليات نشر النموذج المكتملة، فشاهد مراقبة Azure التعلم الآلي.

المتطلبات الأساسية

  • امتلاك Machine Learning workspace. إذا لم يكن لديك واحد، فشاهد إنشاء موارد مساحة العمل.

  • يجب أن يكون لديك mlflow حزم و azureml-mlflow مثبتة. إذا لم تفعل ذلك، استخدم الأمر التالي لتثبيته في بيئة التطوير الخاصة بك:

    pip install mlflow azureml-mlflow
    

    إشعار

    للتسجيل غير المتزامن للمقاييس، تحتاج إلى الإصدار MLflow 2.8.0+ والإصدار azureml-mlflow 1.55+.

  • إذا كنت تقوم بالتتبع عن بعد (تعقب التجارب التي تعمل خارج Azure التعلم الآلي)، فقم بتكوين MLflow لتتبع التجارب. لمزيد من المعلومات، راجع تكوين MLflow ل Azure التعلم الآلي.

  • لتسجيل المقاييس والمعلمات والبيانات الاصطناعية والنماذج في تجاربك في Azure التعلم الآلي باستخدام MLflow، ما عليك سوى استيراد MLflow إلى البرنامج النصي الخاص بك:

    import mlflow
    

تكوين التجارب

ينظم MLflow المعلومات في التجارب وتشغيلها (في Azure التعلم الآلي، تسمى عمليات التشغيل الوظائف). هناك بعض الاختلافات في كيفية تكوينها اعتمادا على كيفية تشغيل التعليمات البرمجية الخاصة بك:

عند التدريب بشكل تفاعلي، كما هو الحال في Jupyter Notebook، استخدم النمط التالي:

  1. قم بإنشاء التجربة النشطة أو تعيينها.
  2. بدء المهمة.
  3. استخدم أساليب التسجيل لتسجيل مقاييس ومعلومات أخرى.
  4. إنهاء المهمة.

على سبيل المثال، تقوم القصاصة البرمجية التالية بتكوين التجربة، ثم تسجل أثناء مهمة:

import mlflow
# Set the experiment
mlflow.set_experiment("mlflow-experiment")

# Start the run
mlflow_run = mlflow.start_run()
# Log metrics or other information
mlflow.log_metric('mymetric', 1)
# End run 
mlflow.end_run()

تلميح

من الناحية الفنية، لا يتعين عليك الاتصال start_run() لأنه يتم إنشاء تشغيل جديد إذا لم يكن أحدها موجودا وقمت باستدعاء واجهة برمجة تطبيقات تسجيل. في هذه الحالة، يمكنك استخدام mlflow.active_run() لاسترداد التشغيل المستخدم حاليا. لمزيد من المعلومات، راجع mlflow.active_run().

كما يمكنك استخدام نموذج مدير السياق:

import mlflow
mlflow.set_experiment("mlflow-experiment")

# Start the run, log metrics, end the run
with mlflow.start_run() as run:
    # Run started when context manager is entered, and ended when context manager exits
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)
    pass

عند بدء تشغيل جديد باستخدام mlflow.start_run، قد يكون من المفيد الإشارة إلى المعلمة run_name، والتي تترجم بعد ذلك إلى اسم التشغيل في واجهة مستخدم Azure التعلم الآلي وتساعدك على تحديد التشغيل بشكل أسرع:

with mlflow.start_run(run_name="iris-classifier-random-forest") as run:
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)

لمزيد من المعلومات حول واجهات برمجة التطبيقات لتسجيل MLflow، راجع مرجع MLflow.

معلمات السجل

يدعم MLflow معلمات التسجيل المستخدمة من قبل تجاربك. قد تكون المعلمات من أي نوع، ويمكن تسجيلها باستخدام بناء الجملة التالي:

mlflow.log_param("num_epochs", 20)

يوفر MLflow أيضا طريقة ملائمة لتسجيل معلمات متعددة عن طريق الإشارة إليها جميعًا باستخدام قاموس. كما يمكن للعديد من الأطر أيضا تمرير المعلمات إلى النماذج باستخدام القواميس، وبالتالي فهذه طريقة ملائمة لتسجيلها في التجربة.

params = {
    "num_epochs": 20,
    "dropout_rate": .6,
    "objective": "binary_crossentropy"
}

mlflow.log_params(params)

سجل المقاييس

دائما ما تكون المقاييس، على عكس المعلمات، رقمية، ويمكن تسجيلها إما بشكل متزامن أو غير متزامن. عند تسجيل المقاييس، تكون متاحة على الفور للاستهلاك عند إرجاع المكالمة. يصف الجدول التالي كيفية تسجيل أنواع رقمية معينة:

القيمة المسجلة مثال على التعليمات البرمجية ملاحظات
قم بتسجيل قيمة رقمية (int أو حُر) mlflow.log_metric("my_metric", 1)
قم بتسجيل قيمة عددية (عدد صحيح أو عدد عشري) بمرور الوقت mlflow.log_metric("my_metric", 1, step=1) استخدم المعلمة step للإشارة إلى الخطوة التي تقوم فيها بتسجيل قيمة المقياس. يمكن أن تكون أي عدد صحيح. يتم تعيينه افتراضيًا إلى الصفر.
قم بتسجيل قيمة منطقية mlflow.log_metric("my_metric", 0) 0 = صحيح، 1 = خطأ

هام

اعتبارات الأداء: إذا كنت بحاجة إلى تسجيل مقاييس متعددة (أو قيم متعددة لنفس المقياس)، فتجنب إجراء استدعاءات إلى mlflow.log_metric في حلقات. يمكن تحقيق أداء أفضل باستخدام التسجيل غير المتزامن مع mlflow.log_metric("metric1", 9.42, synchronous=False) أو عن طريق تسجيل دفعة من المقاييس.

مقاييس السجل بشكل غير متزامن

يسمح MLflow أيضا بتسجيل المقاييس بطريقة غير متزامنة. يعد تسجيل المقاييس غير المتزامن مفيدا بشكل خاص في الحالات ذات الإنتاجية العالية حيث قد تعمل وظائف التدريب الكبيرة مع مئات عقد الحوسبة وتحاول تسجيل المقاييس بشكل متزامن.

يسمح لك تسجيل المقاييس غير المتزامن بتسجيل المقاييس والانتظار حتى يتم استيعابها قبل محاولة قراءتها مرة أخرى. يتوسع هذا النهج إلى إجراءات التدريب الكبيرة التي تسجل مئات الآلاف من قيم القياس.

سجلات MLflow المقاييس بشكل متزامن بشكل افتراضي، ومع ذلك، يمكنك تغيير هذا السلوك في أي وقت:

import mlflow

mlflow.config.enable_async_logging()

يمكن تعيين نفس الخاصية، باستخدام متغير بيئة:

export MLFLOW_ENABLE_ASYNC_LOGGING=True

لتسجيل مقاييس معينة بشكل غير متزامن، استخدم واجهة برمجة تطبيقات تسجيل MLflow كما تفعل عادة، ولكن أضف المعلمة synchronous=Falseالإضافية .

import mlflow

with mlflow.start_run():
    # (...)
    mlflow.log_metric("metric1", 9.42, synchronous=False)
    # (...)

عند استخدام log_metric(synchronous=False)، يتم إرجاع عنصر التحكم تلقائيا إلى المتصل بمجرد قبول العملية؛ ومع ذلك، لا يوجد ضمان في تلك اللحظة لاستمرار قيمة المقياس.

هام

حتى مع synchronous=False، يضمن Azure التعلم الآلي ترتيب المقاييس.

إذا كنت بحاجة إلى الانتظار حتى تستمر قيمة معينة في الخلفية، يمكنك استخدام عملية القياس التي تم إرجاعها للانتظار عليها، كما هو موضح في المثال التالي:

import mlflow

with mlflow.start_run():
    # (...)
    run_operation = mlflow.log_metric("metric1", 9.42, synchronous=False)
    # (...)
    run_operation.wait()
    # (...)

يمكنك تسجيل مقياس واحد بشكل غير متزامن في كل مرة أو تسجيل دفعة من المقاييس، كما هو موضح في المثال التالي:

import mlflow
import time
from mlflow.entities import Metric

with mlflow.start_run() as current_run:
    mlflow_client = mlflow.tracking.MlflowClient()

    metrics = {"metric-0": 3.14, "metric-1": 6.28}
    timestamp = int(time.time() * 1000)
    metrics_arr = [Metric(key, value, timestamp, 0) for key, value in metrics.items()]

    run_operation = mlflow_client.log_batch(
        run_id=current_run.info.run_id,
        metrics=metrics_arr,
        synchronous=False,
    )

wait() تتوفر العملية أيضا عند تسجيل دفعة من المقاييس:

run_operation.wait()

لا يتعين عليك استدعاء wait() إجراءاتك الروتينية إذا لم تكن بحاجة إلى الوصول الفوري إلى قيم القياس. ينتظر Azure التعلم الآلي تلقائيا عندما تكون المهمة على وشك الانتهاء، لمعرفة ما إذا كان هناك أي مقياس معلق يجب استمراره. بحلول وقت اكتمال مهمة في Azure التعلم الآلي، يتم ضمان استمرار جميع المقاييس.

منحنيات السجل أو قائمة القيم

يمكن تسجيل المنحنيات (أو قائمة القيم الرقمية) باستخدام MLflow عن طريق تسجيل نفس المقياس عدة مرات. يوضح المثال التالي كيفية القيام بذلك:

list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
from mlflow.entities import Metric
from mlflow.tracking import MlflowClient
import time

client = MlflowClient()
client.log_batch(mlflow.active_run().info.run_id, 
                 metrics=[Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log])

صور السجل

يدعم MLflow طريقتين لتسجيل الصور. تستمر كلتا الطريقتين في الصورة المحددة كقطعة اصطناعية داخل التشغيل.

القيمة المسجلة مثال على التعليمات البرمجية ملاحظات
سجل المقاييس غير المتداخلة أو عناصر صورة PIL mlflow.log_image(img, "figure.png") img يجب أن يكون مثيلا لـ numpy.ndarray أو PIL.Image.Image. figure.png هو اسم البيانات الاصطناعية التي تم إنشاؤها داخل التشغيل. لا يجب أن يكون ملفًا موجودًا.
سجل matlotlib أو ملف صورة mlflow.log_figure(fig, "figure.png") figure.png هو اسم البيانات الاصطناعية التي تم إنشاؤها داخل التشغيل. لا يجب أن يكون ملفًا موجودًا.

ملفات السجل

بشكل عام، تسمى الملفات في MLflow البيانات الاصطناعية. يمكنك تسجيل البيانات الاصطناعية بطرق متعددة في Mlflow:

القيمة المسجلة مثال على التعليمات البرمجية ملاحظات
تسجيل نص في ملف نصي mlflow.log_text("text string", "notes.txt") يستمر النص داخل التشغيل في ملف نصي بالاسم notes.txt.
تسجيل القواميس كملفات JSON وYAML mlflow.log_dict(dictionary, "file.yaml" dictionary هو كائن قاموس يحتوي على كافة البنية التي تريد الاحتفاظ بها كملف JSON أو YAML.
تسجيل ملف مبسط موجود بالفعل mlflow.log_artifact("path/to/file.pkl") يتم تسجيل الملفات دائمًا في جذر التشغيل. إذا تم توفير artifact_path، فسيتم تسجيل الملف في مجلد كما هو موضح في تلك المعلمة.
تسجيل جميع البيانات الاصطناعية في مجلد موجود mlflow.log_artifacts("path/to/folder") يتم نسخ بنية المجلد إلى التشغيل، ولكن المجلد الجذر المشار إليه غير مضمن.

تلميح

عند تسجيل الملفات الكبيرة باستخدام log_artifact أو log_model، قد تواجه أخطاء انتهاء المهلة قبل اكتمال تحميل الملف. ضع في اعتبارك زيادة قيمة المهلة عن طريق ضبط متغير AZUREML_ARTIFACTS_DEFAULT_TIMEOUTالبيئة . القيمة الافتراضية هي 300 (ثانية).

نماذج السجل

يقدم MLflow مفهوم النماذج كطريقة لحزم جميع البيانات الاصطناعية المطلوبة لنموذج معين للعمل. تعد النماذج في MLflow دائمًا مجلدًا به عدد عشوائي من الملفات، اعتمادًا على إطار العمل المستخدم لإنشاء النموذج. تتمتع نماذج التسجيل بميزة تتبع جميع عناصر النموذج ككيان واحد يمكن تسجيله ثم نشره. علاوة على ذلك، تتمتع نماذج MLflow بميزة النشر بدون تعليمات برمجية ويمكن استخدامها مع لوحة معلومات الذكاء الاصطناعي المسؤولة في الاستوديو. لمزيد من المعلومات، راجع من البيانات الاصطناعية إلى النماذج في MLflow.

لحفظ النموذج من تشغيل التدريب، استخدم واجهة برمجة التطبيقات log_model() لإطار العمل الذي تعمل معه. على سبيل المثال، mlflow.sklearn.log_model(). لمزيد من المعلومات، راجع تسجيل نماذج MLflow. لترحيل النماذج الموجودة إلى MLflow، راجع تحويل النماذج المخصصة إلى MLflow.

تلميح

عند تسجيل نماذج كبيرة، قد تواجه الخطأ Failed to flush the queue within 300 seconds. عادة ما يعني أن العملية تنتهي قبل اكتمال تحميل البيانات الاصطناعية للنموذج. ضع في اعتبارك زيادة قيمة المهلة عن طريق ضبط متغير AZUREML_ARTIFACTS_DEFAULT_TIMEOUTالبيئة .

التسجيل التلقائي

باستخدام Azure التعلم الآلي وMLflow، يمكن للمستخدمين تسجيل المقاييس ومعلمات النموذج وبيانات النموذج الاصطناعية تلقائيا عند تدريب نموذج. يقرر كل إطار عمل ما يجب تتبعه تلقائيًا نيابة عنك. تُدعم مجموعة متنوعة من مكتبات التعلم الآلي الشائعة. تعرف على المزيد بشأن التسجيل التلقائي باستخدام MLflow.

لتمكين التسجيل التلقائي، قم بإدراج التعليمات البرمجية التالية قبل التعليمات البرمجية للتدريب:

mlflow.autolog()

تلميح

يمكنك التحكم في ما يتم تسجيله تلقائيا باستخدام autolog. على سبيل المثال، إذا كنت تشير إلى mlflow.autolog(log_models=False)، فإن MLflow يسجل كل شيء باستثناء النماذج نيابة عنك. يكون هذا التحكم مفيدًا في الحالات التي تريد فيها تسجيل النماذج يدويًا ولكن لا تزال تتمتع بالتسجيل التلقائي للمقاييس والمعلمات. لاحظ أيضا أن بعض أطر العمل قد تعطل التسجيل التلقائي للنماذج إذا تجاوز النموذج المدرب حدودا محددة. يعتمد هذا السلوك على النكهة المستخدمة ونوصي بعرض الوثائق إذا كانت هذه هي حالتك.

عرض معلومات حول الوظائف أو عمليات التشغيل باستخدام MLflow

يمكنك عرض المعلومات المسجلة باستخدام MLflow من خلال كائن MLflow.entities.Run:

import mlflow

run = mlflow.get_run(run_id="<RUN_ID>")

بإمكانك عرض المقاييس والمعلمات والعلامات للتشغيل في حقل البيانات لكائن التشغيل.

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

إشعار

يرجع قاموس المقاييس الموجود بواسطة mlflow.get_run وmlflow.search_runs فقط أحدث قيمة مسجلة لاسم مقياس معين. على سبيل المثال، إذا قمت بتسجيل مقياس يسمى iteration عدة مرات بقيم، 1، ثم 2، ثم 3، ثم 4، يتم إرجاع 4 فقط عند استدعاء run.data.metrics['iteration'].

للحصول على جميع المقاييس المسجلة لاسم قياس معين، يمكنك استخدام MlFlowClient.get_metric_history() كما هو موضح في مثال الحصول على params والمقاييس من التشغيل.

تلميح

يمكن لـ MLflow استرداد المقاييس والمعلمات من عمليات تشغيل متعددة في نفس الوقت، ما يسمح بإجراء مقارنات سريعة عبر إصدارات تجريبية متعددة. لمعرفة المزيد، راجع الاستعلام عن التجارب وتشغيلها باستخدام MLflow.

يمكن ل MLflow الاستعلام عن أي أداة مسجلة بواسطة تشغيل. لا يمكن الوصول إلى البيانات الاصطناعية باستخدام عنصر التشغيل نفسه ويجب استخدام عميل MLflow بدلاً من ذلك:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("<RUN_ID>")

يسرد هذا الأسلوب جميع البيانات الاصطناعية التي تم تسجيلها في التشغيل، ولكنها تظل مخزنة في مخزن البيانات الاصطناعية (تخزين Azure التعلم الآلي). لتنزيل أي منها، استخدم الأسلوب download_artifact:

file_path = client.download_artifacts("<RUN_ID>", path="feature_importance_weight.png")

لمزيد من المعلومات، يرجى الرجوع إلى الحصول على المقاييس والمعلمات والبيانات الاصطناعية والنماذج.

عرض معلومات حول الوظائف أو عمليات التشغيل في الاستوديو

يمكنك استعراض سجلات المهمة المكتملة، بما في ذلك المقاييس المسجلة، في استوديو التعلم الآلي من Microsoft Azure.

انتقل إلى علامة التبويب المهام . لعرض جميع مهامك في مساحة العمل عبر التجارب، حدد علامة التبويب جميع المهام . يمكنك التنقل لأسفل حول المهام لتجارب معينة عن طريق تطبيق عامل تصفية التجربة في شريط القوائم العلوي. حدد المهمة المهمة لإدخال طريقة عرض التفاصيل، ثم حدد علامة التبويب Metrics .

حدد المقاييس المسجلة لعرض المخططات في الجانب الأيمن. يمكنك تخصيص المخططات عن طريق تطبيق التجانس أو تغيير اللون أو رسم مقاييس متعددة على رسم بياني واحد. يمكنك أيضًا تغيير حجم التخطيط وإعادة ترتيبه كما تريد. بعد إنشاء طريقة العرض المطلوبة، يمكنك حفظها لاستخدامها في المستقبل ومشاركتها مع زملائك في الفريق باستخدام ارتباط مباشر.

لقطة شاشة لعرض المقاييس.

عرض سجلات التشخيص وتنزيلها

تعد ملفات السجل موردا أساسيا لتصحيح أخطاء أحمال عمل Azure التعلم الآلي. بعد إرسال وظيفة تدريبية، انتقل إلى جولة محددة لعرض سجلاتها ومخرجاتها:

  1. انتقل إلى علامة تبويب Jobs.
  2. قم بتحديد runID لتشغيل معين.
  3. حدد المخرجات والسجلات الموجود في أعلى الصفحة.
  4. قم بتحديد تنزيل الكل لتنزيل جميع سجلاتك في مجلد مضغوط.
  5. يمكنك أيضا تنزيل ملفات سجل فردية عن طريق اختيار ملف السجل وتحديد تنزيل

لقطة شاشة من قسم الإخراج والسجلات للتشغيل.

مجلد سجل مستخدم

يتضمن هذا المجلد على معلومات حول السجلات التي أنشأها المستخدم. هذا المجلد مفتوح بشكل افتراضي، ويتم تحديد سجل std_log.txt. std_log.txt هو المكان الذي تظهر فيه سجلات التعليمات البرمجية (على سبيل المثال، عِبارات الطباعة). يحتوي هذا الملف على stdout تسجيل وstderr سجلات من برنامج التحكم النصي وبرنامج التدريب النصي، واحد لكل عملية. في معظم الحالات، يمكنك مراقبة السجلات هنا.

مجلد سجلات النظام

يحتوي هذا المجلد على السجلات التي تم إنشاؤها بواسطة Azure التعلم الآلي ويتم إغلاقه بشكل افتراضي. السجلات التي تم إنشاؤها يتم تجميعها بواسطة النظام في مجلدات مختلفة، استنادا إلى مرحلة المهمة في وقت التشغيل.

مُجلدات أخرى

بالنسبة للتدريب على الوظائف على أنظمة مجموعات متعددة الحوسبة، توجد سجلات لكل عقدة IP. بنية كل عقدة هي نفس وظائف العقدة المفردة. يوجد مجلد سجلات آخر للتنفيذ الكلي وسجلات stderr وstdout.

يسجل التعلم الآلي من Microsoft Azure معلومات من مصادر مختلفة أثناء التدريب، مثل AutoML أو حاوية Docker التي تقوم بتشغيل مهمة التدريب. العديد من هذه السجلات لم يتم توثيقها. إذا واجهت مشاكل واتصلت بدعم Microsoft، فقد يتمكنوا من استخدام هذه السجلات أثناء استكشاف الأخطاء وإصلاحها.