Menyesuaikan output dalam penyebaran batch
BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)
Panduan ini menjelaskan cara membuat penyebaran yang menghasilkan output dan file kustom. Terkadang Anda memerlukan kontrol lebih atas apa yang ditulis sebagai output dari pekerjaan inferensi batch. Kasus-kasus ini mencakup situasi berikut:
- Anda perlu mengontrol bagaimana prediksi ditulis dalam output. Misalnya, Anda ingin menambahkan prediksi ke data asli jika data bersifat tabular.
- Anda perlu menulis prediksi Anda dalam format file yang berbeda dari yang didukung out-of-the-box dengan penyebaran batch.
- Model Anda adalah model generatif yang tidak dapat menulis output dalam format tabular. Misalnya, model yang menghasilkan gambar sebagai output.
- Model Anda menghasilkan beberapa file tabular alih-alih satu file. Misalnya, model yang melakukan prakiraan dengan mempertimbangkan beberapa skenario.
Penyebaran batch memungkinkan Anda mengontrol output pekerjaan dengan memungkinkan Anda menulis langsung ke output pekerjaan penyebaran batch. Dalam tutorial ini, Anda mempelajari cara menyebarkan model untuk melakukan inferensi batch dan menulis output dalam format parket dengan menambahkan prediksi ke data input asli.
Tentang sampel ini
Contoh ini menunjukkan bagaimana Anda dapat menyebarkan model untuk melakukan inferensi batch dan menyesuaikan bagaimana prediksi Anda ditulis dalam output. Model ini didasarkan pada himpunan data Penyakit Jantung UCI. Database berisi 76 atribut, tetapi contoh ini menggunakan subset 14 di antaranya. Model ini mencoba memprediksi adanya penyakit jantung pada pasien. Bilangan bulat bernilai dari 0 (tanpa kehadiran) hingga 1 (kehadiran).
Model ini dilatih menggunakan pengklasifikasi XGBBoost
dan semua pra-pemrosesan yang diperlukan dipaketkan sebagai scikit-learn
alur, menjadikan model ini alur end-to-end yang beralih dari data mentah ke prediksi.
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-models/custom-outputs-parquet
Ikuti di buku catatan Jupyter
Ada notebook Jupyter yang bisa Anda gunakan untuk mengikuti contoh ini. Di repositori kloning, buka buku catatan yang disebut custom-output-batch.ipynb.
Prasyarat
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. Untuk membuat ruang kerja, lihat Mengelola ruang kerja Azure Pembelajaran Mesin.
Pastikan Anda memiliki izin berikut di ruang kerja Pembelajaran Mesin:
- Membuat atau mengelola titik akhir dan penyebaran batch: Gunakan peran Pemilik, Kontributor, atau Kustom yang memungkinkan
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
. - Membuat penyebaran Azure Resource Manager 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.
- Membuat atau mengelola titik akhir dan penyebaran batch: Gunakan peran Pemilik, Kontributor, atau Kustom yang memungkinkan
Instal perangkat lunak berikut untuk bekerja dengan Pembelajaran Mesin:
Jalankan perintah berikut untuk menginstal Azure CLI dan
ml
ekstensi untuk Azure Pembelajaran Mesin:az extension add -n ml
Penyebaran komponen alur untuk Titik Akhir Batch diperkenalkan dalam versi 2.7
ml
ekstensi untuk Azure CLI.az extension update --name ml
Gunakan perintah untuk mendapatkan versi terbaru.
Menyambungkan ke ruang kerja Anda
Ruang kerja adalah sumber daya tingkat atas untuk Pembelajaran Mesin. Ini menyediakan tempat terpusat untuk bekerja dengan semua artefak yang Anda buat saat Anda menggunakan Pembelajaran Mesin. Di bagian ini, Anda menyambungkan ke ruang kerja tempat Anda melakukan tugas penyebaran.
Dalam perintah berikut, masukkan nilai untuk ID langganan, ruang kerja, lokasi, dan grup sumber daya Anda:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Membuat penyebaran batch dengan output kustom
Dalam contoh ini, Anda membuat penyebaran yang dapat menulis langsung ke folder output dari pekerjaan penyebaran batch. Penyebaran menggunakan fitur ini untuk menulis file parket kustom.
Mendaftarkan model
Anda hanya dapat menyebarkan model terdaftar menggunakan titik akhir batch. Dalam hal ini, Anda sudah memiliki salinan lokal model di repositori, jadi Anda hanya perlu menerbitkan model ke registri di ruang kerja. Anda dapat melewati langkah ini jika model yang coba Anda sebarkan sudah terdaftar.
MODEL_NAME='heart-classifier-sklpipe'
az ml model create --name $MODEL_NAME --type "custom_model" --path "model"
Membuat skrip penilaian
Anda perlu membuat skrip penilaian yang dapat membaca data input yang disediakan oleh penyebaran batch dan mengembalikan skor model. Anda juga akan menulis langsung ke folder output pekerjaan. Singkatnya, skrip penilaian yang diusulkan melakukan sebagai berikut:
- Membaca data input sebagai file CSV.
- Menjalankan fungsi model
predict
MLflow melalui data input. - Menambahkan prediksi ke
pandas.DataFrame
bersama dengan data input. - Menulis data dalam file bernama sebagai file input, tetapi dalam
parquet
format.
code/batch_driver.py
import os
import pickle
import glob
import pandas as pd
from pathlib import Path
from typing import List
def init():
global model
global output_path
# AZUREML_MODEL_DIR is an environment variable created during deployment
# It is the path to the model folder
# Please provide your model's folder name if there's one:
output_path = os.environ["AZUREML_BI_OUTPUT_PATH"]
model_path = os.environ["AZUREML_MODEL_DIR"]
model_file = glob.glob(f"{model_path}/*/*.pkl")[-1]
with open(model_file, "rb") as file:
model = pickle.load(file)
def run(mini_batch: List[str]):
for file_path in mini_batch:
data = pd.read_csv(file_path)
pred = model.predict(data)
data["prediction"] = pred
output_file_name = Path(file_path).stem
output_file_path = os.path.join(output_path, output_file_name + ".parquet")
data.to_parquet(output_file_path)
return mini_batch
Keterangan:
- Perhatikan bagaimana variabel
AZUREML_BI_OUTPUT_PATH
lingkungan digunakan untuk mendapatkan akses ke jalur output pekerjaan penyebaran. - Fungsi ini
init()
mengisi variabel global yang disebutoutput_path
yang dapat digunakan nanti untuk mengetahui di mana harus menulis. - Metode mengembalikan
run
daftar file yang diproses. Fungsi diperlukanrun
untuk mengembalikanlist
objek ataupandas.DataFrame
.
Peringatan
Mempertimbangkan bahwa semua pelaksana batch memiliki akses tulis ke jalur ini secara bersamaan. Ini berarti Bahwa Anda perlu memperhitungkan konkurensi. Dalam hal ini, pastikan bahwa setiap eksekutor menulis filenya sendiri dengan menggunakan nama file input sebagai nama folder output.
Membuat titik akhir
Anda sekarang membuat titik akhir batch bernama heart-classifier-batch
tempat model disebarkan.
Tentukan nama titik akhir. Nama titik akhir muncul di URI yang terkait dengan titik akhir Anda, sehingga nama titik akhir batch harus unik dalam wilayah Azure. Misalnya, hanya ada satu titik akhir batch dengan nama
mybatchendpoint
diwestus2
.Konfigurasikan titik akhir batch Anda.
Buat titik akhir:
Membuat penyebaran
Ikuti langkah-langkah berikutnya untuk membuat penyebaran menggunakan skrip penilaian sebelumnya:
Pertama, buat lingkungan tempat skrip penilaian dapat dijalankan:
Buat penyebaran. Perhatikan bahwa
output_action
sekarang diatur keSUMMARY_ONLY
.Catatan
Contoh ini mengasumsikan Anda memiliki kluster komputasi dengan nama
batch-cluster
. Ubah nama yang sesuai.Untuk membuat penyebaran baru di bawah titik akhir yang dibuat, buat konfigurasi YAML seperti berikut ini. Anda dapat memeriksa skema YAML titik akhir batch lengkap untuk properti tambahan.
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json endpoint_name: heart-classifier-batch name: classifier-xgboost-custom description: A heart condition classifier based on XGBoost and Scikit-Learn pipelines that append predictions on parquet files. type: model model: azureml:heart-classifier-sklpipe@latest environment: name: batch-mlflow-xgboost image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml code_configuration: code: code scoring_script: batch_driver.py compute: azureml:batch-cluster resources: instance_count: 2 settings: max_concurrency_per_instance: 2 mini_batch_size: 2 output_action: summary_only retry_settings: max_retries: 3 timeout: 300 error_threshold: -1 logging_level: info
Kemudian, buat penyebaran dengan perintah berikut:
az ml batch-deployment create --file deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
Pada titik ini, titik akhir batch kami siap digunakan.
Menguji penyebarannya
Untuk menguji titik akhir Anda, gunakan sampel data tanpa label yang terletak di repositori ini, yang dapat digunakan dengan model. Titik akhir batch hanya dapat memproses data yang terletak di cloud dan dapat diakses dari ruang kerja Azure Pembelajaran Mesin. Dalam contoh ini, Anda mengunggahnya ke penyimpanan data Azure Pembelajaran Mesin. Anda akan membuat aset data yang dapat digunakan untuk memanggil titik akhir untuk penilaian. Namun, perhatikan bahwa titik akhir batch menerima data yang dapat ditempatkan di beberapa jenis lokasi.
Panggil titik akhir dengan data dari akun penyimpanan:
JOB_NAME = $(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data --query name -o tsv)
Catatan
Utilitas
jq
mungkin tidak diinstal pada setiap penginstalan. Anda bisa mendapatkan instruksi tentang GitHub.Pekerjaan batch dimulai segera setelah perintah kembali. Anda dapat memantau status pekerjaan hingga selesai:
Menganalisis output
Pekerjaan ini menghasilkan output bernama yang disebut score
tempat semua file yang dihasilkan ditempatkan. Karena Anda menulis ke direktori secara langsung, satu file per setiap file input, maka Anda dapat mengharapkan untuk memiliki jumlah file yang sama. Dalam contoh khusus ini, beri nama file output sama dengan input, tetapi memiliki ekstensi parket.
Catatan
Perhatikan bahwa file predictions.csv juga disertakan dalam folder output. File ini berisi ringkasan file yang diproses.
Anda dapat mengunduh hasil pekerjaan dengan menggunakan nama pekerjaan:
Untuk mengunduh prediksi, gunakan perintah berikut:
az ml job download --name $JOB_NAME --output-name score --download-path ./
Setelah file diunduh, Anda dapat membukanya menggunakan alat favorit Anda. Contoh berikut memuat prediksi menggunakan Pandas
dataframe.
import pandas as pd
import glob
output_files = glob.glob("named-outputs/score/*.parquet")
score = pd.concat((pd.read_parquet(f) for f in output_files))
score
Outputnya terlihat sebagai berikut:
usia | Jenis Kelamin | ... | thal | prediction |
---|---|---|---|---|
63 | 1 | ... | Teratasi | 0 |
67 | 1 | ... | normal | 1 |
67 | 1 | ... | Reversibel | 0 |
37 | 1 | ... | normal | 0 |
Membersihkan sumber daya
Jalankan kode berikut untuk menghapus titik akhir batch dan semua penyebaran yang mendasarinya. Pekerjaan penilaian batch tidak dihapus.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes