Bileşenler ve işlem hatları için girişleri ve çıkışları yönetme
Azure Machine Learning işlem hatları hem bileşen hem de işlem hattı düzeylerinde girişleri ve çıkışları destekler. Bu makalede işlem hattı ve bileşen girişleri ile çıkışları ve bunların nasıl yönetileceğini açıklanmaktadır.
Bileşen düzeyinde girişler ve çıkışlar bileşen arabirimini tanımlar. Bir bileşenin çıkışını aynı üst işlem hattındaki başka bir bileşen için giriş olarak kullanabilir ve bileşenler arasında veri veya modellerin geçirilmesini sağlayabilirsiniz. Bu bağlantı, işlem hattı içindeki veri akışını temsil eder.
İşlem hattı düzeyinde, giriş ve çıkışları kullanarak farklı veri girişlerine veya parametrelerine sahip işlem hattı işlerini gönderebilirsiniz.learning_rate
Girişler ve çıkışlar özellikle BIR REST uç noktası aracılığıyla işlem hattı çağırdığınızda kullanışlıdır. İşlem hattı girişine farklı değerler atayabilir veya farklı işlem hattı işlerinin çıkışına erişebilirsiniz. Daha fazla bilgi için bkz . Toplu iş uç noktaları için iş ve giriş verileri oluşturma.
Giriş ve çıkış türleri
Aşağıdaki türler, bileşenlerin veya işlem hatlarının hem girişleri hem de çıkışları olarak desteklenir:
Veri türleri. Daha fazla bilgi için bkz. Veri türleri.
uri_file
uri_folder
mltable
Model türleri.
mlflow_model
custom_model
Aşağıdaki ilkel türler yalnızca girişler için de desteklenir:
- İlkel türler
string
number
integer
boolean
Temel tür çıkışı desteklenmez.
Örnek girişler ve çıkışlar
Bu örnekler, Azure Machine Learning örnekleri GitHub deposundaki NYC Taxi Data Regression işlem hattından alınmaktadır.
- Tren bileşeni adlı
test_split_ratio
birnumber
girişe sahiptir. - Hazırlık bileşeninin bir
uri_folder
tür çıkışı vardır. Bileşen kaynak kodu giriş klasöründen CSV dosyalarını okur, dosyaları işler ve işlenen CSV dosyalarını çıkış klasörüne yazar. - Tren bileşeni bir
mlflow_model
tür çıkışına sahiptir. Bileşen kaynak kodu, yöntemini kullanarakmlflow.sklearn.save_model
eğitilen modeli kaydeder.
Çıktı serileştirme
Veri veya model çıkışlarının kullanılması çıkışları seri hale getirir ve bunları bir depolama konumuna dosya olarak kaydeder. Sonraki adımlar, bu depolama konumunu takarak veya dosyaları indirerek veya işlem dosya sistemine yükleyerek iş yürütme sırasında dosyalara erişebilir.
Bileşen kaynak kodu genellikle bellekte depolanan çıkış nesnesini dosyalar halinde seri hale getirmelidir. Örneğin, bir pandas veri çerçevesini CSV dosyasında seri hale getirebilirsiniz. Azure Machine Learning, nesne serileştirme için standartlaştırılmış yöntem tanımlamaz. Nesneleri dosyalar halinde seri hale getirmek için tercih ettiğiniz yöntemleri seçme esnekliğine sahipsiniz. Aşağı akış bileşeninde, bu dosyaların seri durumdan çıkarılıp okunmasını seçebilirsiniz.
Veri türü giriş ve çıkış yolları
Veri varlığı girişleri ve çıkışları için veri konumuna işaret eden bir yol parametresi belirtmeniz gerekir. Aşağıdaki tabloda, parametre örnekleriyle birlikte path
Azure Machine Learning işlem hattı giriş ve çıkışları için desteklenen veri konumları gösterilmektedir.
Konum | Girdi | Çıktı | Örnek |
---|---|---|---|
Yerel bilgisayarınızdaki bir yol | ✓ | ./home/<username>/data/my_data |
|
Ortak http/s sunucusundaki bir yol | ✓ | https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv |
|
Azure Depolama'da bir yol | * | wasbs://<container_name>@<account_name>.blob.core.windows.net/<path> veya abfss://<file_system>@<account_name>.dfs.core.windows.net/<path> |
|
Azure Machine Learning veri deposundaki yol | ✓ | ✓ | azureml://datastores/<data_store_name>/paths/<path> |
Veri varlığının yolu | ✓ | ✓ | azureml:my_data:<version> |
* Verileri okumak için ek kimlik yapılandırması gerekebileceğinden giriş için Azure Depolama'nın doğrudan kullanılması önerilmez. Çeşitli işlem hattı iş türlerinde desteklenen Azure Machine Learning veri deposu yollarını kullanmak daha iyidir.
Veri türü giriş ve çıkış modları
Veri türü girişleri ve çıkışları için, işlem hedefinin verilere nasıl erişeceğini tanımlamak için çeşitli indirme, karşıya yükleme ve bağlama modlarından birini seçebilirsiniz. Aşağıdaki tabloda farklı giriş ve çıkış türleri için desteklenen modlar gösterilmektedir.
Tür | upload |
download |
ro_mount |
rw_mount |
direct |
eval_download |
eval_mount |
---|---|---|---|---|---|---|---|
uri_folder girdi |
✓ | ✓ | ✓ | ||||
uri_file girdi |
✓ | ✓ | ✓ | ||||
mltable girdi |
✓ | ✓ | ✓ | ✓ | ✓ | ||
uri_folder çıktı |
✓ | ✓ | |||||
uri_file çıktı |
✓ | ✓ | |||||
mltable çıktı |
✓ | ✓ | ✓ |
Veya ro_mount
rw_mount
modları çoğu durumda önerilir. Daha fazla bilgi için bkz . Modlar.
İşlem hattı grafiklerindeki girişler ve çıkışlar
Azure Machine Learning stüdyosu'daki işlem hattı işi sayfasında, bileşen girişleri ve çıkışları giriş/çıkış bağlantı noktaları olarak adlandırılan küçük daireler olarak görünür. Bu bağlantı noktaları işlem hattındaki veri akışını temsil eder. İşlem hattı düzeyi çıkışı, kolay tanımlama için mor kutularda görüntülenir.
NYC Taxi Veri Regresyon işlem hattı grafiğinin aşağıdaki ekran görüntüsünde birçok bileşen ve işlem hattı girişi ve çıkışı gösterilmektedir.
Bir giriş/çıkış bağlantı noktasının üzerine geldiğinizde, tür görüntülenir.
İşlem hattı grafı ilkel tür girişlerini görüntülemez. Bu girişler, işlem hattı düzeyinde girişler için işlem hattı İşine genel bakış panelinin Ayarlar sekmesinde veya bileşen düzeyi girişleri için bileşen panelinde görünür. Bileşen panelini açmak için grafikteki bileşene çift tıklayın.
Studio Designer'da bir işlem hattını düzenlediğinizde işlem hattı girişleri ve çıkışları İşlem hattı arabirim panelinde, bileşen girişleri ve çıkışları ise bileşen panelinde yer alır.
Bileşen girişlerini/çıkışlarını işlem hattı düzeyine yükseltme
Bir bileşenin giriş/çıkışını işlem hattı düzeyine yükseltme, işlem hattı işi gönderdiğinizde bileşenin giriş/çıkışının üzerine yazmanıza olanak tanır. Bu özellik özellikle REST uç noktalarını kullanarak işlem hatlarını tetiklemede kullanışlıdır.
Aşağıdaki örneklerde bileşen düzeyi girişlerinin/çıkışlarının işlem hattı düzeyi girişlerine/çıkışlarına nasıl yükseltilebilecekleri gösterilmektedir.
Aşağıdaki işlem hattı, üç girişi ve üç çıkışı işlem hattı düzeyine yükseltmektedir. Örneğin, pipeline_job_training_max_epocs
kök düzeyindeki bölümü altında inputs
bildirildiği için işlem hattı düzeyi girişidir.
train_job
jobs
bölümünde altında adlı max_epocs
girişe olarak ${{parent.inputs.pipeline_job_training_max_epocs}}
başvurulur, yani train_job
'nin max_epocs
girişi işlem hattı düzeyindeki pipeline_job_training_max_epocs
girişe başvurur. İşlem hattı çıkışı aynı şema kullanılarak yükseltilir.
$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}}
Tam örneği , kayıtlı bileşenlere sahip train-score-eval işlem hattında Azure Machine Learning örnekleri deposunda bulabilirsiniz.
İsteğe bağlı girişleri tanımlama
Varsayılan olarak, tüm girişler gereklidir ve varsayılan bir değere sahip olmalıdır veya her işlem hattı işi gönderdiğinizde bir değer atanmalıdır. Ancak, isteğe bağlı bir giriş tanımlayabilirsiniz.
Not
İsteğe bağlı çıkışlar desteklenmez.
İsteğe bağlı girişleri ayarlamak iki senaryoda yararlı olabilir:
İsteğe bağlı bir veri/model türü girişi tanımlarsanız ve işlem hattı işini gönderirken buna değer atamazsanız, işlem hattı bileşeninde bu veri bağımlılığı yoktur. Bileşenin giriş bağlantı noktası herhangi bir bileşene veya veri/model düğümüne bağlı değilse, işlem hattı önceki bir bağımlılığı beklemek yerine bileşeni doğrudan çağırır.
İşlem hattı için ayarlar
continue_on_step_failure = True
ancak öğesindennode2
node1
gerekli girişi kullanırsanız, başarısız olursanode1
yürütülmüyor.node2
Giriş isteğe bağlıysanode1
,node2
başarısız olsanode1
bile yürütülür. Aşağıdaki grafikte bu senaryo gösterilmektedir.
Aşağıdaki kod örneğinde isteğe bağlı girişin nasıl tanımlanacağı gösterilmektedir. Giriş olarak optional = true
ayarlandığında, örneğin vurgulanan satırlarında olduğu gibi komut satırı girişlerini benimsemek için komutunu kullanmanız $[[]]
gerekir.
$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.5/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}}
Çıkış yollarını özelleştirme
Varsayılan olarak, bileşen çıkışı işlem hattı azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
için ayarladığınız içinde {default_datastore}
depolanır. Ayarlanmadıysa, varsayılan değer çalışma alanı blob depolama alanıdır.
İş {name}
, iş yürütme zamanında çözümlenir ve {output_name}
YAML bileşeninde tanımladığınız addır. Çıkış yolunu tanımlayarak çıkışın depolandığı yeri özelleştirebilirsiniz.
Kayıtlı bileşenlere sahip train-score-eval işlem hattındaki pipeline.yml dosyası, üç işlem hattı düzeyinde çıkışı olan bir işlem hattı tanımlar. Çıktı için özel çıkış yolları ayarlamak için pipeline_job_trained_model
aşağıdaki komutu kullanabilirsiniz.
# 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
Çıkışları indirme
Çıkışları işlem hattı veya bileşen düzeyinde indirebilirsiniz.
İşlem hattı düzeyi çıkışlarını indirme
Bir işin tüm çıkışlarını indirebilir veya belirli bir çıkışı indirebilirsiniz.
# 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 a specific output
az ml job download --output-name <OUTPUT_PORT_NAME> -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>
Bileşen çıkışlarını indirme
Bir alt bileşenin çıkışlarını indirmek için önce işlem hattı işinin tüm alt işlerini listeleyin ve ardından çıkışları indirmek için benzer kodu kullanın.
# 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 the desired child job name to download output
az ml job download --all -n <JOB_NAME> -g <RESOURCE_GROUP_NAME> -w <WORKSPACE_NAME> --subscription <SUBSCRIPTION_ID>
Çıkışı adlandırılmış varlık olarak kaydetme
Bir bileşen veya işlem hattının çıkışını, çıkışa ve version
atayarak name
adlandırılmış varlık olarak kaydedebilirsiniz. Kayıtlı varlık, çalışma alanınızda stüdyo kullanıcı arabirimi, CLI veya SDK aracılığıyla listelenebilir ve gelecekteki çalışma alanı işlerinde başvurulabilir.
İşlem hattı düzeyi çıkışını kaydetme
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
Bileşen çıkışını kaydetme
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