Membuat dan menjalankan alur pembelajaran mesin menggunakan komponen dengan Azure Machine Learning CLI

BERLAKU UNTUK:ekstensi ml Azure CLI v2 (saat ini)

Dalam artikel ini, Anda mempelajari cara membuat dan menjalankan alur pembelajaran mesin dengan menggunakan Azure CLI dan komponen. Anda dapat membuat alur tanpa menggunakan komponen, tetapi komponen menawarkan fleksibilitas dan penggunaan ulang terbesar. Azure Pembelajaran Mesin Pipelines dapat ditentukan dalam YAML dan dijalankan dari CLI, ditulis di Python, atau disusun di Azure Pembelajaran Mesin studio Designer dengan antarmuka pengguna seret dan letakkan. Dokumen ini berfokus pada CLI.

Prasyarat

Bahan baca awal yang disarankan

Membuat alur pertama Anda dengan komponen

Mari kita buat alur pertama Anda dengan komponen menggunakan contoh. Bagian ini bertujuan untuk memberi Anda kesan awal tentang seperti apa alur dan komponen di Azure Pembelajaran Mesin dengan contoh konkret.

Dari direktori cli/jobs/pipelines-with-components/basicsrepositori azureml-examples, buka direktori 3b_pipeline_with_data. Ada tiga jenis file dalam direktori ini. Itu adalah file yang perlu Anda buat saat membangun alur Anda sendiri.

  • pipeline.yml: File YAML ini menentukan alur pembelajaran mesin. File YAML ini menjelaskan cara memecah tugas pembelajaran mesin penuh menjadi alur kerja dengan beberapa langkah. Misalnya, mempertimbangkan tugas pembelajaran mesin sederhana menggunakan data historis untuk melatih model prakiraan penjualan, Anda mungkin ingin membangun alur kerja berurutan dengan pemrosesan data, pelatihan model, dan langkah-langkah evaluasi model. Setiap langkah adalah komponen yang memiliki antarmuka yang terdefinisi dengan baik dan dapat dikembangkan, diuji, dan dioptimalkan secara independen. YAML alur juga menentukan bagaimana langkah-langkah anak terhubung ke langkah lain dalam alur, misalnya, langkah pelatihan model menghasilkan file model dan file model akan diteruskan ke langkah evaluasi model.

  • component.yml: File YAML ini mendefinisikan komponen. Ini mengemas informasi berikut:

    • Metadata: nama, nama tampilan, versi, deskripsi, jenis, dll. Metadata membantu menjelaskan dan mengelola komponen.
    • Antarmuka: input dan output. Misalnya, komponen pelatihan model mengambil data pelatihan dan jumlah epoch sebagai input, dan menghasilkan file model terlatih sebagai output. Setelah antarmuka ditentukan, tim yang berbeda dapat mengembangkan dan menguji komponen secara independen.
    • Perintah, kode & lingkungan: perintah, kode, dan lingkungan untuk menjalankan komponen. Perintah adalah perintah shell untuk menjalankan komponen. Kode biasanya mengacu pada direktori kode sumber. Lingkungan bisa menjadi lingkungan azure Pembelajaran Mesin(dikumpulkan atau dibuat pelanggan), gambar docker, atau lingkungan conda.
  • component_src: Ini adalah direktori kode sumber untuk komponen tertentu. Ini berisi kode sumber yang dijalankan dalam komponen. Anda dapat menggunakan bahasa pemrograman pilihan Anda (Python, R...). Kode harus dieksekusi oleh perintah shell. Kode sumber dapat mengambil beberapa input dari baris perintah shell untuk mengontrol bagaimana langkah ini akan dijalankan. Misalnya, langkah pelatihan mungkin mengambil data pelatihan, tingkat pembelajaran, jumlah epoch untuk mengontrol proses pelatihan. Argumen perintah shell digunakan untuk meneruskan input dan output ke kode.

Sekarang mari kita buat alur menggunakan contoh 3b_pipeline_with_data. Kami menjelaskan arti terperinci dari setiap file di bagian berikut.

Pertama-tama, cantumkan sumber daya komputasi yang tersedia dengan perintah berikut:

az ml compute list

Jika Anda tidak memilikinya, buat kluster bernama cpu-cluster dengan menjalankan:

Catatan

Lewati langkah ini untuk menggunakan komputasi tanpa server.

az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 10

Sekarang, buat pekerjaan alur yang ditentukan dalam file pipeline.yml dengan perintah berikut. Target komputasi dirujuk dalam file pipeline.yml sebagai azureml:cpu-cluster. Jika target komputasi Anda menggunakan nama yang berbeda, jangan lupa untuk memperbaruinya dalam file pipeline.yml.

az ml job create --file pipeline.yml

Anda harus menerima kamus JSON dengan informasi tentang pekerjaan alur termasuk:

Kunci Deskripsi
name Nama pekerjaan berbasis GUID.
experiment_name Nama tempat pekerjaan akan diatur di studio.
services.Studio.endpoint URL untuk memantau dan meninjau pekerjaan alur.
status Status pekerjaan. Ini kemungkinan akan menjadi Preparing pada saat ini.

services.Studio.endpoint Buka URL untuk melihat visualisasi grafik alur.

Screenshot of a graph visualization of the pipeline.

Memahami YAML definisi alur

Mari kita lihat definisi alur dalam file 3b_pipeline_with_data/pipeline.yml.

Catatan

Untuk menggunakan komputasi tanpa server, ganti default_compute: azureml:cpu-cluster dengan default_compute: azureml:serverless dalam file ini.

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

display_name: 3b_pipeline_with_data
description: Pipeline with 3 component jobs with data dependencies

settings:
  default_compute: azureml:cpu-cluster

outputs:
  final_pipeline_output:
    mode: rw_mount

jobs:
  component_a:
    type: command
    component: ./componentA.yml
    inputs:
      component_a_input: 
        type: uri_folder
        path: ./data

    outputs:
      component_a_output: 
        mode: rw_mount
  component_b:
    type: command
    component: ./componentB.yml
    inputs:
      component_b_input: ${{parent.jobs.component_a.outputs.component_a_output}}
    outputs:
      component_b_output: 
        mode: rw_mount
  component_c:
    type: command
    component: ./componentC.yml
    inputs:
      component_c_input: ${{parent.jobs.component_b.outputs.component_b_output}}
    outputs:
      component_c_output: ${{parent.outputs.final_pipeline_output}}
      #  mode: upload

Tabel menjelaskan bidang skema YAML alur yang paling umum digunakan. Untuk mempelajari lebih lanjut , lihat skema YAML alur lengkap.

kunci description
jenis Diperlukan. Jenis pekerjaan harus untuk pipeline pekerjaan alur.
display_name Tampilkan nama pekerjaan alur di antarmuka pengguna studio. Dapat diedit di antarmuka pengguna studio. Tidak perlu bersifat unik di semua pekerjaan di ruang kerja.
jobs Diperlukan. Kamus kumpulan masing-masing pekerjaan untuk dijalankan sebagai langkah dalam alur. Pekerjaan ini dianggap sebagai pekerjaan turunan dari pekerjaan alur induk. Dalam rilis ini, jenis pekerjaan yang didukung dalam alur adalah command dan sweep
input Kamus input ke pekerjaan alur. Kunci adalah nama untuk input dalam konteks pekerjaan dan nilai adalah nilai input. Input alur ini dapat direferensikan oleh input masing-masing pekerjaan langkah dalam alur menggunakan ekspresi ${{ parent.inputs.<input_name> }}.
output Kamus konfigurasi output dari pekerjaan alur. Kunci adalah nama untuk output dalam konteks pekerjaan dan nilai adalah konfigurasi output. Output alur ini dapat direferensikan oleh output masing-masing pekerjaan langkah dalam alur menggunakan ekspresi ${{ parents.outputs.<output_name> }}.

Dalam contoh 3b_pipeline_with_data, kita telah membuat alur tiga langkah.

  • Tiga langkah tersebut didefinisikan di bagian jobs. Ketiga jenis langkah tersebut merupakan pekerjaan perintah. Definisi setiap langkah ada dalam file component.yml yang sesuai. Anda dapat melihat file YAML komponen di direktori 3b_pipeline_with_data. Kami akan menjelaskan componentA.yml di bagian berikutnya.
  • Alur ini memiliki dependensi data, yang umum di sebagian besar alur dunia nyata. Component_a akan mengambil input data dari folder lokal di ./data(baris 17-20) dan meneruskan outputnya ke componentB (baris 29). Output Component_a dapat direferensikan sebagai ${{parent.jobs.component_a.outputs.component_a_output}}.
  • compute menentukan komputasi default untuk alur ini. Jika komponen di bawah jobs mendefinisikan komputasi yang berbeda untuk komponen ini, sistem menghormati pengaturan spesifik komponen.

Screenshot of the pipeline with data example.

Membaca dan menulis data dalam alur

Salah satu skenario umumnya adalah membaca dan menulis data di alur Anda. Di Azure Pembelajaran Mesin, kami menggunakan skema yang sama untuk membaca dan menulis data untuk semua jenis pekerjaan (pekerjaan alur, pekerjaan perintah, dan pekerjaan pembersihan). Berikut ini adalah contoh pekerjaan alur penggunaan data untuk skenario umum.

Memahami definisi komponen YAML

Sekarang, mari kita lihat componentA.yml sebagai contoh untuk memahami definisi komponen YAML.

$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
type: command

name: component_a
display_name: componentA
version: 1

inputs:
  component_a_input:
    type: uri_folder

outputs:
  component_a_output:
    type: uri_folder

code: ./componentA_src

environment: 
  image: python

command: >-
  python hello.py --componentA_input ${{inputs.component_a_input}} --componentA_output ${{outputs.component_a_output}}

Skema yang paling umum digunakan dari KOMPONEN YAML dijelaskan dalam tabel. Untuk mempelajari lebih lanjut , lihat skema YAML komponen lengkap.

kunci description
nama Diperlukan. Nama komponen. Harus unik di seluruh ruang kerja Azure Pembelajaran Mesin. Harus dimulai dengan huruf kecil. Huruf kecil, angka, dan garis bawah (_) diizinkan. Panjang maksimum adalah 255 karakter.
display_name Tampilkan nama komponen di UI studio. Dapat berupa nonunique dalam ruang kerja.
command Perintah wajib dieksekusi
code Jalur lokal ke direktori kode sumber yang akan diunggah dan digunakan untuk komponen.
lingkungan Diperlukan. Lingkungan yang digunakan untuk menjalankan komponen.
input Kamus input komponen. Kunci adalah nama untuk input dalam konteks komponen dan nilainya adalah definisi input komponen. Input dapat direferensikan dalam perintah menggunakan input ekspresi ${{.<> input_name }}.
output Kamus output komponen. Kunci adalah nama untuk output dalam konteks komponen dan nilainya adalah definisi output komponen. Output dapat direferensikan dalam perintah menggunakan output ekspresi ${{.<> output_name }}.
is_deterministic Apakah akan menggunakan kembali hasil pekerjaan sebelumnya jika input komponen tidak berubah. Nilai default adalah true, juga dikenal sebagai penggunaan kembali secara default. Skenario umum saat diatur sebagai false adalah memaksa memuat ulang data dari penyimpanan cloud atau URL.

Untuk contoh dalam 3b_pipeline_with_data/componentA.yml, componentA memiliki satu input data dan satu output data, yang dapat disambungkan ke langkah lain dalam alur induk. Semua file di bawah code bagian dalam KOMPONEN YAML akan diunggah ke Azure Pembelajaran Mesin saat mengirimkan pekerjaan alur. Dalam contoh ini, file di ./componentA_src akan diunggah (baris 16 di componentA.yml). Anda dapat melihat kode sumber yang diunggah di Studio UI: pilih dua kali langkah ComponentA dan navigasikan ke tab Rekam Jepret, seperti yang ditunjukkan pada cuplikan layar berikut. Kita dapat melihat bahwa skrip hello-world hanya melakukan beberapa pencetakan sederhana dan menulis tanggalwaktu saat ini ke jalur componentA_output. Komponen mengambil input dan output melalui argumen baris perintah, serta ditangani dalam hello.py menggunakan argparse.

Screenshot of pipeline with data example showing componentA.

Input dan output

Input dan output menentukan antarmuka komponen. Input dan output dapat berupa salah satu dari nilai harfiah (dari jenis string,number,integer, atau boolean) atau objek yang berisi skema input.

Input objek (dari jenis uri_file, uri_folder,mltable,mlflow_model,custom_model) dapat tersambung ke langkah-langkah lain dalam pekerjaan alur induk dan, oleh karena itu, meneruskan data/model ke langkah lain. Dalam grafik alur, input jenis objek dirender sebagai titik koneksi.

Input nilai harfiah (string,number,integer,boolean) adalah parameter yang dapat Anda teruskan ke komponen pada durasi. Anda dapat menambahkan nilai default input harfiah di bidang default. Untuk jenis number dan integer, Anda juga dapat menambahkan nilai minimum dan maksimum dari nilai yang diterima menggunakan bidang min dan max. Jika nilai input melebihi min dan maks, alur gagal pada validasi. Validasi terjadi sebelum Anda mengirimkan pekerjaan alur untuk menghemat waktu Anda. Validasi berfungsi untuk CLI, Python SDK, dan antarmuka pengguna perancang. Cuplikan layar berikut menunjukkan contoh validasi di antarmuka pengguna desainer. Demikian pula, Anda dapat menentukan nilai yang diizinkan di bidang enum.

Screenshot of the input and output of the train linear regression model component.

Jika Anda ingin menambahkan input ke komponen, ingatlah untuk mengedit tiga tempat:

  • inputs bidang dalam KOMPONEN YAML
  • command bidang dalam KOMPONEN YAML.
  • Kode sumber komponen untuk menangani input baris perintah. Ini ditandai dalam kotak hijau di cuplikan layar sebelumnya.

Untuk mempelajari selengkapnya tentang input dan output, lihat Mengelola input dan output komponen dan alur.

Lingkungan

Lingkungan mendefinisikan lingkungan tempat komponen dijalankan. Ini bisa menjadi lingkungan azure Pembelajaran Mesin(dikumpulkan atau terdaftar kustom), gambar docker atau lingkungan conda. Lihat contoh berikut.

Mendaftarkan komponen untuk penggunaan ulang dan berbagi

Meskipun beberapa komponen khusus untuk alur tertentu, manfaat nyata komponen berasal dari penggunaan kembali dan berbagi. Daftarkan komponen di ruang kerja Pembelajaran Mesin Anda agar membuatnya tersedia untuk digunakan kembali. Komponen yang terdaftar mendukung penerapan versi otomatis, sehingga Anda dapat memperbarui komponen, tetapi juga memastikan bahwa alur yang memerlukan versi yang lebih lama akan terus berfungsi.

Di repositori azureml-examples, buka direktori cli/jobs/pipelines-with-components/basics/1b_e2e_registered_components.

Untuk mendaftarkan model, gunakan perintah az ml component create:

az ml component create --file train.yml
az ml component create --file score.yml
az ml component create --file eval.yml

Setelah perintah ini berjalan hingga selesai, Anda dapat melihat komponen di Studio, di bagian Aset - Komponen >:

Screenshot of Studio showing the components that were just registered.

Pilih komponen. Anda melihat informasi terperinci untuk setiap versi komponen.

Di bawah tab Detail , Anda akan melihat informasi dasar komponen seperti nama, dibuat oleh, versi, dll. Anda melihat bidang yang dapat diedit untuk Tag dan Deskripsi. Tag dapat digunakan untuk menambahkan kata kunci pencariani dengan cepat. Bidang deskripsi mendukung pemformatan Markdown dan harus digunakan untuk menggambarkan fungsi komponen serta penggunaan dasar Anda.

Di bawah tab Pekerjaan , Anda akan melihat riwayat semua pekerjaan yang menggunakan komponen ini.

Menggunakan komponen terdaftar di pekerjaan alur file YAML

Mari kita menggunakan 1b_e2e_registered_components untuk mendemonstrasikan cara menggunakan komponen terdaftar di alur YAML. Buka direktori 1b_e2e_registered_components, buka file pipeline.yml. Kunci dan nilai-nilai di bidang inputs dan outputs mirip dengan yang sudah dibahas. Satu-satunya perbedaan yang signifikan adalah nilai bidang component dalam entri jobs.<JOB_NAME>.component. Nilai component merupakan bentuk azureml:<COMPONENT_NAME>:<COMPONENT_VERSION>. Contohnya, definisi train-job menyebutkan versi terbaru komponen terdaftar my_train harus digunakan:

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:

Mengelola komponen

Anda dapat memeriksa detail komponen dan mengelola komponen menggunakan CLI (v2). Gunakan az ml component -h untuk mendapatkan instruksi terperinci tentang perintah komponen. Tabel berikut mencantumkan semua perintah yang tersedia. Lihat contoh lainnya dalam referensi Azure CLI.

perintah description
az ml component create Membuat komponen
az ml component list Mencantumkan komponen di ruang kerja
az ml component show Menampilkan detail untuk komponen
az ml component update Memperbarui komponen. Hanya beberapa bidang (description, display_name) yang mendukung pembaruan
az ml component archive Mengarsipkan kontainer komponen
az ml component restore Memulihkan komponen yang diarsipkan

Langkah berikutnya