تكوين مهام التدريب وإرسالها

ينطبق على:Python SDK azureml v1

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

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

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

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

ما المقصود بتكوين تشغيل البرنامج النصي؟

يتم استخدام ScriptRunConfig لتكوين المعلومات الضرورية لإرسال تشغيل تدريب كجزء من تجربة.

يمكنك إرسال تجربة التدريب مع عنصر ScriptRunConfig. يتضمن هذا العنصر ما يلي:

  • source_directory: الدليل المصدر الذي يحتوي على البرنامج النصي للتدريب
  • البرنامج النصي: البرنامج النصي للتدريب من أجل التشغيل
  • compute_target: هدف الحساب لتشغيله
  • البيئة: البيئة التي يجب استخدامها عند تشغيل البرنامج النصي
  • وبعض الخيارات الإضافية القابلة للتكوين (راجع الوثائق المرجعية لمزيد من المعلومات)

تدريب النموذج

نمط التعليمات البرمجية لتقديم تشغيل تدريب هو نفسه لجميع أنواع أهداف الحوسبة:

  1. إنشاء تجربة لتشغيلها
  2. إنشاء بيئة حيث يتم تشغيل البرنامج النصي
  3. إنشاء ScriptRunConfig، الذي يحدد هدف الحساب والبيئة
  4. إرسال المهمة
  5. انتظر حتى تكتمل المهمة

أو يمكنك:

إنشاء تجربة

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

ينطبق على:Python SDK azureml v1

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

تحديد هدف حساب

حدد هدف الحساب، حيث سيتم تشغيل برنامج التدريب النصي. إذا لم يتم تحديد هدف حساب في ScriptRunConfig، أو إذا ، compute_target='local'فسينفذ Azure التعلم الآلي البرنامج النصي محليا.

يفترض مثال التعليمات البرمجية في هذه المقالة أنك قمت بالفعل بإنشاء هدف حساب my_compute_target من قسم "المتطلبات الأساسية".

إشعار

  • لا يتم دعم Azure Databricks كهدف حساب لتدريب النموذج. يمكنك استخدام Azure Databricks لمهام إعداد البيانات وتوزيعها.
  • لإنشاء هدف حساب وإرفاقه للتدريب على نظام مجموعة Kubernetes الممكنة في Azure Arc، راجع تكوين التعلم الآلي الممكن بواسطة Azure Arc

إنشاء بيئة

بيئات التعلّم الآلي من Azure عبارة عن تغليف للبيئة التي يحدث بها تدريب التعلّم الآلي الخاص بك. وهي تحدد حزم Python وصورة Docker ومتغيرات البيئة وإعدادات البرامج حول البرامج النصية للتدريب وتسجيل النقاط. كما أنها تحدد أوقات التشغيل (Python أو Spark أو Docker).

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

بالنسبة لهدف حساب بعيد، يمكنك استخدام إحدى هذه البيئات المنسقة الشائعة للبدء بما يلي:

ينطبق على:Python SDK azureml v1

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

لمزيد من المعلومات والتفاصيل حول البيئات، راجع إنشاء بيئات البرامج واستخدامها في Azure التعلم الآلي.

هدف الحساب المحلي

إذا كان هدف الحساب الخاص بك هو جهازك المحلي، فأنت مسؤول عن ضمان توفر جميع الحزم الضرورية في بيئة Python حيث يتم تشغيل البرنامج النصي. استخدم python.user_managed_dependencies لاستخدام بيئة Python الحالية (أو Python على المسار الذي تحدده).

ينطبق على:Python SDK azureml v1

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

إنشاء تكوين مهمة البرنامج النصي

الآن بعد أن أصبح لديك هدف حساب (، راجع المتطلبات الأساسية، والبيئة (myenv، راجع إنشاء بيئة)، قم بإنشاء تكوين مهمة برنامج نصي يقوم بتشغيل البرنامج النصي للتدريب (train.py) الموجود في الدليل الخاص بكproject_folder:my_compute_target

ينطبق على:Python SDK azureml v1

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

إذا لم تحدد بيئة، فسيتم إنشاء بيئة افتراضية لك.

إذا كان لديك وسيطات سطر الأوامر التي تريد تمريرها إلى البرنامج النصي للتدريب الخاص بك، يمكنك تحديدها عبر arguments معلمة منشئ ScriptRunConfig، على سبيل المثال، arguments=['--arg1', arg1_val, '--arg2', arg2_val].

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

تحديد تكوين مهمة موزعة

إذا كنت ترغب في تشغيل مهمة تدريب موزعة، فقم بتوفير التكوين الموزع الخاص بالمهمة إلى المعلمة distributed_job_config. تتضمن أنواع التكوين المدعومة MpiConfiguration، ووTensorflowConfiguration، ووPyTorchConfiguration.

لمزيد من المعلومات والأمثلة حول تشغيل وظائف Horovod وTensorFlow وPyTorch الموزعة، راجع:

إرسال التجربة

ينطبق على:Python SDK azureml v1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

هام

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

لمنع تضمين الملفات غير الضرورية في اللقطة، قم بإجراء ملف تجاهل (.gitignore أو .amlignore) في الدليل. أضف الملفات والدلائل لاستبعادها إلى هذا الملف. لمزيد من المعلومات حول بناء الجملة لاستخدامه داخل هذا الملف، راجع بناء الجملة والأنماط لـ .gitignore. يستخدم الملف .amlignore نفس بناء الجملة. إذا كان كلا الملفين موجودين، يتم استخدام الملف .amlignore والملف .gitignore غير مستخدم.

لمزيد من المعلومات حول اللقطات، راجع اللقطات.

هام

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

لإنشاء بيانات اصطناعية أثناء التدريب (مثل ملفات النموذج أو نقاط التحقق أو ملفات البيانات أو الصور المرسومة)، اكتبها في المجلد ./outputs.

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

على سبيل المثال، لتنزيل ملف مكتوب إلى مجلد المخرجات إلى جهازك المحلي بعد تشغيل التدريب عن بعد: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

تعقب وتكامل Git

عند بدء مهمة تدريبية حيث يكون الدليل المصدر مستودع Git محليًا، يتم تخزين المعلومات حول المستودع في سجل الوظيفة. لمزيد من المعلومات، راجع تكامل Git للتعلم الآلي من Azure.

أمثلة دفتر الملاحظات

راجع دفاتر الملاحظات هذه للحصول على أمثلة لتكوين الوظائف لسيناريوهات التدريب المختلفة:

تعرف على كيفية تشغيل دفاتر الملاحظات باتباع المقالة استخدام دفاتر Jupyter لاستكشاف هذه الخدمة.

استكشاف الأخطاء وإصلاحها

  • AttributeError: لا يحتوي عنصر 'RoundTripLoader' على سمة 'comment_handling': يأتي هذا الخطأ من الإصدار الجديد (v0.17.5) من ruamel-yaml، وهو azureml-core تبعية، الذي يقدم تغييراً فاصلاً إلى azureml-core. لإصلاح هذا الخطأ، قم بإلغاء التثبيت ruamel-yaml عن طريق تشغيل pip uninstall ruamel-yaml وتثبيت إصدار مختلف من ruamel-yaml؛ الإصدارات المدعومة هي v0.15.35 إلى v0.17.4 (شامل). يمكنك القيام بذلك عن طريق تشغيل pip install "ruamel-yaml>=0.15.35,<0.17.5".

  • فشلت المهمة مع jwt.exceptions.DecodeError: رسالة الخطأ الدقيقة: jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    ضع في اعتبارك الترقية إلى أحدث إصدار من azureml-core: pip install -U azureml-core.

    اذا. أنت تواجه هذه المشكلة للوظائف المحلية، تحقق من إصدار PyJWT المثبت في بيئتك حيث . أنت تبدأ الوظائف. الإصدارات المدعومة من PyJWT هي < 2.0.0. قم بإلغاء تثبيت PyJWT من البيئة إذا كان الإصدار >= 2.0.0. يمكنك التحقق من إصدار PyJWT وإلغاء التثبيت وتثبيت الإصدار الصحيح كما يلي:

    1. ابدأ تشغيل أمر shell، وقم بتنشيط بيئة conda حيث يتم تثبيت azureml-core.
    2. أدخل pip freeze وابحث عن PyJWT، إذا تم العثور عليه، يجب أن يكون الإصدار المدرج < 2.0.0
    3. إذا لم يكن الإصدار المدرج إصدارًا مدعومًا، pip uninstall PyJWT في الأمر shell وأدخل y للتأكيد.
    4. تثبيت باستخدام pip install 'PyJWT<2.0.0'

    اذا. أنت ترسل بيئة أنشأها المستخدم مع وظيفتك، ضع في اعتبارك استخدام أحدث إصدار من azureml-core في تلك البيئة. الإصدارات >= 1.18.0 من azureml-core تثبت بالفعل PyJWT < 2.0.0. إذا كنت بحاجة إلى استخدام إصدار من azureml-core < 1.18.0 في البيئة التي ترسلها، فتأكد من تحديد PyJWT < 2.0.0 في تبعيات pip.

  • ModuleErrors (لا توجد وحدة نمطية مسماة): إذا . أنت تعمل في ModuleErrors أثناء إرسال التجارب في Azure التعلم الآلي، يتوقع البرنامج النصي للتدريب تثبيت حزمة ولكن لم تتم إضافتها. بمجرد توفير اسم الحزمة، يقوم Azure التعلم الآلي بتثبيت الحزمة في البيئة المستخدمة لمهمة التدريب الخاصة بك.

    اذا. أنت تستخدم Estimators لإرسال التجارب، يمكنك تحديد اسم حزمة عبر pip_packages أو conda_packages معلمة في أداة التقدير استنادا إلى المصدر الذي تريد تثبيت الحزمة منه. يمكنك أيضاً تحديد ملف yml مع جميع التبعيات الخاصة بك باستخدام conda_dependencies_fileأو سرد جميع متطلبات pip الخاصة بك في ملف txt باستخدام معلمة pip_requirements_file. إذا كان لديك كائن Azure التعلم الآلي Environment الخاص بك الذي تريد تجاوز الصورة الافتراضية المستخدمة من قبل أداة التقدير، يمكنك تحديد تلك البيئة عبر environment معلمة منشئ المقدر.

    يمكن رؤية صور docker التي يحتفظ بها Azure التعلم الآلي ومحتوياتها في حاويات Azure التعلم الآلي. يتم سرد التبعيات الخاصة بإطار العمل في وثائق إطار العمل المعنية:

    إشعار

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

  • NameError (الاسم غير محدد)، AttributeError (العنصر لا يحتوي على سمة): يجب أن يأتي هذا الاستثناء من البرامج النصية للتدريب. يمكنك إلقاء نظرة على ملفات السجل من مدخل Azure للحصول على مزيد من المعلومات حول الاسم المحدد غير المحدد أو خطأ السمة. من SDK، يمكنك استخدام run.get_details() لإلقاء نظرة على رسالة الخطأ. سيؤدي هذا أيضًا إلى سرد جميع ملفات السجل التي تم إنشاؤها لعملك. يرجى التأكد من إلقاء نظرة على البرنامج النصي للتدريب الخاص بك وإصلاح الخطأ قبل إعادة تقديم وظيفتك.

  • حذف المهمة أو التجربة: يمكن أرشفة التجارب باستخدام أسلوب Experiment.archive، أو من عرض علامة التبويب «تجربة» في عميل استوديو التعلم الآلي من Microsoft Azure عبر زر "أرشفة التجربة". يخفي هذا الإجراء التجربة من استعلامات القائمة وطرق العرض، ولكنه لا يحذفها.

    الحذف الدائم للتجارب الفردية أو الوظائف غير مدعوم حاليًا. لمزيد من المعلومات حول حذف أصول مساحة العمل، راجع تصدير بيانات مساحة عمل خدمة التعلم الآلي أو حذفها.

  • المستند القياسي كبير جدًا: يحتوي التعلم الآلي من Microsoft Azure على حدود داخلية لحجم العناصر القياسية التي يمكن تسجيلها في وقت واحد من مهمة التدريب. إذا واجهت خطأ "المستند القياسي كبير جدًا" عند تسجيل مقياس ذي قيمة مدرجة، فحاول تقسيم القائمة إلى أجزاء أصغر، على سبيل المثال:

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    داخليا، يقوم Azure التعلم الآلي بتسلسل الكتل بنفس اسم المقياس في قائمة متجاورة.

  • يستغرق هدف الحساب وقتاً طويلاً للبدء: يتم تحميل صور Docker لأهداف الحساب من سجل حاويات Azure (ACR). بشكل افتراضي، يقوم نظام التعلم الآلي من Microsoft Azure بإنشاء ACR يستخدم طبقة الخدمة الأساسية. قد يؤدي تغيير سجل حاويات Azure لمساحة العمل إلى المستوى القياسي أو المتميز إلى تقليل الوقت الذي يستغرقه إنشاء الصور وتحميلها. لمزيد من المعلومات، راجع طبقات خدمة سجل حاويات Azure.

الخطوات التالية