إنشاء وتشغيل مسارات التعلم الآلي باستخدام المكونات باستخدام Azure التعلم الآلي CLI (معاينة)

ينطبق على: ملحق التعلم الآلي من Azure CLI v1 v2 (معاينة)

ملاحظة

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

في هذه المقالة، ستتعلم كيفية إنشاء وتشغيل مسارات التعلم الآلي باستخدام Azure CLI والمكونات (لمزيد من المعلومات، راجع ما هو مكون Azure التعلم الآلي؟). يمكنك إنشاء مسارات دون استخدام المكونات، ولكن المكونات توفر أكبر قدر من المرونة وإعادة الاستخدام. يمكن تعريف خطوط أنابيب AzureML في YAML وتشغيلها من CLI، أو تأليفها في Python، أو تكوينها في AzureML Studio Designer باستخدام واجهة مستخدم السحب والإفلات. يركز هذا المستند على CLI.

هام

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

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

تقديم مسارات التعلم الآلي

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

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

يحتوي Azure على أنواع أخرى من البنية الأساسية لبرنامج ربط العمليات التجارية: تتمتع مسارات Azure Data Factory بدعم قوي للبنية الأساسية لبرنامج ربط العمليات التجارية من البيانات إلى البيانات، في حين أن Azure Pipelines هي الخيار الأفضل لأتمتة CI/CD. قارن البنية الأساسية لبرنامج ربط العمليات التجارية التعلم الآلي مع هذه المسارات المختلفة.

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

cli/jobs/pipelines-with-components/basics من دليل azureml-examples المستودع، انتقل إلى 3a_basic_pipeline الدليل الفرعي (تظهر الأمثلة السابقة في هذا الدليل المسارات غير المكونة). سرد موارد الحوسبة المتوفرة باستخدام الأمر التالي:

az ml compute list

إذا لم يكن لديك، قم بإنشاء مجموعة تسمى cpu-cluster عن طريق تشغيل:

az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 10

الآن، قم بإنشاء مهمة البنية الأساسية لبرنامج ربط العمليات التجارية باستخدام الأمر التالي:

az ml job create --file pipeline.yml

يجب أن تتلقى قاموس JSON مع معلومات حول مهمة البنية الأساسية لبرنامج ربط العمليات التجارية، بما في ذلك:

المفتاح الوصف
name اسم الوظيفة المستند إلى GUID.
experiment_name الاسم الذي سيتم تنظيم الوظائف تحته في Studio.
services.Studio.endpoint عنوان URL لمراقبة مهمة البنية الأساسية لبرنامج ربط العمليات التجارية ومراجعتها.
status حالة الوظيفة. من المحتمل أن يكون Preparing هذا في هذه المرحلة.

مراجعة مكون

ألق نظرة سريعة على التعليمات البرمجية لمصدر Python في componentA_srcو componentB_srcو.componentC_src كما ترى، يحتوي كل دليل من هذه الدلائل على برنامج "مرحبًا بالعالم" مختلف قليلا في Python.

افتح ComponentA.yaml لمعرفة كيفية تعريف المكون الأول:

$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
type: command

name: component_a
display_name: componentA
version: 1

code: ./componentA_src

environment: 
  image: docker.io/python

command: >-
  python hello.py

في المعاينة الحالية، يتم دعم المكونات من النوع command فقط. name هو المعرف الفريد والمستخدم في Studio لوصف المكون، display_name ويستخدم لاسم سهل العرض. version يسمح لك زوج قيمة المفتاح بتطور مكونات البنية الأساسية لبرنامج ربط العمليات التجارية مع الحفاظ على قابلية إعادة الإنتاج مع الإصدارات القديمة.

سيتم تحميل جميع الملفات في ./componentA_src الدليل إلى Azure للمعالجة.

environment يسمح لك القسم بتحديد بيئة البرنامج التي يتم تشغيل المكون فيها. في هذه الحالة، يستخدم المكون صورة Docker أساسية، كما هو محدد في environment.image. لمزيد من المعلومات، راجع إنشاء & بيئات استخدام البرامج في Azure التعلم الآلي.

وأخيرا، command يتم استخدام المفتاح لتحديد الأمر الذي سيتم تشغيله.

ملاحظة

قيمة البدء command>- التي هي YAML "نمط قابل للطي مع كتلة chomping." يسمح لك هذا بكتابة الأمر عبر أسطر متعددة من النص للوضوح.

لمزيد من المعلومات حول المكونات ومواصفاتها، راجع ما هو مكون Azure التعلم الآلي؟.

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

في دليل المثال، pipeline.yaml يبدو الملف مثل التعليمات البرمجية التالية:

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
description: "Basic Pipeline Job with 3 Hello World components"

compute: azureml:cpu-cluster

jobs:
  componentA:
    type: command
    component: file:./componentA.yml
  componentB:
    type: command
    component: file:./componentB.yml
  componentC:
    type: command
    component: file:./componentC.yml

إذا فتحت عنوان URL للوظيفة في Studio (قيمة services.Studio.endpoint من job create الأمر عند إنشاء وظيفة أو job show بعد إنشاء الوظيفة)، فسترى تمثيل رسم بياني للبنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك:

The pipeline's graph representation in Studio

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

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

Screenshot showing the details and outputs of a component's child run

Upload البيانات واستخدامها

يوضح المثال 3b_pipeline_with_data كيفية تعريف تدفق بيانات الإدخال والإخراج والتخزين في البنية الأساسية لبرنامج ربط العمليات التجارية.

يمكنك تعريف دلائل بيانات الإدخال للبنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك في ملف YAML للمسار باستخدام inputs المسار. يمكنك تعريف المخرجات ودلائل البيانات الوسيطة outputs باستخدام المسار. يمكنك استخدام هذه التعريفات في jobs.<JOB_NAME>.inputs المسارين و jobs.<JOB_NAME>.outputs ، كما هو موضح في الصورة التالية:

Image showing how the inputs and outputs paths map to the jobs inputs and outputs paths

  1. parent.inputs.pipeline_sample_input_data ينشئ المسار (السطر 7) معرف مفتاح ويحمل بيانات الإدخال من path الدليل (السطر 9). ثم يتم استخدام هذا المعرف ${{parent.inputs.pipeline_sample_input_data}} كقيمة للمفتاح parent.jobs.componentA_job.inputs.componentA_input (السطر 20). بمعنى آخر، يتم تمرير إدخال البنية pipeline_sample_input_data الأساسية لبرنامج ربط العمليات التجارية إلى componentA_input إدخال المكون A.
  2. parent.jobs.componentA_job.outputs.componentA_output يتم استخدام المسار (السطر 22) مع المعرف ${{parent.jobs.componentA_job.outputs.componentA_output}} كقيمة لمفتاح الخطوة parent.jobs.componentB_job.inputs.componentB_input التالية (السطر 28).
  3. كما هو الحال مع المكون A، يتم استخدام إخراج المكون B (السطر 30) كمدخل للمكون C (السطر 36).
  4. مفتاح المسار parent.outputs.final_pipeline_output (السطر 12) هو مصدر المعرف المستخدم كقيمة parent.jobs.componentC_job.outputs.componentC_output للمفتاح (السطر 38). بمعنى آخر، إخراج المكون C هو الإخراج النهائي للبنية الأساسية لبرنامج ربط العمليات التجارية.

يبدو تصور Studio لهذا المسار كما يلي:

Screenshot showing Studio's graph view of a pipeline with data dependencies

يمكنك أن ترى أنه parent.inputs.pipeline_sample_input_data يتم تمثيله ك Dataset. يتم عرض مفاتيح jobs.<COMPONENT_NAME>.inputs ومسارات و outputs كتدفقات بيانات بين مكونات البنية الأساسية لبرنامج ربط العمليات التجارية.

يمكنك تشغيل هذا المثال عن طريق التبديل إلى 3b_pipeline_with_data الدليل الفرعي لمستودع العينات وتشغيل:

az ml job create --file pipeline.yaml

الوصول إلى البيانات في البرنامج النصي

يتم تمرير مسارات دليل الإدخال والإخراج لمكون إلى البرنامج النصي الخاص بك كوسيطات. سيكون اسم الوسيطة هو المفتاح الذي حددته في ملف YAML في inputs المسار أو outputs . على سبيل المثال:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--componentA_input", type=str)
parser.add_argument("--componentA_output", type=str)

args = parser.parse_args()

print("componentA_input path: %s" % args.componentA_input)
print("componentA_output path: %s" % args.componentA_output)

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

إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية للتحضير والتدريب والتقييم

يحتوي أحد السيناريوهات الشائعة لمسارات التعلم الآلي على ثلاث مراحل رئيسية:

  1. إعداد البيانات
  2. التدريب
  3. تقييم النموذج

قد تحتوي كل من هذه المراحل على مكونات متعددة. على سبيل المثال، قد تحتوي خطوة إعداد البيانات على خطوات منفصلة لتحميل بيانات التدريب وتحويلها. يحتوي مستودع الأمثلة على مسار مثال شامل في cli/jobs/pipelines-with-components/nyc_taxi_data_regression الدليل.

pipeline.yml يبدأ بزوج قيمة المفتاح الإلزاميtype: pipeline. ثم يحدد المدخلات والمخرجات كما يلي:


# <inputs_and_outputs>

outputs: 
  pipeline_job_trained_model:
    mode: rw_mount
  pipeline_job_predictions:
    mode: rw_mount 
  pipeline_job_score_report:
    mode: rw_mount
# </inputs_and_outputs>

# <jobs>
settings:
  default_datastore: azureml:workspaceblobstore
  default_compute: azureml:cpu-cluster
  continue_on_step_failure: false

كما هو موضح سابقا، تحدد هذه الإدخالات بيانات الإدخال إلى البنية الأساسية لبرنامج ربط العمليات التجارية، وفي هذه الحالة مجموعة البيانات في ./data، والمخرجات المتوسطة والنهائية للبنية الأساسية لبرنامج ربط العمليات التجارية، والتي يتم تخزينها في مسارات منفصلة. تصبح الأسماء داخل إدخالات الإدخال والإخراج هذه قيما inputs في إدخالات الوظائف الفردية و outputs :

    component: file:./prep.yml
    inputs:
      raw_data: #using local data, will crate an anonymous data asset
        type: uri_folder
        path: ./data
    outputs:
      prep_data: 

  transform_job:
    type: command
    component: file:./transform.yml
    inputs:
      clean_data: ${{parent.jobs.prep_job.outputs.prep_data}}
    outputs:
      transformed_data: 

  train_job:
    type: command
    component: file:./train.yml
    inputs:
      training_data: ${{parent.jobs.transform_job.outputs.transformed_data}}
    outputs:
      model_output: ${{parent.outputs.pipeline_job_trained_model}}
      test_data: 
  
  predict_job:
    type: command
    component: file:./predict.yml
    inputs:
      model_input: ${{parent.jobs.train_job.outputs.model_output}}
      test_data: ${{parent.jobs.train_job.outputs.test_data}}
    outputs:
      predictions: ${{parent.outputs.pipeline_job_predictions}}

  score_job:
    type: command
    component: file:./score.yml
    inputs:
      predictions: ${{parent.jobs.predict_job.outputs.predictions}}
      model: ${{parent.jobs.train_job.outputs.model_output}}
    outputs:
      score_report: ${{parent.outputs.pipeline_job_score_report}}
# </jobs>

لاحظ كيفية parent.jobs.train-job.outputs.model_output استخدام كمدخل لكل من مهمة التنبؤ ووظيفة التسجيل، كما هو موضح في الرسم التخطيطي التالي:

pipeline graph of the NYC taxi-fare prediction task

تسجيل المكونات لإعادة الاستخدام والمشاركة

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

في مستودع أمثلة azureml، انتقل إلى cli/jobs/pipelines-with-components/basics/1b_e2e_registered_components الدليل.

لتسجيل مكون، استخدم az ml component create الأمر :

az ml component create --file train.yml
az ml component create --file score.yml
az ml component create --file eval.yml

بعد تشغيل هذه الأوامر حتى الاكتمال، يمكنك مشاهدة المكونات في Studio:

Screenshot of Studio showing the components that were just registered

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

استخدام المكونات المسجلة في ملف مواصفات الوظيفة

في 1b_e2e_registered_components الدليل، افتح pipeline.yml الملف. المفاتيح والقيم في inputsoutputs والقواميس مشابهة لتلك التي تمت مناقشتها بالفعل. الفرق المهم الوحيد هو قيمة command القيم في jobs.<JOB_NAME>.component الإدخالات. component القيمة هي من النموذج azureml:<JOB_NAME>:<COMPONENT_VERSION>. يحدد train-job التعريف، على سبيل المثال، أحدث إصدار من المكون Train المسجل يجب استخدامه:

    training_data: 
      type: uri_folder 
      path: ./data      
    max_epocs: ${{parent.inputs.pipeline_job_training_max_epocs}}
    learning_rate: ${{parent.inputs.pipeline_job_training_learning_rate}}
    learning_rate_schedule: ${{parent.inputs.pipeline_job_learning_rate_schedule}}
  outputs:
    model_output: ${{parent.outputs.pipeline_job_trained_model}}

score_job:
  type: command
  component: azureml:my_score@latest

إعادة استخدام التخزين المؤقت &

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

الأسئلة المتداولة

كيف أعمل تغيير موقع المخرجات التي تم إنشاؤها بواسطة البنية الأساسية لبرنامج ربط العمليات التجارية؟

يمكنك استخدام القسم في settings مهمة البنية الأساسية لبرنامج ربط العمليات التجارية لتحديد مخزن بيانات مختلف لجميع المهام في المسار (راجع السطر 25 - 26 في هذا المثال). تحديد مخزن بيانات مختلف لمهمة معينة أو إخراج معين غير مدعوم حاليا. تحديد المسارات حيث يتم حفظ المخرجات على مخزن البيانات غير مدعوم حاليا أيضا.

كيف أعمل تحديد حساب يمكن استخدامه من قبل جميع الوظائف؟

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

ما هي أنواع الوظائف المدعومة في مهمة البنية الأساسية لبرنامج ربط العمليات التجارية؟

يدعم الإصدار الحالي أنواع مهام الأوامر والمكونات والكنس.

ما هي الأوضاع المختلفة التي أستخدمها مع المدخلات أو المخرجات؟

الفئة الأوضاع المسموح بها افتراضي
مدخلات مجموعة البيانات ro_mount وdownload ro_mount
مدخلات URI ro_mount وrw_mount وdownload ro_mount
المخرجات rw_mount, upload rw_mount

متى يمكنني استخدام مهام الأوامر مقابل مهام المكون؟

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

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

يمكنك استخدام قسم التجاوزات في مهمة المكون لتغيير إعدادات المورد والتوزيع. راجع هذا المثال باستخدام TensorFlow أو هذا المثال باستخدام PyTorch.

كيف يمكنني تحديد بيئة مع تبعيات conda داخل مكون؟

راجع هذا المثال.

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