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.

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 memilikiuri_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 menggunakan mlflow.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.

Screenshot highlighting the pipeline input and output port.

Saat Anda mengarahkan mouse pada port input/output, jenis ditampilkan.

Screenshot highlighting the port type when hovering the mouse.

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.

Screenshot highlighting the job overview setting panel.

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).

Screenshot highlighting the pipeline interface in designer.

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_jobinput max_epocs 's mereferensikan input pipeline_job_training_max_epocstingkat 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.

Screenshot highlighting how to promote to pipeline input in designer.

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.

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

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.

Screenshot highlighting the optional input.

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_modeloutput.

# 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

Langkah berikutnya