Cara mengoprasikan alur pelatihan dengan titik akhir batch
BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)
Dalam artikel ini, Anda akan mempelajari cara mengoprasikan alur pelatihan di bawah titik akhir batch. Alur menggunakan beberapa komponen (atau langkah- langkah) yang mencakup pelatihan model, pra-pemrosesan data, dan evaluasi model.
Anda akan belajar untuk:
- Membuat dan menguji alur pelatihan
- Menyebarkan alur ke titik akhir batch
- Mengubah alur dan membuat penyebaran baru di titik akhir yang sama
- Uji penyebaran baru dan atur sebagai penyebaran default
Tentang contoh ini
Contoh ini menyebarkan alur pelatihan yang mengambil data pelatihan input (berlabel) dan menghasilkan model prediktif, bersama dengan hasil evaluasi dan transformasi yang diterapkan selama pra-pemrosesan. Alur akan menggunakan data tabular dari UCI Heart Disease Data Set untuk melatih model XGBoost. Kami menggunakan komponen pra-pemrosesan data untuk memproses data sebelum dikirim ke komponen pelatihan agar sesuai dan mengevaluasi model.
Visualisasi alur adalah sebagai berikut:
Contoh dalam artikel ini didasarkan pada sampel kode yang terkandung dalam repositori azureml-examples . Untuk menjalankan perintah secara lokal tanpa harus menyalin/menempelkan YAML dan file lainnya, pertama-tama kloning repositori lalu ubah direktori ke folder:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
File untuk contoh ini ada di:
cd endpoints/batch/deploy-pipelines/training-with-components
Ikuti di buku catatan Jupyter
Anda dapat mengikuti versi Python SDK dari contoh ini dengan membuka notebook sdk-deploy-and-test.ipynb di repositori kloning.
Prasyarat
Sebelum mengikuti langkah-langkah dalam artikel ini, pastikan Anda memiliki prasyarat berikut:
Langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning.
Ruang kerja Azure Machine Learning. Jika Anda tidak memilikinya, gunakan langkah-langkah dalam artikel Mengelola ruang kerja Azure Pembelajaran Mesin untuk membuatnya.
Pastikan Anda memiliki izin berikut di ruang kerja:
Membuat atau mengelola titik akhir dan penyebaran batch: Gunakan peran Pemilik, Kontributor, atau Kustom yang memungkinkan
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
.Membuat penyebaran ARM di grup sumber daya ruang kerja: Gunakan peran Pemilik, Kontributor, atau Kustom yang memungkinkan
Microsoft.Resources/deployments/write
dalam grup sumber daya tempat ruang kerja disebarkan.
Anda perlu menginstal perangkat lunak berikut untuk bekerja dengan Azure Pembelajaran Mesin:
Azure CLI dan
ml
ekstensi untuk Azure Pembelajaran Mesin.az extension add -n ml
Catatan
Penyebaran komponen alur untuk Titik Akhir Batch diperkenalkan dalam ekstensi versi 2.7
ml
untuk Azure CLI. Gunakanaz extension update --name ml
untuk mendapatkan versi terakhirnya.
Menyambungkan ke ruang kerja Anda
Ruang kerja adalah sumber daya tingkat teratas untuk Azure Machine Learning, menyediakan tempat terpusat untuk bekerja dengan semua artefak yang Anda buat saat Anda menggunakan Azure Machine Learning. Di bagian ini, kita akan menyambungkan ke ruang kerja tempat Anda akan melakukan tugas penyebaran.
Teruskan nilai untuk ID langganan, ruang kerja, lokasi, dan grup sumber daya Anda dalam kode berikut:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Membuat komponen alur pelatihan
Di bagian ini, kita akan membuat semua aset yang diperlukan untuk alur pelatihan kita. Kita akan mulai dengan membuat lingkungan yang mencakup pustaka yang diperlukan untuk melatih model. Kita kemudian akan membuat kluster komputasi tempat penyebaran batch akan berjalan, dan akhirnya, kita akan mendaftarkan data input sebagai aset data.
Buat lingkungan
Komponen dalam contoh ini akan menggunakan lingkungan dengan XGBoost
pustaka dan scikit-learn
. File environment/conda.yml
berisi konfigurasi lingkungan:
lingkungan/conda.yml
channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
- mlflow
- azureml-mlflow
- datasets
- jobtools
- cloudpickle==1.6.0
- dask==2023.2.0
- scikit-learn==1.1.2
- xgboost==1.3.3
- pandas==1.4
name: mlflow-env
Buat lingkungan sebagai berikut:
Tentukan lingkungan:
lingkungan/xgboost-sklearn-py38.yml
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json name: xgboost-sklearn-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: conda.yml description: An environment for models built with XGBoost and Scikit-learn.
Buat lingkungan:
Membuat kluster komputasi
Titik akhir dan penyebaran batch berjalan pada kluster komputasi. Mereka dapat berjalan pada kluster komputasi Azure Pembelajaran Mesin apa pun yang sudah ada di ruang kerja. Oleh karena itu, beberapa penyebaran batch dapat berbagi infrastruktur komputasi yang sama. Dalam contoh ini, kita akan mengerjakan kluster komputasi Azure Pembelajaran Mesin yang disebut batch-cluster
. Mari kita verifikasi bahwa komputasi ada di ruang kerja atau membuatnya sebaliknya.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Mendaftarkan data pelatihan sebagai aset data
Data pelatihan kami diwakili dalam file CSV. Untuk menimpulkan beban kerja tingkat produksi yang lebih banyak, kita akan mendaftarkan data pelatihan dalam heart.csv
file sebagai aset data di ruang kerja. Aset data ini nantinya akan ditunjukkan sebagai input ke titik akhir.
az ml data create --name heart-classifier-train --type uri_folder --path data/train
Membuat alur
Alur yang ingin kami operasionalkan mengambil satu input, data pelatihan, dan menghasilkan tiga output: model terlatih, hasil evaluasi, dan transformasi data yang diterapkan sebagai prapemroseduran. Alur terdiri dari dua komponen:
preprocess_job
: Langkah ini membaca data input dan mengembalikan data yang disiapkan dan transformasi yang diterapkan. Langkah ini menerima tiga input:data
: folder yang berisi data input untuk diubah dan dinilaitransformations
: (opsional) Jalur ke transformasi yang akan diterapkan, jika tersedia. Jika jalur tidak disediakan, transformasi akan dipelajari dari data input.transformations
Karena input bersifat opsional,preprocess_job
komponen dapat digunakan selama pelatihan dan penilaian.categorical_encoding
: strategi pengodean untuk fitur kategoris (ordinal
atauonehot
).
train_job
: Langkah ini akan melatih model XGBoost berdasarkan data yang disiapkan dan mengembalikan hasil evaluasi dan model terlatih. Langkah ini menerima tiga input:data
: data yang telah diproscesikan sebelumnya.target_column
: kolom yang ingin kita prediksi.eval_size
: menunjukkan proporsi data input yang digunakan untuk evaluasi.
Konfigurasi alur ditentukan dalam deployment-ordinal/pipeline.yml
file:
deployment-ordinal/pipeline.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline
name: uci-heart-train-pipeline
display_name: uci-heart-train
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
inputs:
input_data:
type: uri_folder
outputs:
model:
type: mlflow_model
mode: upload
evaluation_results:
type: uri_folder
mode: upload
prepare_transformations:
type: uri_folder
mode: upload
jobs:
preprocess_job:
type: command
component: ../components/prepare/prepare.yml
inputs:
data: ${{parent.inputs.input_data}}
categorical_encoding: ordinal
outputs:
prepared_data:
transformations_output: ${{parent.outputs.prepare_transformations}}
train_job:
type: command
component: ../components/train_xgb/train_xgb.yml
inputs:
data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
target_column: target
register_best_model: false
eval_size: 0.3
outputs:
model:
mode: upload
type: mlflow_model
path: ${{parent.outputs.model}}
evaluation_results:
mode: upload
type: uri_folder
path: ${{parent.outputs.evaluation_results}}
Catatan
pipeline.yml
Dalam file, transformations
input hilang dari preprocess_job
; oleh karena itu, skrip akan mempelajari parameter transformasi dari data input.
Visualisasi alur adalah sebagai berikut:
Menguji alur
Mari kita uji alur dengan beberapa data sampel. Untuk melakukannya, kita akan membuat pekerjaan menggunakan alur dan kluster komputasi yang batch-cluster
dibuat sebelumnya.
File berikut pipeline-job.yml
berisi konfigurasi untuk pekerjaan alur:
deployment-ordinal/pipeline-job.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
experiment_name: uci-heart-train-pipeline
display_name: uci-heart-train-job
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
compute: batch-cluster
component: pipeline.yml
inputs:
input_data:
type: uri_folder
outputs:
model:
type: mlflow_model
mode: upload
evaluation_results:
type: uri_folder
mode: upload
prepare_transformations:
mode: upload
Buat pekerjaan pengujian:
az ml job create -f deployment-ordinal/pipeline-job.yml --set inputs.input_data.path=azureml:heart-classifier-train@latest
Membuat titik akhir batch
Berikan nama untuk titik akhir. Nama titik akhir batch harus unik di setiap wilayah karena namanya digunakan untuk membangun URI pemanggilan. Untuk memastikan keunikan, tambahkan karakter berikutnya ke nama yang ditentukan dalam kode berikut.
Konfigurasikan titik akhir:
Buat titik akhir:
Kueri URI titik akhir:
Menyebarkan komponen alur
Untuk menyebarkan komponen alur, kita harus membuat penyebaran batch. Penyebaran adalah sekumpulan sumber daya yang diperlukan untuk menghosting aset yang melakukan pekerjaan aktual.
Konfigurasikan penyebaran:
File
deployment-ordinal/deployment.yml
berisi konfigurasi penyebaran. Anda dapat memeriksa skema YAML titik akhir batch lengkap untuk properti tambahan.deployment-ordinal/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-train-xgb description: A sample deployment that trains an XGBoost model for the UCI dataset. endpoint_name: uci-classifier-train type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
Buat penyebaran:
Jalankan kode berikut untuk membuat penyebaran batch di bawah titik akhir batch dan atur sebagai penyebaran default.
az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment-ordinal/deployment.yml --set-default
Tip
Perhatikan penggunaan
--set-default
bendera untuk menunjukkan bahwa penyebaran baru ini sekarang menjadi default.Penyebaran Anda siap digunakan.
Menguji penyebarannya
Setelah penyebaran dibuat, penyebaran siap untuk menerima pekerjaan. Ikuti langkah-langkah berikut untuk mengujinya:
Penyebaran kami mengharuskan kami menunjukkan satu input data.
File
inputs.yml
berisi definisi untuk aset data input:inputs.yml
inputs: input_data: type: uri_folder path: azureml:heart-classifier-train@latest
Tip
Untuk mempelajari selengkapnya tentang cara menunjukkan input, lihat Membuat pekerjaan dan memasukkan data untuk titik akhir batch.
Anda dapat memanggil penyebaran default sebagai berikut:
Anda dapat memantau kemajuan acara dan mengalirkan log menggunakan:
Perlu disebutkan bahwa hanya input alur yang diterbitkan sebagai input di titik akhir batch. Misalnya, categorical_encoding
adalah input dari langkah alur, tetapi bukan input dalam alur itu sendiri. Gunakan fakta ini untuk mengontrol input mana yang ingin Anda ekspos ke klien Anda dan mana yang ingin Anda sembunyikan.
Mengakses output pekerjaan
Setelah pekerjaan selesai, kita dapat mengakses beberapa outputnya. Alur ini menghasilkan output berikut untuk komponennya:
preprocess job
: output adalahtransformations_output
train job
: output adalahmodel
danevaluation_results
Anda dapat mengunduh hasil terkait menggunakan:
az ml job download --name $JOB_NAME --output-name transformations
az ml job download --name $JOB_NAME --output-name model
az ml job download --name $JOB_NAME --output-name evaluation_results
Membuat penyebaran baru di titik akhir
Titik akhir dapat menghosting beberapa penyebaran sekaligus, sambil hanya menyimpan satu penyebaran sebagai default. Oleh karena itu, Anda dapat melakukan iterasi atas model yang berbeda, menyebarkan model yang berbeda ke titik akhir Anda dan mengujinya, dan akhirnya, mengalihkan penyebaran default ke penyebaran model yang paling sesuai untuk Anda.
Mari kita ubah cara praproses dilakukan dalam alur untuk melihat apakah kita mendapatkan model yang berkinerja lebih baik.
Mengubah parameter dalam komponen pra-pemrosesan alur
Komponen pra-pemrosesan memiliki input yang disebut categorical_encoding
, yang dapat memiliki nilai ordinal
atau onehot
. Nilai-nilai ini sesuai dengan dua cara berbeda untuk mengodekan fitur kategoris.
ordinal
: Mengodekan nilai fitur dengan nilai numerik (ordinal) dari[1:n]
, di manan
adalah jumlah kategori dalam fitur. Pengodean ordinal menyiratkan bahwa ada urutan peringkat alami di antara kategori fitur.onehot
: Tidak menyiratkan hubungan urutan peringkat alami tetapi memperkenalkan masalah dimensi jika jumlah kategori besar.
Secara default, kami menggunakan ordinal
sebelumnya. Sekarang mari kita ubah pengodean kategoris untuk digunakan onehot
dan melihat performa model.
Tip
Atau, kita bisa mengekspos categorial_encoding
input ke klien sebagai input ke pekerjaan alur itu sendiri. Namun, kami memilih untuk mengubah nilai parameter dalam langkah pra-pemrosesan sehingga kami dapat menyembunyikan dan mengontrol parameter di dalam penyebaran dan memanfaatkan kesempatan untuk memiliki beberapa penyebaran di bawah titik akhir yang sama.
Ubah alur. Ini terlihat sebagai berikut:
Konfigurasi alur ditentukan dalam
deployment-onehot/pipeline.yml
file:deployment-onehot/pipeline.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json type: pipeline name: uci-heart-train-pipeline display_name: uci-heart-train description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset. inputs: input_data: type: uri_folder outputs: model: type: mlflow_model mode: upload evaluation_results: type: uri_folder mode: upload prepare_transformations: type: uri_folder mode: upload jobs: preprocess_job: type: command component: ../components/prepare/prepare.yml inputs: data: ${{parent.inputs.input_data}} categorical_encoding: onehot outputs: prepared_data: transformations_output: ${{parent.outputs.prepare_transformations}} train_job: type: command component: ../components/train_xgb/train_xgb.yml inputs: data: ${{parent.jobs.preprocess_job.outputs.prepared_data}} target_column: target eval_size: 0.3 outputs: model: type: mlflow_model path: ${{parent.outputs.model}} evaluation_results: type: uri_folder path: ${{parent.outputs.evaluation_results}}
Konfigurasikan penyebaran:
File
deployment-onehot/deployment.yml
berisi konfigurasi penyebaran. Anda dapat memeriksa skema YAML titik akhir batch lengkap untuk properti tambahan.deployment-onehot/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-train-onehot description: A sample deployment that trains an XGBoost model for the UCI dataset using onehot encoding for variables. endpoint_name: uci-classifier-train type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
Buat penyebaran:
Penyebaran Anda siap digunakan.
Menguji penyebaran nondefault
Setelah penyebaran dibuat, penyebaran siap untuk menerima pekerjaan. Kita dapat mengujinya dengan cara yang sama seperti sebelumnya, tetapi sekarang kita akan memanggil penyebaran tertentu:
Panggil penyebaran sebagai berikut, menentukan parameter penyebaran untuk memicu penyebaran
uci-classifier-train-onehot
tertentu :Anda dapat memantau kemajuan acara dan mengalirkan log menggunakan:
Mengonfigurasi penyebaran baru sebagai penyebaran default
Setelah puas dengan performa penyebaran baru, kita dapat mengatur penyebaran baru ini sebagai default:
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Menghapus penyebaran lama
Setelah selesai, Anda dapat menghapus penyebaran lama jika Anda tidak membutuhkannya lagi:
az ml batch-deployment delete --name uci-classifier-train-xgb --endpoint-name $ENDPOINT_NAME --yes
Membersihkan sumber daya
Setelah selesai, hapus sumber daya terkait dari ruang kerja:
Jalankan kode berikut untuk menghapus titik akhir batch dan penyebaran yang mendasarinya. --yes
digunakan untuk mengonfirmasi penghapusan.
az ml batch-endpoint delete -n $ENDPOINT_NAME --yes
(Opsional) Hapus komputasi, kecuali Anda berencana untuk menggunakan kembali kluster komputasi Anda dengan penyebaran nanti.