الاستعلام عن التجارب وعمليات التشغيل ومقارنتها من خلال MLflow

يمكن الاستعلام عن التجارب والمهام (أو عمليات التشغيل) في Azure التعلم الآلي باستخدام MLflow. لا تحتاج إلى تثبيت أي SDK محددة لإدارة ما يحدث داخل وظيفة التدريب، مما يؤدي إلى إنشاء انتقال أكثر سلاسة بين عمليات التشغيل المحلية والسحابة عن طريق إزالة التبعيات الخاصة بالسحابة. في هذه المقالة، ستتعلم كيفية الاستعلام عن التجارب وتشغيلها ومقارنتها في مساحة العمل باستخدام Azure التعلم الآلي وMLflow SDK في Python.

يسمح لك MLflow بما يلي:

  • إنشاء التجارب والاستعلام عنها وحذفها والبحث عن تجارب في مساحة عمل.
  • الاستعلام عن عمليات التشغيل وحذفها والبحث فيها في مساحة عمل.
  • تعقب واسترداد المقاييس والمعلمات والبيانات الاصطناعية والنماذج من عمليات التشغيل.

للحصول على مقارنة مفصلة بين MLflow مفتوح المصدر وMLflow عند الاتصال ب Azure التعلم الآلي، راجع مصفوفة الدعم للاستعلام عن عمليات التشغيل والتجارب في Azure التعلم الآلي.

إشعار

لا يوفر Azure التعلم الآلي Python SDK v2 قدرات تسجيل أو تعقب أصلية. هذا لا ينطبق فقط على التسجيل، ولكن أيضًا على الاستعلام عن المقاييس المسجلة. بدلا من ذلك، استخدم MLflow لإدارة التجارب وتشغيلها. توضح هذه المقالة كيفية استخدام MLflow لإدارة التجارب وتشغيلها في Azure التعلم الآلي.

يمكنك أيضا الاستعلام عن التجارب والبحث وتشغيلها باستخدام MLflow REST API. راجع استخدام MLflow REST مع Azure التعلم الآلي للحصول على مثال حول كيفية استهلاكه.

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

  • قم بتثبيت حزمة mlflow MLflow SDK والمكون الإضافي Azure التعلم الآلي ل MLflow azureml-mlflow.

    pip install mlflow azureml-mlflow
    

    تلميح

    يمكنك استخدام الحزمة mlflow-skinny ، وهي حزمة MLflow خفيفة الوزن دون تخزين SQL أو الخادم أو واجهة المستخدم أو تبعيات علم البيانات. mlflow-skinny يوصى به للمستخدمين الذين يحتاجون في المقام الأول إلى قدرات تتبع وتسجيل MLflow دون استيراد مجموعة كاملة من الميزات بما في ذلك عمليات النشر.

  • مساحة عمل للتعلم الآلي من Microsoft Azure. يمكنك إنشاء واحد باتباع البرنامج التعليمي إنشاء موارد التعلم الآلي.

  • إذا كنت تقوم بإجراء تعقب عن بعد (أي تعقب التجارب التي تعمل خارج Azure التعلم الآلي)، فبادر بتكوين MLflow للإشارة إلى تعقب URI لمساحة عمل Azure التعلم الآلي. لمزيد من المعلومات حول كيفية توصيل MLflow بمساحة العمل الخاصة بك، راجع تكوين MLflow ل Azure التعلم الآلي.

تجارب البحث والاستعلام

استخدم MLflow للبحث عن التجارب داخل مساحة العمل الخاصة بك. انظر الأمثلة التالية:

  • الحصول على جميع التجارب النشطة:

    mlflow.search_experiments()
    

    إشعار

    في الإصدارات القديمة من MLflow (<2.0)، استخدم الأسلوب mlflow.list_experiments() بدلا من ذلك.

  • احصل على جميع التجارب، بما في ذلك أرشفتها:

    from mlflow.entities import ViewType
    
    mlflow.search_experiments(view_type=ViewType.ALL)
    
  • احصل على تجربة معينة بالاسم:

    mlflow.get_experiment_by_name(experiment_name)
    
  • احصل على تجربة معينة حسب المعرف:

    mlflow.get_experiment('1234-5678-90AB-CDEFG')
    

تجارب البحث

search_experiments() يتيح لك الأسلوب، المتاح منذ Mlflow 2.0، البحث عن التجارب التي تطابق المعايير باستخدام filter_string.

  • استرداد تجارب متعددة استنادا إلى معرفاتها:

    mlflow.search_experiments(filter_string="experiment_id IN ("
        "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')"
    )
    
  • استرداد جميع التجارب التي تم إنشاؤها بعد وقت معين:

    import datetime
    
    dt = datetime.datetime(2022, 6, 20, 5, 32, 48)
    mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")
    
  • استرداد جميع التجارب باستخدام علامة معينة:

    mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
    

تشغيل الاستعلام والبحث

يتيح لك MLflow البحث عن عمليات تشغيل داخل أي تجربة، بما في ذلك تجارب متعددة في نفس الوقت. يقبل الأسلوب mlflow.search_runs() الوسيطة experiment_ids و experiment_name للإشارة إلى التجارب التي تريد البحث فيها. يمكنك أيضا الإشارة إلى search_all_experiments=True ما إذا كنت تريد البحث عبر جميع التجارب في مساحة العمل:

  • حسب اسم التجربة:

    mlflow.search_runs(experiment_names=[ "my_experiment" ])
    
  • حسب معرّف التجربة:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])
    
  • البحث عبر جميع التجارب في مساحة العمل:

    mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
    

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

هام

إذا experiment_idsلم يتم تحديد أو experiment_namesأو search_all_experiments ، فسيبحث MLflow بشكل افتراضي في التجربة النشطة الحالية. يمكنك تعيين التجربة النشطة باستخدام mlflow.set_experiment().

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

  • معلومات أساسية عن عملية التشغيل.
  • المعلمات التي تحمل اسم العمود params.<parameter-name>.
  • المقاييس (آخر قيمة مسجلة لكل منها) مع اسم العمود metrics.<metric-name>.

يتم أيضا إرجاع جميع المقاييس والمعلمات عند تشغيل الاستعلام. ومع ذلك، بالنسبة للمقاييس التي تحتوي على قيم متعددة (على سبيل المثال، منحنى خسارة أو منحنى PR)، يتم إرجاع القيمة الأخيرة فقط من المقياس. إذا كنت تريد استرداد جميع قيم مقياس معين، فاستخدم الأسلوب mlflow.get_metric_history. راجع الحصول على المعلمات والمقاييس من التشغيل للحصول على مثال.

يتم تشغيل الطلب

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

  • يتم تشغيل الأمر حسب السمات، مثل start_time:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
                       order_by=["attributes.start_time DESC"])
    
  • يتم تشغيل الطلب وتحد من النتائج. يرجع المثال التالي آخر تشغيل فردي في التجربة:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       max_results=1, order_by=["attributes.start_time DESC"])
    
  • يتم تشغيل الأمر بواسطة السمة duration:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       order_by=["attributes.duration DESC"])
    

    تلميح

    attributes.durationغير موجود في MLflow OSS، ولكنه متوفر في Azure التعلم الآلي للراحة.

  • يتم تشغيل الترتيب حسب قيم المقياس:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)
    

    تحذير

    استخدام order_by مع التعبيرات التي metrics.*تحتوي على أو params.*أو tags.* في المعلمة order_by غير مدعوم حاليا. بدلا من ذلك، استخدم order_values الأسلوب من Pandas كما هو موضح في المثال.

تشغيل عامل التصفية

يمكنك أيضًا البحث عن عملية تشغيل بتركيبة معينة في المعلمات التشعبية باستخدام المعلمة filter_string. يستخدم params للوصول إلى معلمات التشغيل، metrics والوصول إلى المقاييس المسجلة في التشغيل، والوصول attributes إلى تفاصيل معلومات التشغيل. يدعم MLflow التعبيرات المرتبطة بالكلمة الأساسية AND (بناء الجملة لا يدعم OR):

  • يتم تشغيل البحث استنادا إلى قيمة المعلمة:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="params.num_boost_round='100'")
    

    تحذير

    يتم دعم عوامل =التشغيل و likeو != فقط للتصفية parameters.

  • يتم تشغيل البحث استنادا إلى قيمة المقياس:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="metrics.auc>0.8")
    
  • يتم تشغيل البحث باستخدام علامة معينة:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="tags.framework='torch'")
    
  • عمليات تشغيل البحث التي أنشأها مستخدم معين:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.user_id = 'John Smith'")
    
  • عمليات تشغيل البحث التي فشلت. راجع عوامل التصفية التي يتم تشغيلها حسب الحالة للحصول على القيم المحتملة:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.status = 'Failed'")
    
  • يتم تشغيل البحث الذي تم إنشاؤه بعد وقت معين:

    import datetime
    
    dt = datetime.datetime(2022, 6, 20, 5, 32, 48)
    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string=f"attributes.creation_time > '{int(dt.timestamp())}'")
    

    تلميح

    بالنسبة للمفتاح attributes، يجب أن تكون القيم دائما سلاسل ومن ثم مرمزة بين علامات الاقتباس.

  • عمليات تشغيل البحث التي تستغرق أكثر من ساعة واحدة:

    duration = 360 * 1000 # duration is in milliseconds
    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string=f"attributes.duration > '{duration}'")
    

    تلميح

    attributes.durationغير موجود في MLflow OSS، ولكنه متوفر في Azure التعلم الآلي للراحة.

  • عمليات تشغيل البحث التي تحتوي على المعرف في مجموعة معينة:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
    

تصفية عمليات الشغل حسب الحالة

عند تصفية عمليات التشغيل حسب الحالة، يستخدم MLflow اصطلاحا مختلفا لتسمية الحالة المحتملة المختلفة للتشغيل مقارنة ب Azure التعلم الآلي. يعرض الجدول التالي القيم المحتملة:

حالة وظيفة Azure التعلم الآلي attributes.status في MLFlow المعنى
لم يبدأ Scheduled تم تلقي المهمة/التشغيل بواسطة Azure التعلم الآلي.
Queue Scheduled تمت جدولة الوظيفة/عملية التشغيل للتشغيل، لكنها لم تبدأ بعد.
اعداد Scheduled لم تبدأ المهمة/التشغيل بعد، ولكن تم تخصيص حساب لتنفيذها وهي تقوم بإعداد البيئة ومدخلاتها.
قيد التشغيل Running الوظيفة/عملية التشغيل قيد التنفيذ النشط حاليًا.
مكتمل Finished اكتملت المهمة/التشغيل دون أخطاء.
فشل Failed اكتملت المهمة/التشغيل مع وجود أخطاء.
تم الإلغاء Killed تم إلغاء المهمة/التشغيل من قبل المستخدم أو تم إنهاؤها بواسطة النظام.

مثال:

mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                   filter_string="attributes.status = 'Failed'")

الحصول على المقاييس والمعلمات والبيانات الاصطناعية والنماذج

يقوم الأسلوب search_runs بإرجاع Pandas Dataframe التي تحتوي على كمية محدودة من المعلومات بشكل افتراضي. يمكنك الحصول على كائنات Python إذا لزم الأمر، والتي قد تكون مفيدة للحصول على تفاصيل عنها. استخدم معلمة output_format للتحكم في كيفية إرجاع الإخراج:

runs = mlflow.search_runs(
    experiment_ids=[ "1234-5678-90AB-CDEFG" ],
    filter_string="params.num_boost_round='100'",
    output_format="list",
)

يمكن بعد ذلك الوصول إلى التفاصيل من العضو info. ويوضح النموذج التالي كيفية الحصول على run_id:

last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)

الحصول على المعلمات والمقاييس من التشغيل

عند إرجاع عمليات التشغيل باستخدام output_format="list"، يمكنك الوصول بسهولة إلى المعلمات باستخدام المفتاح data:

last_run.data.params

وبنفس الطريقة، يمكنك الاستعلام عن المقاييس:

last_run.data.metrics

بالنسبة إلى المقاييس التي تحتوي على قيم متعددة (على سبيل المثال، منحنى خسارة أو منحنى طلب سحب)، يتم إرجاع آخر قيمة مسجلة فقط للمقياس. إذا كنت تريد استرداد جميع قيم مقياس معين، فاستخدم الأسلوب mlflow.get_metric_history. يتطلب هذا الأسلوب استخدام MlflowClient:

client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")

الحصول على البيانات الاصطناعية من تشغيل

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

client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")

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

file_path = mlflow.artifacts.download_artifacts(
    run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)

إشعار

في الإصدارات القديمة من MLflow (<2.0)، استخدم الأسلوب MlflowClient.download_artifacts() بدلا من ذلك.

الحصول على نماذج من التشغيل

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

artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
  run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)

يمكنك بعد ذلك تحميل النموذج مرة أخرى من البيانات الاصطناعية التي تم تنزيلها باستخدام الدالة load_model النموذجية في مساحة الاسم الخاصة بالمكهية. يستخدم xgboostالمثال التالي :

model = mlflow.xgboost.load_model(model_local_path)

يسمح لك MLflow أيضا بإجراء كلتا العمليتين في وقت واحد، وتنزيل النموذج وتحميله في تعليمات واحدة. يقوم MLflow بتنزيل النموذج إلى مجلد مؤقت وتحميله من هناك. يستخدم الأسلوب load_model تنسيق URI للإشارة من حيث يجب استرداد النموذج. في حالة تحميل نموذج من عملية تشغيل، تكون بنية URI كما يلي:

model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")

تلميح

للاستعلام عن النماذج المسجلة في سجل النموذج وتحميلها، راجع إدارة سجلات النماذج في Azure التعلم الآلي باستخدام MLflow.

الحصول على عمليات تشغيل تابعة (متداخلة)

يدعم MLflow مفهوم عمليات تشغيل عنصر تابع (متداخلة). هذه التشغيلات مفيدة عندما تحتاج إلى تدوير إجراءات التدريب التي يجب تتبعها بشكل مستقل عن عملية التدريب الرئيسية. تعد عمليات تحسين ضبط المعلمات الفائقة أو مسارات Azure التعلم الآلي أمثلة نموذجية للوظائف التي تنشئ عمليات تشغيل تابعة متعددة. يمكنك الاستعلام عن جميع عمليات التشغيل التابعة لعملية تشغيل معينة باستخدام علامة الخاصية mlflow.parentRunId، والتي تحتوي على معرّف عملية التشغيل لعملية التشغيل الأصلية.

hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
    filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)

مقارنة الوظائف والنماذج في Azure التعلم الآلي studio (معاينة)

لمقارنة وتقييم جودة وظائفك ونماذجك في Azure التعلم الآلي studio، استخدم لوحة المعاينة لتمكين الميزة. بمجرد التمكين، يمكنك مقارنة المعلمات والمقاييس والعلامات بين الوظائف و/أو النماذج التي حددتها.

هام

العناصر التي تم وضع علامة عليها (إصدار أولي) في هذه المقالة موجودة حالياً في الإصدار الأولي العام. تتوفر نسخة الإصدار الأولي دون اتفاقية مستوى الخدمة، ولا يوصى به لأحمال عمل الإنتاج. بعض الميزات ربما لا تكون مدعمة أو بها بعض القدرات المقيدة. لمزيد من المعلومات، راجع ⁧⁩شروط الاستخدام التكميلية لمعاينات Microsoft Azure⁧⁩.

لقطة شاشة للوحة المعاينة توضح كيفية مقارنة الوظائف والنماذج في Azure التعلم الآلي studio.

يوضح MLflow مع دفاتر التعلم الآلي من Microsoft Azure المفاهيم المقدمة في هذه المقالة وتوسيعها.

مصفوفة دعم للاستعلام عن عمليات التشغيل والتجارب

يعرض MLflow SDK عدة طرق لاسترداد عمليات التشغيل، بما في ذلك خيارات للتحكم في ما يتم إرجاعه وكيفية إرجاعه. استخدم الجدول التالي للتعرف على أي من هذه الطرق مدعومة حاليًا في MLflow عند الاتصال بالتعلم الآلي من Microsoft Azure:

ميزة مدعومة من قبل MLflow مدعوم من قبل Azure التعلم الآلي
ترتيب عمليات التشغيل حسب السمات
ترتيب عمليات التشغيل حسب المقاييس 1
ترتيب عمليات التشغيل حسب المعلمات 1
ترتيب عمليات التشغيل حسب العلامات 1
تصفية عمليات التشغيل حسب السمات
تصفية عمليات التشغيل حسب المقاييس
تصفية عمليات التشغيل حسب المقاييس ذات الأحرف الخاصة (تم التجاوز)
تصفية عمليات التشغيل حسب المعلمات
تصفية عمليات التشغيل حسب العلامات
تصفية عمليات التشغيل باستخدام أدوات المقارنة الرقمية (المقاييس)، بما في ذلك = و!= و> و>= و< و<=
تصفية عمليات التشغيل باستخدام أدوات مقارنة السلسلة (المعلمات والعلامات والسمات): = و!= 2
تصفية عمليات التشغيل باستخدام أدوات مقارنة السلسلة (المعلمات والعلامات والسمات): LIKE/ILIKE
تصفية عمليات التشغيل باستخدام أدوات المقارنة AND
تصفية عمليات التشغيل باستخدام أدوات المقارنة OR
إعادة تسمية التجارب

إشعار

  • 1 تحقق من القسم يتم تشغيل الطلب للحصول على إرشادات وأمثلة حول كيفية تحقيق نفس الوظيفة في Azure التعلم الآلي.
  • 2!= للعلامات غير المدعومة.