كيفية استخدام مهمة متوازية في البنية الأساسية لبرنامج ربط العمليات التجارية (V2)

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

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

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

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

لماذا هناك حاجة إلى وظائف متوازية؟

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

  • تأخير الضغط الناجم عن وقت التنفيذ الطويل.
  • التدخل اليدوي لمعالجة المشكلات غير المتوقعة للحفاظ على متابعة المهمة.

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

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

يجب أن تفكر في استخدام Azure التعلم الآلي Parallel job إذا:

  • تخطط لتدريب العديد من النماذج أعلى البيانات المقسمة.
  • تريد تسريع مهمة الاستدلال الدفعي على نطاق واسع.

الاستعداد لوظيفة موازية

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

الإعلان عن المدخلات التي سيتم توزيعها وإعداد تقسيم البيانات

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

يوضح الجدول التالي العلاقة بين بيانات الإدخال وطريقة تقسيم البيانات:

تنسيق البيانات نوع إدخال Azure التعلم الآلي وضع إدخال azure التعلم الآلي أسلوب تقسيم البيانات
قائمة الملفات mltable أو
uri_folder
ro_mount أو
تنزيل
حسب الحجم (عدد الملفات)
حسب الأقسام
البيانات الجدولية mltable مباشر حسب الحجم (الحجم الفعلي المقدر)
حسب الأقسام

يمكنك الإعلان عن بيانات الإدخال الرئيسية الخاصة بك مع input_data سمة في وظيفة متوازية YAML أو Python SDK. ويمكنك ربطه بأحد معرفاتك inputs لمهمتك المتوازية باستخدام ${{inputs.<input name>}}. ثم تحتاج إلى تحديد أسلوب تقسيم البيانات لإدخالك الرئيسي عن طريق ملء سمة مختلفة:

أسلوب تقسيم البيانات اسم السمة نوع السمة مثال المهمة
حسب الحجم mini_batch_size سلسلة توقع دفعة قزحية القزحية
حسب الأقسام partition_keys قائمة السلسلة توقع مبيعات عصير البرتقال

ينطبق على: ملحق ML Azure CLI v2 (الحالي)

batch_prediction:
  type: parallel
  compute: azureml:cpu-cluster
  inputs:
    input_data: 
      type: mltable
      path: ./neural-iris-mltable
      mode: direct
    score_model: 
      type: uri_folder
      path: ./iris-model
      mode: download
  outputs:
    job_output_file:
      type: uri_file
      mode: rw_mount

  input_data: ${{inputs.input_data}}
  mini_batch_size: "10kb"
  resources:
      instance_count: 2
  max_concurrency_per_instance: 2

  logging_level: "DEBUG"
  mini_batch_error_threshold: 5
  retry_settings:
    max_retries: 2
    timeout: 60

بمجرد تحديد إعداد تقسيم البيانات، يمكنك تكوين عدد الموارد للتوازي الخاص بك عن طريق ملء سمتين أدناه:

اسم السمة نوع الوصف القيمة الافتراضية
instance_count integer عدد العقد التي يجب استخدامها للمهمة. 1
max_concurrency_per_instance integer عدد المعالجات على كل عقدة. بالنسبة لحساب GPU، القيمة الافتراضية هي 1.
بالنسبة لحساب وحدة المعالجة المركزية، القيمة الافتراضية هي عدد الذاكرات الأساسية.

تعمل هاتين السمتين معا مع مجموعة الحوسبة المحددة.

رسم تخطيطي يوضح كيفية عمل البيانات الموزعة في مهمة متوازية.

نموذج التعليمات البرمجية لتعيين سمتين:

ينطبق على: ملحق ML Azure CLI v2 (الحالي)

batch_prediction:
  type: parallel
  compute: azureml:cpu-cluster
  inputs:
    input_data: 
      type: mltable
      path: ./neural-iris-mltable
      mode: direct
    score_model: 
      type: uri_folder
      path: ./iris-model
      mode: download
  outputs:
    job_output_file:
      type: uri_file
      mode: rw_mount

  input_data: ${{inputs.input_data}}
  mini_batch_size: "10kb"
  resources:
      instance_count: 2
  max_concurrency_per_instance: 2

  logging_level: "DEBUG"
  mini_batch_error_threshold: 5
  retry_settings:
    max_retries: 2
    timeout: 60

إشعار

إذا كنت تستخدم جدولي mltable كبيانات إدخال رئيسية، فستحتاج إلى تعبئة ملف مواصفات MLTABLE مع transformations - read_delimited قسم تحت المسار المحدد. للحصول على مزيد من الأمثلة، راجع إنشاء أصل بيانات قابل للنطاق القابل للنطاق

تنفيذ دالات معرفة مسبقا في البرنامج النصي للإدخال

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

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

اسم الوظيفة المطلوب الوصف إدخال الإرجاع
Init() Y استخدم هذه الدالة للتحضير الشائع قبل البدء في تشغيل دفعات صغيرة. على سبيل المثال، قم باستخدامه لتحميل النموذج في كائن عام. -- --
تشغيل (mini_batch) Y تنفيذ منطق التنفيذ الرئيسي mini_batches. mini_batch:
إطار بيانات Pandas إذا كانت بيانات الإدخال بيانات جدولية.
قائمة مسار الملف إذا كانت بيانات الإدخال دليلا.
إطار البيانات أو القائمة أو المجموعة.
إيقاف التشغيل() N دالة اختيارية للقيام بتنظيف مخصص قبل إرجاع الحساب مرة أخرى إلى التجمع. -- --

تحقق من أمثلة البرنامج النصي للإدخل التالية للحصول على مزيد من التفاصيل:

بمجرد أن يكون لديك برنامج نصي للإدخل جاهز، يمكنك تعيين السمتين التاليتين لاستخدامه في وظيفتك المتوازية:

اسم السمة نوع الوصف القيمة الافتراضية
code سلسلة المسار المحلي إلى دليل التعليمة البرمجية المصدر ليتم تحميله واستخدامه للوظيفة.
entry_script سلسلة ملف Python الذي يحتوي على تنفيذ وظائف متوازية محددة مسبقا.

نموذج التعليمات البرمجية لتعيين سمتين:

ينطبق على: ملحق ML Azure CLI v2 (الحالي)

batch_prediction:
  type: parallel
  compute: azureml:cpu-cluster
  inputs:
    input_data: 
      type: mltable
      path: ./neural-iris-mltable
      mode: direct
    score_model: 
      type: uri_folder
      path: ./iris-model
      mode: download
  outputs:
    job_output_file:
      type: uri_file
      mode: rw_mount

  input_data: ${{inputs.input_data}}
  mini_batch_size: "10kb"
  resources:
      instance_count: 2
  max_concurrency_per_instance: 2

  logging_level: "DEBUG"
  mini_batch_error_threshold: 5
  retry_settings:
    max_retries: 2
    timeout: 60

  task:
    type: run_function
    code: "./script"
    entry_script: iris_prediction.py
    environment:
      name: "prs-env"
      version: 1
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
      conda_file: ./environment/environment_parallel.yml
    program_arguments: >-
      --model ${{inputs.score_model}}
      --error_threshold 5
      --allowed_failed_percent 30
      --task_overhead_timeout 1200
      --progress_update_timeout 600
      --first_task_creation_timeout 600
      --copy_logs_to_parent True
      --resource_monitor_interva 20
    append_row_to: ${{outputs.job_output_file}}

هام

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

هام

إذا كنت تريد تحليل الوسيطات في الدالة Init() أو Run(mini_batch)، فاستخدم "parse_known_args" بدلا من "parse_args" لتجنب الاستثناءات. راجع المثال iris_score للبرنامج النصي للإدخل مع محلل الوسيطات.

هام

إذا كنت تستخدم mltable كبيانات إدخال رئيسية، فأنت بحاجة إلى تثبيت مكتبة "mltable" في بيئتك. راجع السطر 9 من مثال ملف conda هذا.

ضع في اعتبارك إعدادات الأتمتة

تعرض وظيفة Azure التعلم الآلي المتوازية العديد من الإعدادات للتحكم تلقائيا في الوظيفة دون تدخل يدوي. راجع الجدول التالي للحصول على التفاصيل.

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

يتم وضع علامة على الدفعة المصغرة على أنها فاشلة إذا:
- عدد العائدات من run() أقل من عدد الإدخالات الدفعية المصغرة.
- التقاط الاستثناءات في التعليمات البرمجية المخصصة run() .

"-1" هو الرقم الافتراضي، ما يعني تجاهل جميع الدفعات المصغرة الفاشلة أثناء المهمة المتوازية.
[-1، int.max] -1 mini_batch_error_threshold ‏‫غير متوفر‬
الحد الأقصى لإعادة المحاولة للدفعة المصغرة integer حدد عدد مرات إعادة المحاولة عند فشل الدفعة المصغرة أو انتهاء المهلة. إذا فشلت جميع عمليات إعادة المحاولة، وضع علامة على الدفعة المصغرة على أنها فاشلة في حسابها mini_batch_error_threshold . [0، int.max] 2 retry_settings.max_retries ‏‫غير متوفر‬
مهلة دفعة صغيرة integer حدد المهلة بالثوان لتنفيذ دالة run() المخصصة. إذا كان وقت التنفيذ أعلى من هذا الحد، إجهاض الدفعة المصغرة، ووضع علامة عليها كدفعة مصغرة فاشلة لتشغيل إعادة المحاولة. (0, 259200] 60 مهلة retry_settings ‏‫غير متوفر‬
حد خطأ العنصر integer حد العناصر الفاشلة. يتم حساب العناصر الفاشلة حسب فجوة الرقم بين المدخلات والإرجاعات من كل دفعة صغيرة. إذا كان مجموع العناصر الفاشلة أعلى من هذا الحد، وضع علامة على المهمة المتوازية على أنها فاشلة.

ملاحظة: "-1" هو الرقم الافتراضي، مما يعني تجاهل جميع حالات الفشل أثناء المهمة المتوازية.
[-1، int.max] -1 ‏‫غير متوفر‬ --error_threshold
النسبة المئوية الفاشلة المسموح بها integer mini_batch_error_threshold على غرار ولكن يستخدم النسبة المئوية للدفعات المصغرة الفاشلة بدلا من العدد. [0, 100] 100 ‏‫غير متوفر‬ --allowed_failed_percent
مهلة النفقات العامة integer المهلة بالثانية لتهيئة كل دفعة صغيرة. على سبيل المثال، قم بتحميل بيانات الدفعة المصغرة وتمريرها إلى وظيفة run(). (0, 259200] 600 ‏‫غير متوفر‬ --task_overhead_timeout
مهلة تحديث التقدم integer المهلة في الثانية لمراقبة تقدم تنفيذ الدفعة المصغرة. إذا لم يتم تلقي أي تحديثات تقدم ضمن إعداد المهلة هذا، وضع علامة على المهمة المتوازية على أنها فاشلة. (0, 259200] يتم حسابها ديناميكيا بواسطة إعدادات أخرى. ‏‫غير متوفر‬ --progress_update_timeout
مهلة إنشاء المهمة الأولى integer المهلة في الثانية لمراقبة الوقت بين بدء المهمة لتشغيل الدفعة المصغرة الأولى. (0, 259200] 600 ‏‫غير متوفر‬ --first_task_creation_timeout
مستوى التسجيل سلسلة حدد مستوى السجلات التي سيتم تفريغها إلى ملفات سجل المستخدم. معلومات أو تحذير أو تصحيح الأخطاء معلومات logging_level ‏‫غير متوفر‬
إلحاق صف ب سلسلة تجميع كافة الإرجاعات من كل تشغيل للدفعة المصغرة وإخراجها في هذا الملف. قد يشير إلى أحد مخرجات المهمة المتوازية باستخدام التعبير ${{outputs.<>output_name}} task.append_row_to ‏‫غير متوفر‬
نسخ السجلات إلى الأصل سلسلة خيار منطقي لمعرفة ما إذا كان يتم نسخ تقدم المهمة، ونظرة عامة، والسجلات إلى مهمة البنية الأساسية لبرنامج ربط العمليات التجارية الأصل. صواب أو خطأ خطأ ‏‫غير متوفر‬ --copy_logs_to_parent
الفاصل الزمني لمراقبة الموارد integer الفاصل الزمني بالثوان لتفريغ استخدام موارد العقدة (على سبيل المثال، وحدة المعالجة المركزية، الذاكرة) لتسجيل المجلد ضمن مسار "logs/sys/perf".

ملاحظة: ستؤدي سجلات موارد التفريغ المتكررة إلى إبطاء سرعة تنفيذ الدفعة الصغيرة قليلا. قم بتعيين هذه القيمة إلى "0" لإيقاف تفريغ استخدام الموارد.
[0، int.max] 600 ‏‫غير متوفر‬ --resource_monitor_interval

نموذج التعليمات البرمجية لتحديث هذه الإعدادات:

ينطبق على: ملحق ML Azure CLI v2 (الحالي)

batch_prediction:
  type: parallel
  compute: azureml:cpu-cluster
  inputs:
    input_data: 
      type: mltable
      path: ./neural-iris-mltable
      mode: direct
    score_model: 
      type: uri_folder
      path: ./iris-model
      mode: download
  outputs:
    job_output_file:
      type: uri_file
      mode: rw_mount

  input_data: ${{inputs.input_data}}
  mini_batch_size: "10kb"
  resources:
      instance_count: 2
  max_concurrency_per_instance: 2

  logging_level: "DEBUG"
  mini_batch_error_threshold: 5
  retry_settings:
    max_retries: 2
    timeout: 60

  task:
    type: run_function
    code: "./script"
    entry_script: iris_prediction.py
    environment:
      name: "prs-env"
      version: 1
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
      conda_file: ./environment/environment_parallel.yml
    program_arguments: >-
      --model ${{inputs.score_model}}
      --error_threshold 5
      --allowed_failed_percent 30
      --task_overhead_timeout 1200
      --progress_update_timeout 600
      --first_task_creation_timeout 600
      --copy_logs_to_parent True
      --resource_monitor_interva 20
    append_row_to: ${{outputs.job_output_file}}

إنشاء مهمة متوازية في البنية الأساسية لبرنامج ربط العمليات التجارية

ينطبق على: ملحق ML Azure CLI v2 (الحالي)

يمكنك إنشاء وظيفتك المتوازية المضمنة مع مهمة البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك:

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

display_name: iris-batch-prediction-using-parallel
description: The hello world pipeline job with inline parallel job
tags:
  tag: tagvalue
  owner: sdkteam

settings:
  default_compute: azureml:cpu-cluster

jobs:
  batch_prediction:
    type: parallel
    compute: azureml:cpu-cluster
    inputs:
      input_data: 
        type: mltable
        path: ./neural-iris-mltable
        mode: direct
      score_model: 
        type: uri_folder
        path: ./iris-model
        mode: download
    outputs:
      job_output_file:
        type: uri_file
        mode: rw_mount

    input_data: ${{inputs.input_data}}
    mini_batch_size: "10kb"
    resources:
        instance_count: 2
    max_concurrency_per_instance: 2

    logging_level: "DEBUG"
    mini_batch_error_threshold: 5
    retry_settings:
      max_retries: 2
      timeout: 60

    task:
      type: run_function
      code: "./script"
      entry_script: iris_prediction.py
      environment:
        name: "prs-env"
        version: 1
        image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
        conda_file: ./environment/environment_parallel.yml
      program_arguments: >-
        --model ${{inputs.score_model}}
        --error_threshold 5
        --allowed_failed_percent 30
        --task_overhead_timeout 1200
        --progress_update_timeout 600
        --first_task_creation_timeout 600
        --copy_logs_to_parent True
        --resource_monitor_interva 20
      append_row_to: ${{outputs.job_output_file}}

إرسال مهمة المسار والتحقق من الخطوة المتوازية في واجهة مستخدم Studio

ينطبق على: ملحق ML Azure CLI v2 (الحالي)

يمكنك إرسال مهمة البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك مع خطوة متوازية باستخدام الأمر CLI:

az ml job create --file pipeline.yml

بمجرد إرسال مهمة البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك، سيمنحك عنصر واجهة المستخدم SDK أو CLI رابط عنوان URL على الويب إلى واجهة مستخدم Studio. سيرشدك الرابط إلى عرض الرسم البياني لالتدفق بشكل افتراضي. حدد الخطوة المتوازية مرتين لفتح اللوحة اليمنى من وظيفتك المتوازية.

للتحقق من إعدادات المهمة المتوازية، انتقل إلى علامة التبويب Parameters ، وقم بتوسيع Run settings، وتحقق من قسم Parallel :

لقطة شاشة ل Azure التعلم الآلي studio في علامة تبويب الوظائف التي تعرض إعدادات الوظيفة المتوازية.

لتصحيح فشل المهمة المتوازية، انتقل إلى علامة التبويب Outputs + Logs ، وقم بتوسيع مجلد السجلات من دلائل الإخراج على اليسار، وتحقق من job_result.txt لفهم سبب فشل المهمة المتوازية. لمزيد من التفاصيل حول بنية تسجيل المهمة المتوازية ، راجع readme.txt ضمن نفس المجلد.

لقطة شاشة ل Azure التعلم الآلي studio في علامة تبويب الوظائف التي تعرض نتائج المهمة المتوازية.

مهمة متوازية في أمثلة البنية الأساسية لبرنامج ربط العمليات التجارية

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