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

في هذه المقالة، سوف تتعرف على:

  • نظرة عامة على المدخلات والمخرجات في المكون والمسار
  • كيفية ترقية مدخلات/مخرجات المكونات إلى مدخلات/مخرجات البنية الأساسية لبرنامج ربط العمليات التجارية
  • كيفية تعريف المدخلات الاختيارية
  • كيفية تخصيص مسار المخرجات
  • كيفية تنزيل المخرجات
  • كيفية تسجيل المخرجات كأصل مسمى

نظرة عامة على المدخلات والمخرجات

تدعم البنية الأساسية لبرنامج ربط العمليات التجارية التعلم الآلي Azure المدخلات والمخرجات على كل من مستويات المكون والمسار.

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

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

أنواع المدخلات والمخرجات

يتم دعم الأنواع التالية كمخرجات لمكون أو مسار.

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

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

  • في المثال nyc_taxi_data_regression ، يحتوي مكون الإعداد علىuri_folder إخراج نوع. في التعليمات البرمجية لمصدر المكون، يقرأ ملفات csv من مجلد الإدخال، ويعالج الملفات ويكتب ملفات CSV المعالجة إلى مجلد الإخراج.
  • في المثال nyc_taxi_data_regression، يحتوي مكون القطار على mlflow_model إخراج نوع. في التعليمات البرمجية المصدر للمكون، فإنه يحفظ النموذج المدرب باستخدام mlflow.sklearn.save_model الأسلوب .

بالإضافة إلى أنواع البيانات أو النماذج أعلاه، يمكن أن تتبع مدخلات البنية الأساسية لبرنامج ربط العمليات التجارية أو المكونات أيضا أنواعا بدائية.

  • string
  • number
  • integer
  • boolean

في المثال nyc_taxi_data_regression ، يحتوي مكون التدريب على number إدخال يسمى test_split_ratio.

إشعار

إخراج الأنواع الأولية غير مدعوم.

المسار ووضع إدخالات/مخرجات البيانات

بالنسبة لإدخال/إخراج أصول البيانات، يجب تحديد معلمة path تشير إلى موقع البيانات. يعرض هذا الجدول مواقع البيانات المختلفة التي يدعمها Azure التعلم الآلي pipeline، ويعرض أيضا أمثلة معلمات المسار:

الموقع الأمثلة الإدخال الإخراج
مسار على الكمبيوتر المحلي ./home/username/data/my_data
مسار على خادم http(s) عام https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv
مسار على Azure Storage wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
غير مقترح لأنه قد يحتاج إلى تكوين هوية إضافي لقراءة البيانات.
مسار على Azure التعلم الآلي Datastore azureml://datastores/<data_store_name>/paths/<path>
مسار إلى أصل بيانات azureml:<my_data>:<version>

إشعار

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

بالنسبة لإدخال/إخراج البيانات، يمكنك الاختيار من بين أوضاع مختلفة (تنزيل أو تحميل أو تحميل) لتحديد كيفية الوصول إلى البيانات في هدف الحساب. يعرض هذا الجدول الأوضاع المحتملة لمجموعات مختلفة من النوع/الوضع/الإدخال/الإخراج.

نوع إدخال/إخراج upload download ro_mount rw_mount direct eval_download eval_mount
uri_folder الإدخال
uri_file الإدخال
mltable الإدخال
uri_folder الإخراج
uri_file الإخراج
mltable الإخراج

إشعار

في معظم الحالات، نقترح استخدام ro_mount أو rw_mount وضع. لمعرفة المزيد حول الوضع، راجع أوضاع أصول البيانات.

التمثيل المرئي في Azure التعلم الآلي studio

توفر لقطات الشاشة التالية مثالا على كيفية عرض المدخلات والمخرجات في مهمة البنية الأساسية لبرنامج ربط العمليات التجارية في Azure التعلم الآلي studio. يمكن العثور على هذه المهمة المعينة، المسماة nyc-taxi-data-regression، في azureml-example.

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

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

Screenshot highlighting the pipeline input and output port.

عند تمرير الماوس فوق منفذ إدخال/إخراج، يتم عرض النوع.

Screenshot highlighting the port type when hovering the mouse.

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

إذا كنت ترغب في التحقق من إدخالات مكون، فانقر نقرا مزدوجا فوق المكون لفتح لوحة المكون.

Screenshot highlighting the job overview setting panel.

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

Screenshot highlighting the pipeline interface in designer.

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

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

فيما يلي أمثلة لتعزيز مدخلات/مخرجات المكونات إلى مدخلات/مخرجات مستوى البنية الأساسية لبرنامج ربط العمليات التجارية.

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: 1b_e2e_registered_components
description: E2E dummy train-score-eval pipeline with registered components

inputs:
  pipeline_job_training_max_epocs: 20
  pipeline_job_training_learning_rate: 1.8
  pipeline_job_learning_rate_schedule: 'time-based'

outputs: 
  pipeline_job_trained_model:
    mode: upload
  pipeline_job_scored_data:
    mode: upload
  pipeline_job_evaluation_report:
    mode: upload

settings:
 default_compute: azureml:cpu-cluster

jobs:
  train_job:
    type: command
    component: azureml:my_train@latest
    inputs:
      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}}
    services:
      my_vscode:
        type: vs_code
      my_jupyter_lab:
        type: jupyter_lab
      my_tensorboard:
        type: tensor_board
        log_dir: "outputs/tblogs"
    #  my_ssh:
    #    type: tensor_board
    #    ssh_public_keys: <paste the entire pub key content>
    #    nodes: all # Use the `nodes` property to pick which node you want to enable interactive services on. If `nodes` are not selected, by default, interactive applications are only enabled on the head node.

  score_job:
    type: command
    component: azureml:my_score@latest
    inputs:
      model_input: ${{parent.jobs.train_job.outputs.model_output}}
      test_data: 
        type: uri_folder 
        path: ./data
    outputs:
      score_output: ${{parent.outputs.pipeline_job_scored_data}}

  evaluate_job:
    type: command
    component: azureml:my_eval@latest
    inputs:
      scoring_result: ${{parent.jobs.score_job.outputs.score_output}}
    outputs:
      eval_output: ${{parent.outputs.pipeline_job_evaluation_report}}

يمكن العثور على المثال الكامل في البنية الأساسية لبرنامج ربط العمليات التجارية train-score-eval مع المكونات المسجلة. يقوم هذا المسار بترقية ثلاثة مدخلات وثلاثة مخرجات إلى مستوى البنية الأساسية لبرنامج ربط العمليات التجارية. لنأخذ pipeline_job_training_max_epocs على سبيل المثال. يتم الإعلان عنه ضمن inputs القسم على مستوى الجذر، ما يعني إدخال مستوى البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة به. ضمن jobs -> train_job القسم ، تتم الإشارة إلى الإدخال المسمى max_epocs باسم ${{parent.inputs.pipeline_job_training_max_epocs}}، والذي يشير إلى أن الإدخال max_epocs يشير إلى train_jobإدخال مستوى البنية الأساسية لبرنامج ربط العمليات التجارية pipeline_job_training_max_epocs. وبالمثل، يمكنك ترقية إخراج البنية الأساسية لبرنامج ربط العمليات التجارية باستخدام نفس المخطط.

Studio

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

Screenshot highlighting how to promote to pipeline input in designer.

إدخال اختياري

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

يمكن أن يكون الإدخال الاختياري مفيدا في سيناريوهين أدناه:

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

  • توفر لقطة الشاشة أدناه مثالا واضحا للسيناريو الثاني. إذا قمت بتعيين continue_on_step_failure = True للبنية الأساسية لبرنامج ربط العمليات التجارية ولديك عقدة ثانية (node2) تستخدم الإخراج من العقدة الأولى (node1) كإدخل اختياري، فسيظل يتم تنفيذ node2 حتى إذا فشلت node1. ومع ذلك، إذا كانت node2 تستخدم الإدخال المطلوب من node1، فلن يتم تنفيذها إذا فشلت node1.

    Screenshot to show the orchestration logic of optional input and continue on failure.

فيما يلي أمثلة حول كيفية تعريف الإدخال الاختياري.

$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
name: train_data_component_cli
display_name: train_data
description: A example train component
tags:
  author: azureml-sdk-team
type: command
inputs:
  training_data: 
    type: uri_folder
  max_epocs:
    type: integer
    optional: true
  learning_rate: 
    type: number
    default: 0.01
    optional: true
  learning_rate_schedule: 
    type: string
    default: time-based
    optional: true
outputs:
  model_output:
    type: uri_folder
code: ./train_src
environment: azureml://registries/azureml/environments/sklearn-1.0/labels/latest
command: >-
  python train.py 
  --training_data ${{inputs.training_data}} 
  $[[--max_epocs ${{inputs.max_epocs}}]]
  $[[--learning_rate ${{inputs.learning_rate}}]]
  $[[--learning_rate_schedule ${{inputs.learning_rate_schedule}}]]
  --model_output ${{outputs.model_output}}

عند تعيين الإدخال على أنه optional = true، تحتاج إلى استخدام $[[]] لاحتضان سطر الأوامر مع المدخلات. راجع الخط المميز في المثال أعلاه.

إشعار

الإخراج الاختياري غير معتمد.

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

Screenshot highlighting the optional input.

كيفية تخصيص مسار الإخراج

بشكل افتراضي، سيتم تخزين إخراج مكون في azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}. {default_datastore} هو عميل مخزن البيانات الافتراضي الذي تم تعيينه للبنية الأساسية لبرنامج ربط العمليات التجارية. إذا لم يتم تعيينه، فهو تخزين كائن ثنائي كبير الحجم لمساحة العمل. {name} هو اسم الوظيفة، والذي سيتم حله في وقت تنفيذ الوظيفة. {output_name} هو اسم الإخراج الذي تم تعريفه للعميل في المكون YAML.

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

pipeline.yaml يعرف البنية الأساسية لبرنامج ربط العمليات التجارية التي تحتوي على ثلاثة مخرجات على مستوى البنية الأساسية لبرنامج ربط العمليات التجارية. يمكن العثور على YAML الكامل في مسار train-score-eval مع مثال المكونات المسجلة. يمكنك استخدام الأمر التالي لتعيين مسار إخراج مخصص للإخراج pipeline_job_trained_model.

# define the custom output path using datastore uri
# add relative path to your blob container after "azureml://datastores/<datastore_name>/paths"
output_path="azureml://datastores/{datastore_name}/paths/{relative_path_of_container}"  

# create job and define path using --outputs.<outputname>
az ml job create -f ./pipeline.yml --set outputs.pipeline_job_trained_model.path=$output_path  

كيفية تنزيل الإخراج

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

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

# Download all the outputs of the job
az ml job download --all -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>

# Download specific output
az ml job download --output-name <OUTPUT_PORT_NAME> -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>

تنزيل مخرجات الوظيفة التابعة

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

# List all child jobs in the job and print job details in table format
az ml job list --parent-job-name <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID> -o table

# Select needed child job name to download output
az ml job download --all -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>

كيفية تسجيل الإخراج كأصل مسمى

يمكنك تسجيل إخراج مكون أو مسار كأصل مسمى عن طريق تعيين name و version إلى الإخراج. يمكن إدراج الأصل المسجل في مساحة العمل الخاصة بك من خلال studio UI/CLI/SDK كما يمكن الرجوع إليه في مهامك المستقبلية.

تسجيل إخراج البنية الأساسية لبرنامج ربط العمليات التجارية

display_name: register_pipeline_output
type: pipeline
jobs:
  node:
    type: command
    inputs:
      component_in_path:
        type: uri_file
        path: https://dprepdata.blob.core.windows.net/demo/Titanic.csv
    component: ../components/helloworld_component.yml
    outputs:
      component_out_path: ${{parent.outputs.component_out_path}}
outputs:
  component_out_path:
    type: mltable
    name: pipeline_output  # Define name and version to register pipeline output
    version: '1'
settings:
  default_compute: azureml:cpu-cluster

تسجيل إخراج وظيفة تابعة

display_name: register_node_output
type: pipeline
jobs:
  node:
    type: command
    component: ../components/helloworld_component.yml
    inputs:
      component_in_path:
        type: uri_file
        path: 'https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
    outputs:
      component_out_path:
        type: uri_folder
        name: 'node_output'  # Define name and version to register a child job's output
        version: '1'
settings:
  default_compute: azureml:cpu-cluster

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