بنية CLI (v2) الأساسية لـ YAML
ينطبق على:ملحق CLI للتعلم الآلي من Microsoft Azure v2 (الحالي)
يحتوي كل كيان التعلم الآلي من Microsoft Azure على تمثيل YAML مخطط. يمكنك إنشاء كيان جديد من ملف تكوين YAML باستخدام ملحق .yml
أو .yaml
.
تقدم هذه المقالة نظرة عامة على مفاهيم بناء الجملة الأساسية التي ستواجهها أثناء تكوين ملفات YAML هذه.
الرجوع إلى كيان Azure التعلم الآلي
يوفر Azure التعلم الآلي بناء جملة مرجعيا (يتكون من اختصار وتنسيق طويل) للإشارة إلى كيان Azure التعلم الآلي موجود عند تكوين ملف YAML. على سبيل المثال، يمكنك الرجوع إلى بيئة مسجلة موجودة في مساحة العمل لاستخدامها كبيئة لوظيفة.
الرجوع إلى أصل Azure التعلم الآلي
هناك خياران للإشارة إلى أصل Azure التعلم الآلي (البيئات والنماذج والبيانات والمكونات):
الرجوع إلى إصدار صريح من أصل:
- بناء جملة الاختصار:
azureml:<asset_name>:<asset_version>
- بناء جملة Longhand، والذي يتضمن معرف مورد Azure Resource Manager (ARM) للأصل:
azureml:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/environments/<environment-name>/versions/<environment-version>
- بناء جملة الاختصار:
الرجوع إلى أحدث إصدار من أصل:
في بعض السيناريوهات، قد ترغب في الإشارة إلى أحدث إصدار من أحد الأصول دون الحاجة إلى البحث بوضوح عن سلسلة الإصدار الفعلية نفسها وتحديدها. يتم تعريف أحدث إصدار على أنه أحدث إصدار تم إنشاؤه (المعروف أيضاً باسم الأحدث) من أصل تحت اسم معين.
يمكنك الرجوع إلى أحدث إصدار باستخدام بناء الجملة التالي:
azureml:<asset_name>@latest
. سيقوم Azure التعلم الآلي بحل المرجع إلى إصدار أصل صريح في مساحة العمل.
الرجوع إلى مورد Azure التعلم الآلي
للإشارة إلى مورد Azure التعلم الآلي (مثل الحساب)، يمكنك استخدام أي من بناء الجمل التالية:
- بناء جملة الاختصار:
azureml:<resource_name>
- بناء جملة Longhand، والذي يتضمن معرف مورد ARM للمورد:
azureml:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/computes/<compute-name>
URI لمرجع بيانات Azure التعلم الآلي
يوفر Azure التعلم الآلي تنسيق URI لمرجع بيانات ملائم للإشارة إلى البيانات في خدمة تخزين Azure. يمكن استخدام هذا للسيناريوهات التي تحتاج فيها إلى تحديد موقع تخزين سحابي في ملف YAML، مثل إنشاء نموذج Azure التعلم الآلي من ملف (ملفات) في التخزين، أو الإشارة إلى البيانات لتمريرها كمدخل إلى وظيفة.
لاستخدام تنسيق URI للبيانات هذا، يجب أولا تسجيل خدمة التخزين التي تريد الرجوع إليها كمخزن بيانات في مساحة العمل الخاصة بك. سيتعامل Azure التعلم الآلي مع الوصول إلى البيانات باستخدام بيانات الاعتماد التي قدمتها أثناء إنشاء مخزن البيانات.
يتكون التنسيق من مخزن بيانات في مساحة العمل الحالية والمسار على مخزن البيانات إلى الملف أو المجلد الذي تريد الإشارة إليه:
azureml://datastores/<datastore-name>/paths/<path-on-datastore>/
على سبيل المثال:
azureml://datastores/workspaceblobstore/paths/example-data/
azureml://datastores/workspaceblobstore/paths/example-data/iris.csv
بالإضافة إلى URI لمرجع بيانات Azure التعلم الآلي، يدعم Azure التعلم الآلي أيضا بروتوكولات URI للتخزين المباشر التالية: https
و abfss
wasbs
و adl
بالإضافة إلى عناوين URL العامة http
وhttps
.
بناء جملة التعبير لتكوين وظائف ومكونات Azure التعلم الآلي
تسمح ملفات YAML للمهمة والمكون v2 باستخدام التعبيرات للربط بالسياقات لسيناريوهات مختلفة. تستخدم حالة الاستخدام الأساسية تعبيراً لقيمة قد لا تكون معروفة في وقت تأليف التكوين، ولكن يجب حلها في وقت التشغيل.
استخدم بناء الجملة التالي لإخبار Azure التعلم الآلي بتقييم تعبير بدلا من معاملته كسلسلة:
${{ <expression> }}
تتم تغطية السيناريوهات المدعومة أدناه.
وضع معلمات command
مع inputs
و outputs
سياقات الوظيفة
يمكنك تحديد القيم الحرفية ومسارات URI وأصول بيانات Azure التعلم الآلي المسجلة كمدخلات لوظيفة. command
يمكن بعد ذلك وضع معلمات مع مراجع لتلك الإدخالات (الإدخالات) باستخدام بناء الجملة${{inputs.<input_name>}}
. سيتم حل المراجع إلى المدخلات الحرفية إلى القيمة الحرفية في وقت التشغيل، بينما سيتم حل المراجع إلى مدخلات البيانات إلى مسار التنزيل أو مسار التحميل (اعتماداً على mode
المحدد).
وبالمثل، يمكن أيضاً الرجوع إلى المخرجات إلى الوظيفة في command
. لكل إخراج مسمى محدد في outputs
القاموس، سيقوم Azure التعلم الآلي بإنشاء موقع إخراج للنظام على مخزن البيانات الافتراضي حيث يمكنك كتابة الملفات إليه. يعتمد موقع الإخراج لكل إخراج مسمى على المسار المعتم التالي: <default-datastore>/azureml/<job-name>/<output_name>/
. سيؤدي وضع معلمات command
مع ${{outputs.<output_name>}}
بناء الجملة إلى حل هذا المرجع إلى المسار الذي أنشأه النظام، بحيث يمكن للبرنامج النصي الخاص بك كتابة الملفات إلى هذا الموقع من الوظيفة.
في المثال أدناه لملف YAML لمهمة أمر، command
يتم وضع معلمات مع إدخالين، وإدخال حرفي وإدخال بيانات، وإخراج واحد. في وقت التشغيل، ${{inputs.learning_rate}}
سيتم حل التعبير إلى 0.01
، و ${{inputs.iris}}
سيتم حل التعبير إلى مسار تنزيل iris.csv
الملف. ${{outputs.model_dir}}
سيتم حل إلى مسار التحميل لموقع الإخراج الذي أنشأه النظام والمطابق model_dir
للإخراج.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: ./src
command: python train.py --lr ${{inputs.learning_rate}} --training-data ${{inputs.iris}} --model-dir ${{outputs.model_dir}}
environment: azureml:AzureML-Minimal@latest
compute: azureml:cpu-cluster
inputs:
learning_rate: 0.01
iris:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
mode: download
outputs:
model_dir:
وضع معلمات command
مع search_space
سياق مهمة المسح
ستستخدم أيضاً بناء جملة التعبير هذا عند إجراء ضبط المعلمات الفائقة عبر مهمة مسح، نظراً لأن القيم الفعلية للمعلمات الفائقة غير معروفة أثناء وقت تأليف الوظيفة. عند تشغيل مهمة مسح، سيقوم Azure التعلم الآلي بتحديد قيم المعلمات الفائقة لكل إصدار تجريبي استنادا search_space
إلى . للوصول إلى هذه القيم في البرنامج النصي للتدريب الخاص بك، يجب تمريرها عبر وسيطات سطر الأوامر الخاصة بالبرنامج النصي. للقيام بذلك، استخدم ${{search_space.<hyperparameter>}}
بناء الجملة في trial.command
.
في المثال أدناه لملف YAML لمهمة المسح، سيتم حل المراجع ${{search_space.learning_rate}}
و ${{search_space.boosting}}
في trial.command
قيم hyperparameter الفعلية المحددة لكل إصدار تجريبي عند إرسال مهمة الإصدار التجريبي للتنفيذ.
$schema: https://azuremlschemas.azureedge.net/latest/sweepJob.schema.json
type: sweep
sampling_algorithm:
type: random
search_space:
learning_rate:
type: uniform
min_value: 0.01
max_value: 0.9
boosting:
type: choice
values: ["gbdt", "dart"]
objective:
goal: minimize
primary_metric: test-multi_logloss
trial:
code: ./src
command: >-
python train.py
--training-data ${{inputs.iris}}
--lr ${{search_space.learning_rate}}
--boosting ${{search_space.boosting}}
environment: azureml:AzureML-Minimal@latest
inputs:
iris:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
mode: download
compute: azureml:cpu-cluster
ربط المدخلات والمخرجات بين الخطوات في وظيفة المسارات
تُستخدم التعبيرات أيضاً لربط المدخلات والمخرجات بين الخطوات في وظيفة المسارات. على سبيل المثال، يمكنك ربط إدخال وظيفة واحدة (الوظيفة ب) في مسار لإخراج وظيفة أخرى (الوظيفة أ). سيشير هذا الاستخدام إلى Azure التعلم الآلي تدفق التبعية للرسم البياني للبنية الأساسية لبرنامج ربط العمليات التجارية، وسيتم تنفيذ المهمة B بعد المهمة A، نظرا لأن إخراج الوظيفة A مطلوب كمدخل للوظيفة B.
بالنسبة لملف YAML للبنية الأساسية لبرنامج ربط العمليات التجارية، يتم تقييم inputs
و outputs
أقسام كل وظيفة فرعية ضمن السياق الأصلي (وظيفة البنية الأساسية لبرنامج ربط العمليات التجارية ذات المستوى الأعلى). command
من ناحية أخرى، سيتم حل إلى السياق الحالي (الوظيفة التابعة).
هناك طريقتان لربط المدخلات والمخرجات في مهمة البنية الأساسية لبرنامج ربط العمليات التجارية:
الربط بمدخلات ومخرجات المستوى الأعلى لمهمة البنية الأساسية لبرنامج ربط العمليات التجارية
يمكنك ربط مدخلات أو مخرجات مهمة تابعة (خطوة البنية الأساسية لبرنامج ربط العمليات التجارية) بمدخلات/مخرجات مهمة البنية الأساسية لبرنامج ربط العمليات التجارية الأصل ذات المستوى الأعلى باستخدام بناء الجملة التالي: ${{parent.inputs.<input_name>}}
أو ${{parent.outputs.<output_name>}}
. يحل هذا المرجع إلى parent
السياق؛ ومن ثم مدخلات/مخرجات المستوى الأعلى.
في المثال أدناه، يرتبط إدخال (raw_data
) الخطوة prep
الأولى بإدخال البنية الأساسية لبرنامج ربط العمليات التجارية من المستوى الأعلى عبر ${{parent.inputs.input_data}}
. يرتبط الإخراج (model_dir
) للخطوة train
النهائية بإخراج مهمة البنية الأساسية لبرنامج ربط العمليات التجارية من المستوى الأعلى عبر ${{parent.outputs.trained_model}}
.
الربط بمدخلات ومخرجات وظيفة تابعة أخرى (خطوة)
لربط المدخلات/المخرجات لخطوة واحدة بالمدخلات/المخرجات لخطوة أخرى، استخدم بناء الجملة التالي: ${{parent.jobs.<step_name>.inputs.<input_name>}}
أو ${{parent.jobs.<step_name>.outputs.<outputs_name>}}
. مرة أخرى، يحل هذا المرجع إلى السياق الأصل، لذلك يجب أن يبدأ التعبير بـ parent.jobs.<step_name>
.
في المثال أدناه، يرتبط الإدخال (training_data
) للخطوة train
بإخراج (clean_data
) prep
الخطوة عبر ${{parent.jobs.prep.outputs.clean_data}}
. سيتم استخدام البيانات المعدة prep
من الخطوة كبيانات تدريب train
للخطوة.
من ناحية أخرى، سيتم حل مراجع السياق داخل command
الخصائص إلى السياق الحالي. على سبيل المثال، ${{inputs.raw_data}}
سيتم حل المرجع في prep
الخطوة command
إلى مدخلات السياق الحالي، وهي prep
الوظيفة التابعة. سيتم إجراء البحث على prep.inputs
، لذلك يجب تعريف إدخال مسمى raw_data
هناك.
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
inputs:
input_data:
type: uri_folder
path: https://azuremlexamples.blob.core.windows.net/datasets/cifar10/
outputs:
trained_model:
jobs:
prep:
type: command
inputs:
raw_data: ${{parent.inputs.input_data}}
outputs:
clean_data:
code: src/prep
environment: azureml:AzureML-Minimal@latest
command: >-
python prep.py
--raw-data ${{inputs.raw_data}}
--prep-data ${{outputs.clean_data}}
compute: azureml:cpu-cluster
train:
type: command
inputs:
training_data: ${{parent.jobs.prep.outputs.clean_data}}
num_epochs: 1000
outputs:
model_dir: ${{parent.outputs.trained_model}}
code: src/train
environment: azureml:AzureML-Minimal@latest
command: >-
python train.py
--epochs ${{inputs.num_epochs}}
--training-data ${{inputs.training_data}}
--model-output ${{outputs.model_dir}}
compute: azureml:gpu-cluster
وضع معلمات command
مع inputs
و outputs
سياقات التكوين
على غرار command
وظيفة ما، command
يمكن أيضاً تحديد معلمات للمكون مع مراجع للسياقين inputs
و outputs
. في هذه الحالة، يكون المرجع إلى مدخلات المكون ومخرجاته. عند تشغيل المكون في وظيفة، سيقوم Azure التعلم الآلي بحل هذه المراجع إلى قيم الإدخال والإخراج لوقت تشغيل الوظيفة المحددة لإدخالات المكون المعني ومخرجاته. فيما يلي مثال على استخدام بناء جملة السياق لمواصفات YAML لمكون أمر.
$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
version: 9
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
، تحتاج إلى استخدام $[[]]
لاحتضان سطر الأوامر مع المدخلات. على سبيل المثال$[[--input1 ${{inputs.input1}}]
. قد يحتوي سطر الأوامر في وقت التشغيل على مدخلات مختلفة.
- إذا كنت تستخدم المعلمات المطلوبة
training_data
model_output
فقط، فسيبدو سطر الأوامر كما يلي:
python train.py --training_data some_input_path --learning_rate 0.01 --learning_rate_schedule time-based --model_output some_output_path
إذا لم يتم تحديد أي قيمة في وقت التشغيل، learning_rate
learning_rate_schedule
وسوف تستخدم القيمة الافتراضية.
- إذا كانت جميع المدخلات/المخرجات توفر قيما أثناء وقت التشغيل، فسيبدو سطر الأوامر كما يلي:
python train.py --training_data some_input_path --max_epocs 10 --learning_rate 0.01 --learning_rate_schedule time-based --model_output some_output_path
تعبيرات مسار الإخراج
يمكن استخدام التعبيرات التالية في مسار إخراج وظيفتك:
هام
يتم حل التعبيرات التالية على جانب الخادم ، وليس من جانب العميل . بالنسبة للوظائف المجدولة حيث يختلف وقت إنشاء الوظيفة ووقت إرسال الوظيفة، يتم حل التعبيرات عند إرسال الوظيفة. نظرا لحل هذه التعبيرات على جانب الخادم، فإنها تستخدم الحالة الحالية لمساحة العمل، وليس حالة مساحة العمل عند إنشاء المهمة المجدولة. على سبيل المثال، إذا قمت بتغيير مخزن البيانات الافتراضي لمساحة العمل بعد إنشاء مهمة مجدولة، يتم حل التعبير ${{default_datastore}}
إلى مخزن البيانات الافتراضي الجديد، وليس مخزن البيانات الافتراضي عند إنشاء المهمة المجدولة.
تعبير | الوصف | Scope |
---|---|---|
${{default_datastore}} |
إذا تم تكوين مخزن البيانات الافتراضي للبنية الأساسية لبرنامج ربط العمليات التجارية، يتم حله كاسم مخزن بيانات افتراضي للبنية الأساسية لبرنامج ربط العمليات التجارية؛ وإلا يتم حلها كاسم مخزن بيانات افتراضي لمساحة العمل. يمكن التحكم في مخزن البيانات الافتراضي للبنية الأساسية لبرنامج ربط العمليات التجارية باستخدام pipeline_job.settings.default_datastore . |
يعمل لجميع الوظائف. تحتوي مهام البنية الأساسية لبرنامج ربط العمليات التجارية على مخزن بيانات افتراضي للبنية الأساسية لبرنامج ربط العمليات التجارية قابل للتكوين. |
${{name}} |
اسم الوظيفة. بالنسبة للبنية الأساسية لبرنامج ربط العمليات التجارية، إنه اسم مهمة الخطوة، وليس اسم مهمة البنية الأساسية لبرنامج ربط العمليات التجارية. | يعمل لجميع الوظائف |
${{output_name}} |
اسم إخراج الوظيفة | يعمل لجميع الوظائف |
على سبيل المثال، إذا azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
تم استخدام كمسار الإخراج، في وقت التشغيل يتم حله كمسار ل azureml://datastores/workspaceblobstore/paths/<job-name>/model_path
.