مفاهيم Hyperopt

توضح هذه المقالة بعض المفاهيم التي تحتاج إلى معرفتها لاستخدام Hyperopt الموزع.

في هذا القسم:

للحصول على أمثلة توضح كيفية استخدام Hyperopt في Azure Databricks، راجع ضبط Hyperparameter مع Hyperopt.

fmin()

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

اسم الوسيطة وصف
fn دالة موضوعية. يستدعي Hyperopt هذه الدالة بالقيم التي تم إنشاؤها من مساحة المعلمة الفائقة المتوفرة في وسيطة المسافة. يمكن لهذه الدالة إرجاع الخسارة كقيمة عددية أو في قاموس (راجع مستندات Hyperopt للحصول على التفاصيل). تحتوي هذه الدالة عادة على تعليمات برمجية لتدريب النموذج وحساب الخسارة.
space يحدد مساحة المعلمة الفائقة للبحث. يوفر Hyperopt مرونة كبيرة في كيفية تعريف هذه المساحة. يمكنك اختيار خيار فئوي مثل الخوارزمية أو التوزيع الاحتمالي للقيم الرقمية مثل الموحد والسجل.
algo خوارزمية بحث Hyperopt لاستخدامها للبحث في مساحة المعلمة الفائقة. الأكثر استخداما هي hyperopt.rand.suggest للبحث العشوائي وTPE hyperopt.tpe.suggest .
max_evals عدد إعدادات المعلمات الفائقة التي يجب تجربتها (عدد النماذج المراد ملاءمتها).
max_queue_len عدد إعدادات المعلمة الفائقة التي يجب أن ينشئها Hyperopt مسبقا. نظرا لأن خوارزمية إنشاء Hyperopt TPE قد تستغرق بعض الوقت، فقد يكون من المفيد زيادة هذا إلى ما بعد القيمة الافتراضية 1، ولكن بشكل عام لا يزيد SparkTrials عن الإعداد parallelism.
trials كائن Trials أو SparkTrials . استخدم SparkTrials عند استدعاء خوارزميات جهاز واحد مثل أساليب scikit-learn في الدالة الموضوعية. استخدم Trials عند استدعاء خوارزميات التدريب الموزعة مثل أساليب MLlib أو Horovod في الوظيفة الموضوعية.
early_stop_fn وظيفة إيقاف مبكر اختيارية لتحديد ما إذا كان fmin يجب أن تتوقف قبل max_evals الوصول إليها. الافتراضي هو None. توقيع إدخال الدالة هو Trials, *args وتوقيع الإخراج هو bool, *args. تشير قيمة الإخراج المنطقية إلى ما إذا كان يجب إيقافها أم لا. *args هي أي حالة، حيث يعمل إخراج الاستدعاء early_stop_fn كمدخل للمكالمة التالية. Trials يمكن أن يكون كائنا SparkTrials . عند استخدام SparkTrials، لا يتم ضمان تشغيل دالة الإيقاف المبكر بعد كل إصدار تجريبي، ويتم الاستقصاء بدلا من ذلك. مثال على دالة إيقاف مبكر

SparkTrials الفئة

SparkTrials هي واجهة برمجة تطبيقات تم تطويرها بواسطة Databricks تسمح لك بتوزيع تشغيل Hyperopt دون إجراء تغييرات أخرى على التعليمات البرمجية Hyperopt. SparkTrials يسرع ضبط الجهاز الفردي عن طريق توزيع الإصدارات التجريبية على عمال Spark.

ملاحظه

SparkTrials تم تصميمه لموازاة الحسابات لنماذج التعلم الآلي من جهاز واحد مثل scikit-learn. بالنسبة للنماذج التي تم إنشاؤها باستخدام خوارزميات التعلم الآلي الموزعة مثل MLlib أو Horovod، لا تستخدم SparkTrials. في هذه الحالة، يتم موازاة عملية إنشاء النموذج تلقائيا على نظام المجموعة ويجب عليك استخدام فئة TrialsHyperopt الافتراضية .

يصف هذا القسم كيفية تكوين الوسيطات التي تمررها إلى SparkTrials وتنفيذ جوانب SparkTrials.

الحجج

SparkTrials يأخذ وسيطتين اختياريتين:

  • parallelism: الحد الأقصى لعدد التجارب التي يجب تقييمها بشكل متزامن. يتيح لك العدد الأعلى توسيع نطاق اختبار المزيد من إعدادات المعلمات الفائقة. نظرا لأن Hyperopt يقترح تجارب جديدة استنادا إلى النتائج السابقة، فهناك مقايضة بين التوازي والتكيف. بالنسبة إلى ثابت max_evals، يؤدي التوازي الأكبر إلى تسريع العمليات الحسابية، ولكن التوازي الأقل قد يؤدي إلى نتائج أفضل نظرا لأن كل تكرار لديه حق الوصول إلى المزيد من النتائج السابقة.

    الافتراضي: عدد منفذي Spark المتاحين. الحد الأقصى: 128. إذا كانت القيمة أكبر من عدد المهام المتزامنة المسموح بها بواسطة تكوين نظام المجموعة، SparkTrials يقلل من التوازي مع هذه القيمة.

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

تنفيذ

عند تعريف الدالة fn الموضوعية التي تم تمريرها إلى fmin()، وعند تحديد إعداد نظام المجموعة، من المفيد فهم كيفية SparkTrials توزيع مهام الضبط.

في Hyperopt، يتوافق الإصدار التجريبي بشكل عام مع ملاءمة نموذج واحد على إعداد واحد من المعلمات الفائقة. ينشئ Hyperopt بشكل متكرر الإصدارات التجريبية، ويقيمها، ويكررها.

مع SparkTrials، تنشئ عقدة برنامج التشغيل لنظام مجموعتك إصدارات تجريبية جديدة، وتقوم العقد العاملة بتقييم هذه التجارب. يتم إنشاء كل إصدار تجريبي بوظيفة Spark التي لها مهمة واحدة، ويتم تقييمها في المهمة على جهاز عامل. إذا تم إعداد نظام المجموعة الخاص بك لتشغيل مهام متعددة لكل عامل، فقد يتم تقييم إصدارات تجريبية متعددة في وقت واحد على هذا العامل.

SparkTrials وMLflow

يدعم التعلم الآلي من Databricks Runtime تسجيل الدخول إلى MLflow من العمال. يمكنك إضافة تعليمة برمجية تسجيل مخصصة في الدالة الموضوعية التي تمررها إلى Hyperopt.

SparkTrials سجلات ضبط النتائج كما يتم تشغيل MLflow المتداخلة كما يلي:

  • التشغيل الرئيسي أو الأصل: يتم تسجيل الاستدعاء fmin() كتشغيل رئيسي. إذا كان هناك تشغيل نشط، SparkTrials يسجل هذا التشغيل النشط ولا ينهي التشغيل عند fmin() إرجاع. إذا لم يكن هناك تشغيل نشط، SparkTrials ينشئ تشغيلا جديدا، ويسجله، وينهي التشغيل قبل fmin() إرجاعه.
  • عمليات التشغيل الفرعية: يتم تسجيل كل إعداد hyperparameter تم اختباره ("تجريبي") كتابع ضمن التشغيل الرئيسي. يتم أيضا تخزين سجلات سجل MLflow من العمال ضمن عمليات التشغيل التابعة المقابلة.

عند استدعاء fmin()، توصي Databricks بإدارة تشغيل MLflow النشطة؛ أي التفاف الاستدعاء إلى fmin() داخل عبارة with mlflow.start_run(): . يضمن هذا تسجيل كل fmin() استدعاء في تشغيل رئيسي منفصل ل MLflow، ويجعل من السهل تسجيل علامات أو معلمات أو مقاييس إضافية لهذا التشغيل.

ملاحظه

عند الاتصال fmin() عدة مرات داخل نفس تشغيل MLflow النشط، يسجل MLflow هذه الاستدعاءات إلى نفس التشغيل الرئيسي. لحل تعارضات الأسماء للمعلمات والعلامات المسجلة، يقوم MLflow بإلحاق UUID بالأسماء ذات التعارضات.

عند التسجيل من العمال، لا تحتاج إلى إدارة عمليات التشغيل بشكل صريح في الدالة الموضوعية. استدعاء mlflow.log_param("param_from_worker", x) في الدالة الموضوعية لتسجيل معلمة إلى التشغيل التابع. يمكنك تسجيل المعلمات والمقاييس والعلامات والبيانات الاصطناعية في الدالة الهدف.