Mengelola input dan output komponen dan alur
Dalam artikel ini, Anda belajar tentang:
- Gambaran umum input dan output dalam komponen dan alur
- Cara mempromosikan input/output komponen ke input/output alur
- Cara menentukan input opsional
- Cara menyesuaikan jalur output
- Cara mengunduh output
- Cara mendaftarkan output sebagai aset bernama
Gambaran umum input & output
Alur Azure Pembelajaran Mesin mendukung input dan output di tingkat komponen dan alur.
Pada tingkat komponen, input dan output menentukan antarmuka komponen. Output dari satu komponen dapat digunakan sebagai input untuk komponen lain dalam alur induk yang sama, memungkinkan data atau model diteruskan di antara komponen. Interkonektivitas ini membentuk grafik, yang mengilustrasikan aliran data dalam alur.
Pada tingkat alur, input dan output berguna untuk mengirimkan pekerjaan alur dengan berbagai input data atau parameter yang mengontrol logika pelatihan (misalnya learning_rate
). Mereka sangat berguna saat memanggil alur melalui titik akhir REST. Input dan output ini memungkinkan Anda menetapkan nilai yang berbeda ke input alur atau mengakses output pekerjaan alur melalui titik akhir REST. Untuk mempelajari selengkapnya, lihat Membuat Pekerjaan dan Data Input untuk Titik Akhir Batch.
Jenis Input dan Output
Jenis berikut didukung sebagai output komponen atau alur.
Jenis data. Periksa jenis data di Azure Pembelajaran Mesin untuk mempelajari selengkapnya tentang jenis data.
uri_file
uri_folder
mltable
Jenis model.
mlflow_model
custom_model
Menggunakan data atau output model pada dasarnya menserialisasikan output dan menyimpannya sebagai file di lokasi penyimpanan. Dalam langkah-langkah berikutnya, lokasi penyimpanan ini dapat dipasang, diunduh, atau diunggah ke sistem file target komputasi, memungkinkan langkah berikutnya untuk mengakses file selama eksekusi pekerjaan.
Proses ini memerlukan kode sumber komponen yang menserialisasikan objek output yang diinginkan - biasanya disimpan dalam memori - ke dalam file. Misalnya, Anda dapat membuat serialisasi dataframe pandas sebagai file CSV. Perhatikan bahwa Azure Pembelajaran Mesin tidak menentukan metode standar apa pun untuk serialisasi objek. Sebagai pengguna, Anda memiliki fleksibilitas untuk memilih metode pilihan Anda untuk menserialisasikan objek ke dalam file. Setelah itu, dalam komponen hilir, Anda dapat secara independen mendeserialisasi dan membaca file-file ini. Berikut adalah beberapa contoh untuk referensi Anda:
- Dalam contoh nyc_taxi_data_regression, komponen persiapan memiliki
uri_folder
output jenis. Dalam kode sumber komponen, ia membaca file csv dari folder input, memproses file dan menulis file CSV yang diproses ke folder output. - Dalam contoh nyc_taxi_data_regression, komponen kereta memiliki
mlflow_model
output jenis. Dalam kode sumber komponen, ia menyimpan model terlatih menggunakanmlflow.sklearn.save_model
metode .
Selain jenis data atau model di atas, input alur atau komponen juga dapat mengikuti jenis primitif.
string
number
integer
boolean
Dalam contoh nyc_taxi_data_regression, komponen latih memiliki number
input bernama test_split_ratio
.
Catatan
Output jenis primitif tidak didukung.
Jalur dan mode untuk input/output data
Untuk input/output aset data, Anda harus menentukan path
parameter yang menunjuk ke lokasi data. Tabel ini memperlihatkan berbagai lokasi data yang didukung alur Azure Pembelajaran Mesin, dan juga memperlihatkan contoh parameter jalur:
Lokasi | Contoh | Input | Hasil |
---|---|---|---|
Jalur pada komputer lokal Anda | ./home/username/data/my_data |
✓ | |
Jalur pada server http milik publik | https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv |
✓ | |
Jalur pada Azure Storage | wasbs://<container_name>@<account_name>.blob.core.windows.net/<path> abfss://<file_system>@<account_name>.dfs.core.windows.net/<path> |
Tidak disarankan karena mungkin perlu konfigurasi identitas tambahan untuk membaca data. | |
Jalur di Azure Pembelajaran Mesin Datastore | azureml://datastores/<data_store_name>/paths/<path> |
✓ | ✓ |
Jalur menuju ke Aset Data | azureml:<my_data>:<version> |
✓ | ✓ |
Catatan
Untuk input/output pada penyimpanan, kami sangat menyarankan untuk menggunakan jalur datastore Azure Pembelajaran Mesin alih-alih jalur Azure Storage langsung. Jalur datastore didukung di berbagai jenis pekerjaan dalam alur.
Untuk input/output data, Anda dapat memilih dari berbagai mode (unduh, pasang, atau unggah) untuk menentukan bagaimana data diakses di target komputasi. Tabel ini menunjukkan mode yang mungkin untuk kombinasi jenis/mode/input/output yang berbeda.
Jenis | Input/Output | upload |
download |
ro_mount |
rw_mount |
direct |
eval_download |
eval_mount |
---|---|---|---|---|---|---|---|---|
uri_folder |
Input | ✓ | ✓ | ✓ | ||||
uri_file |
Input | ✓ | ✓ | ✓ | ||||
mltable |
Input | ✓ | ✓ | ✓ | ✓ | ✓ | ||
uri_folder |
Output | ✓ | ✓ | |||||
uri_file |
Output | ✓ | ✓ | |||||
mltable |
Output | ✓ | ✓ | ✓ |
Catatan
Dalam kebanyakan kasus, kami sarankan untuk menggunakan ro_mount
atau rw_mount
mode. Untuk mempelajari selengkapnya tentang mode, lihat mode aset data.
Representasi visual di studio Azure Pembelajaran Mesin
Cuplikan layar berikut memberikan contoh bagaimana input dan output ditampilkan dalam pekerjaan alur di studio Azure Pembelajaran Mesin. Pekerjaan khusus ini, bernama nyc-taxi-data-regression
, dapat ditemukan di azureml-example.
Di halaman pekerjaan alur studio, input/output jenis data/model komponen ditampilkan sebagai lingkaran kecil dalam komponen yang sesuai, yang dikenal sebagai port Input/Output. Port ini mewakili aliran data dalam alur.
Output tingkat alur ditampilkan sebagai kotak ungu untuk memudahkan identifikasi.
Saat Anda mengarahkan mouse pada port input/output, jenis ditampilkan.
Input jenis primitif tidak akan ditampilkan pada grafik. Ini dapat ditemukan di tab Pengaturan dari panel gambaran umum pekerjaan alur (untuk input tingkat alur) atau panel komponen (untuk input tingkat komponen). Cuplikan layar berikut menunjukkan tab Pengaturan dari pekerjaan alur, dapat dibuka dengan memilih tautan Ringkasan Pekerjaan.
Jika Anda ingin memeriksa input untuk komponen, klik dua kali komponen untuk membuka panel komponen.
Demikian pula, saat mengedit alur dalam perancang, Anda dapat menemukan input &output alur di panel antarmuka Alur, dan input komponen &output di panel komponen (pemicu dengan klik dua kali pada komponen).
Cara mempromosikan input komponen & output ke tingkat alur
Mempromosikan input/output komponen ke tingkat alur memungkinkan Anda menimpa input/output komponen saat mengirimkan pekerjaan alur. Ini juga berguna jika Anda ingin memicu alur menggunakan titik akhir REST.
Berikut ini adalah contoh untuk mempromosikan input/output komponen ke input/output tingkat alur.
$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}}
Contoh lengkap dapat ditemukan dalam alur train-score-eval dengan komponen terdaftar. Alur ini mempromosikan tiga input dan tiga output ke tingkat alur. Mari kita ambil pipeline_job_training_max_epocs
sebagai contoh. Ini dideklarasikan di bawah inputs
bagian pada tingkat akar, yang berarti input tingkat alurnya. Di bawah jobs -> train_job
bagian , input bernama max_epocs
dirujuk sebagai ${{parent.inputs.pipeline_job_training_max_epocs}}
, yang menunjukkan train_job
input max_epocs
's mereferensikan input pipeline_job_training_max_epocs
tingkat alur . Demikian pula, Anda dapat mempromosikan output alur menggunakan skema yang sama.
Studio
Anda dapat mempromosikan input komponen ke input tingkat alur di halaman penulisan perancang. Buka panel pengaturan komponen dengan mengklik dua kali komponen -> temukan input yang ingin Anda promosikan -> Pilih tiga titik di sebelah kanan -> Pilih Tambahkan ke input alur.
Input opsional
Secara default, semua input diperlukan dan harus diberi nilai (atau nilai default) setiap kali Anda mengirimkan pekerjaan alur. Namun, mungkin ada instans di mana Anda memerlukan input opsional. Dalam kasus seperti itu, Anda memiliki fleksibilitas untuk tidak menetapkan nilai ke input saat mengirimkan pekerjaan alur.
Input opsional dapat berguna dalam dua skenario di bawah ini:
Jika Anda memiliki input jenis data/model opsional dan tidak menetapkan nilai untuknya saat mengirimkan pekerjaan alur, akan ada komponen dalam alur yang tidak memiliki dependensi data sebelumnya. Dengan kata lain, port input tidak ditautkan ke komponen atau node data/model apa pun. Ini menyebabkan layanan alur memanggil komponen ini secara langsung, alih-alih menunggu dependensi sebelumnya siap.
Cuplikan layar di bawah ini memberikan contoh skenario kedua yang jelas. Jika Anda mengatur
continue_on_step_failure = True
untuk alur dan memiliki node kedua (node2) yang menggunakan output dari node pertama (node1) sebagai input opsional, node2 akan tetap dijalankan bahkan jika node1 gagal. Namun, jika node2 menggunakan input yang diperlukan dari node1, itu tidak akan dijalankan jika node1 gagal.
Berikut ini adalah contoh tentang cara menentukan input opsional.
$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}}
Ketika input diatur sebagai optional = true
, Anda perlu menggunakan $[[]]
untuk merangkul baris perintah dengan input. Lihat baris yang disorot dalam contoh di atas.
Catatan
Output opsional tidak didukung.
Dalam grafik alur, input opsional dari jenis Data/Model diwakili oleh lingkaran putus-putus. Input opsional jenis primitif dapat ditemukan di bawah tab Pengaturan. Tidak seperti input yang diperlukan, input opsional tidak memiliki tanda bintang di sampingnya, menandakan bahwa input tersebut tidak wajib.
Cara menyesuaikan jalur output
Secara default, output komponen akan disimpan di azureml://datastores/${{default_datastore}}/paths/${{name}}/${{output_name}}
. {default_datastore}
adalah datastore default yang ditetapkan pelanggan untuk alur. Jika tidak mengaturnya adalah penyimpanan blob ruang kerja. {name}
adalah nama pekerjaan, yang akan diselesaikan pada waktu eksekusi pekerjaan. {output_name}
adalah nama output yang ditentukan pelanggan dalam YAML komponen.
Tetapi Anda juga dapat menyesuaikan tempat menyimpan output dengan menentukan jalur output. Berikut ini adalah contoh:
pipeline.yaml
menentukan alur yang memiliki tiga output tingkat alur. YAML lengkap dapat ditemukan di alur train-score-eval dengan contoh komponen terdaftar.
Anda dapat menggunakan perintah berikut untuk mengatur jalur output kustom untuk pipeline_job_trained_model
output.
# 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
Cara mengunduh output
Anda dapat mengunduh output komponen atau output alur dengan mengikuti contoh di bawah ini.
Mengunduh output tingkat alur
# 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>
Unduh output pekerjaan anak
Ketika Anda perlu mengunduh output pekerjaan anak (output komponen yang tidak dipromosikan ke tingkat alur), Anda harus terlebih dahulu mencantumkan semua entitas pekerjaan anak dari pekerjaan alur dan kemudian menggunakan kode serupa untuk mengunduh output.
# 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>
Cara mendaftarkan output sebagai aset bernama
Anda dapat mendaftarkan output komponen atau alur sebagai aset bernama dengan menetapkan name
dan version
ke output. Aset terdaftar dapat dicantumkan di ruang kerja Anda melalui studio UI/CLI/SDK dan juga direferensikan dalam pekerjaan Anda di masa mendatang.
Mendaftarkan output alur
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
Mendaftarkan output pekerjaan anak
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