Peluncuran progresif model MLflow ke Titik Akhir Online
Dalam artikel ini, Anda mempelajari bagaimana Anda dapat memperbarui dan menyebarkan model MLflow secara progresif ke Titik Akhir Online tanpa menyebabkan gangguan layanan. Anda menggunakan penyebaran biru-hijau, juga dikenal sebagai strategi peluncuran yang aman, untuk memperkenalkan versi baru layanan web ke produksi. Strategi ini akan memungkinkan Anda meluncurkan versi baru layanan web Anda ke subset kecil pengguna atau permintaan sebelum meluncurkannya sepenuhnya.
Tentang contoh ini
Titik Akhir Online memiliki konsep Titik Akhir dan Penyebaran. Titik akhir mewakili API yang digunakan pelanggan untuk menggunakan model, sementara penyebaran menunjukkan implementasi spesifik DARI API tersebut. Perbedaan ini memungkinkan pengguna untuk memisahkan API dari implementasi dan mengubah implementasi yang mendasar tanpa memengaruhi konsumen. Contoh ini akan menggunakan konsep tersebut untuk memperbarui model yang disebarkan di titik akhir tanpa memperkenalkan gangguan layanan.
Model yang akan kami sebarkan didasarkan pada Himpunan Data Penyakit Jantung UCI. Database berisi 76 atribut, tetapi kami menggunakan subset 14 di antaranya. Model ini mencoba memprediksi adanya penyakit jantung pada pasien. Bilangan bulat bernilai dari 0 (tanpa kehadiran) hingga 1 (kehadiran). Ini telah dilatih menggunakan pengklasifikasi XGBBoost
dan semua pra-pemrosesan yang diperlukan telah dipaketkan sebagai scikit-learn
alur, menjadikan model ini alur end-to-end yang beralih dari data mentah ke prediksi.
Informasi dalam artikel ini didasarkan pada sampel kode yang terkandung dalam repositori azureml-examples. Untuk menjalankan perintah secara lokal tanpa harus menyalin/menempelkan file, kloning repositori, lalu ubah direktori menjadi sdk/using-mlflow/deploy
.
Ikuti di Jupyter Notebooks
Anda bisa mengikuti sampel ini di buku catatan berikut. Di repositori kloning, buka notebook: mlflow_sdk_online_endpoints_progresive.ipynb.
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.
- Kontrol akses berbasis peran Azure (Azure RBAC) digunakan untuk memberikan akses ke operasi di Azure Machine Learning. Untuk melakukan langkah-langkah dalam artikel ini, akun pengguna Anda harus diberi peran pemilik atau kontributor untuk ruang kerja Azure Pembelajaran Mesin, atau peran kustom yang memungkinkan Microsoft.Machine Pembelajaran Services/workspaces/onlineEndpoints/*. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Machine Learning.
Selain itu, Anda harus:
- Instal Azure CLI dan ekstensi ml ke Azure CLI. Untuk informasi selengkapnya, lihat Menginstal, menyiapkan, dan menggunakan CLI (v2).
Menyambungkan ke ruang kerja Anda
Pertama, mari kita sambungkan ke ruang kerja Azure Pembelajaran Mesin tempat kita akan bekerja.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Mendaftarkan model di registri
Pastikan model Anda terdaftar di registri Azure Machine Learning. Penyebaran model yang tidak terdaftar tidak didukung di Azure Machine Learning. Anda dapat mendaftarkan model baru menggunakan MLflow SDK:
MODEL_NAME='heart-classifier'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
Membuat titik akhir online
Titik akhir online adalah titik akhir yang digunakan untuk inferensi online (real-time). Titik akhir online berisi penyebaran yang siap menerima data dari klien dan dapat mengirim respons kembali secara real time.
Kita akan mengeksploitasi fungsionalitas ini dengan menyebarkan beberapa versi model yang sama di bawah titik akhir yang sama. Namun, penyebaran baru akan menerima 0% dari lalu lintas saat mengemis. Setelah kami yakin tentang model baru agar berfungsi dengan benar, kami akan secara progresif memindahkan lalu lintas dari satu penyebaran ke penyebaran lainnya.
Titik akhir memerlukan nama, yang harus unik di wilayah yang sama. Mari kita pastikan untuk membuat yang tidak ada:
ENDPOINT_SUFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-5} | head -n 1) ENDPOINT_NAME="heart-classifier-$ENDPOINT_SUFIX"
Mengonfigurasi titik akhir
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: heart-classifier-edp auth_mode: key
Buat titik akhir:
az ml online-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
Mendapatkan rahasia autentikasi untuk titik akhir.
ENDPOINT_SECRET_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME | jq -r ".accessToken")
Membuat penyebaran biru
Sejauh ini, titik akhir kosong. Tidak ada penyebaran di atasnya. Mari kita buat yang pertama dengan menyebarkan model yang sama dengan yang kita kerjakan sebelumnya. Kami akan menyebut penyebaran ini "default", mewakili "penyebaran biru" kami.
Konfigurasikan penyebaran
blue-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: default endpoint_name: heart-classifier-edp model: azureml:heart-classifier@latest instance_type: Standard_DS2_v2 instance_count: 1
Membuat penyebaran
az ml online-deployment create --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-traffic
Jika titik akhir Anda tidak memiliki konektivitas keluar, gunakan kemasan model (pratinjau) dengan menyertakan bendera
--with-package
:az ml online-deployment create --with-package --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-traffic
Tip
Kami mengatur bendera
--all-traffic
dalam perintah buat, yang akan menetapkan semua lalu lintas ke penyebaran baru.Menetapkan semua lalu lintas ke penyebaran
Sejauh ini, titik akhir memiliki satu penyebaran, tetapi tidak ada lalu lintas yang ditetapkan untuk itu. Mari kita tetapkan.
Langkah ini tidak diperlukan di Azure CLI karena kami menggunakan
--all-traffic
selama pembuatan.Perbarui konfigurasi titik akhir:
Langkah ini tidak diperlukan di Azure CLI karena kami menggunakan
--all-traffic
selama pembuatan.Membuat input sampel untuk menguji penyebaran
sample.yml
{ "input_data": { "columns": [ "age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal" ], "data": [ [ 48, 0, 3, 130, 275, 0, 0, 139, 0, 0.2, 1, 0, "normal" ] ] } }
Menguji penyebarannya
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file sample.json
Membuat penyebaran hijau di bawah titik akhir
Mari kita bayangkan bahwa ada versi baru dari model yang dibuat oleh tim pengembangan dan siap untuk berada dalam produksi. Pertama-tama kita dapat mencoba menerbangkan model ini dan setelah yakin, kita dapat memperbarui titik akhir untuk merutekan lalu lintas ke dalamnya.
Mendaftarkan versi model baru
MODEL_NAME='heart-classifier' az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
Mari kita dapatkan nomor versi model baru:
VERSION=$(az ml model show -n heart-classifier --label latest | jq -r ".version")
Mengonfigurasi penyebaran baru
green-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: xgboost-model endpoint_name: heart-classifier-edp model: azureml:heart-classifier@latest instance_type: Standard_DS2_v2 instance_count: 1
Kami akan menamai penyebaran sebagai berikut:
GREEN_DEPLOYMENT_NAME="xgboost-model-$VERSION"
Membuat penyebaran baru
az ml online-deployment create -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
Jika titik akhir Anda tidak memiliki konektivitas keluar, gunakan kemasan model (pratinjau) dengan menyertakan bendera
--with-package
:az ml online-deployment create --with-package -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
Menguji penyebaran tanpa mengubah lalu lintas
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name $GREEN_DEPLOYMENT_NAME --request-file sample.json
Tip
Perhatikan bagaimana sekarang kami menunjukkan nama penyebaran yang ingin kami panggil.
Memperbarui lalu lintas secara progresif
Salah satu kami yakin dengan penyebaran baru, kami dapat memperbarui lalu lintas untuk merutekan beberapa darinya ke penyebaran baru. Lalu lintas dikonfigurasi pada tingkat titik akhir:
Konfigurasikan lalu lintas:
Langkah ini tidak diperlukan di Azure CLI
Memperbarui titik akhir
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=90 $GREEN_DEPLOYMENT_NAME=10"
Jika Anda memutuskan untuk mengalihkan seluruh lalu lintas ke penyebaran baru, perbarui semua lalu lintas:
Langkah ini tidak diperlukan di Azure CLI
Memperbarui titik akhir
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=0 $GREEN_DEPLOYMENT_NAME=100"
Karena penyebaran lama tidak menerima lalu lintas apa pun, Anda dapat menghapusnya dengan aman:
az ml online-deployment delete --endpoint-name $ENDPOINT_NAME --name default
Tip
Perhatikan bahwa pada titik ini, "penyebaran biru" sebelumnya telah dihapus dan "penyebaran hijau" baru telah menggantikan "penyebaran biru".
Membersihkan sumber daya
az ml online-endpoint delete --name $ENDPOINT_NAME --yes
Penting
Perhatikan bahwa menghapus titik akhir juga menghapus semua penyebaran di bawahnya.
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk