Melakukan peluncuran penyebaran baru dengan aman untuk inferensi real time

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)

Dalam artikel ini, Anda akan mempelajari cara menyebarkan versi baru model pembelajaran mesin dalam produksi tanpa menyebabkan gangguan apa pun. Anda akan menggunakan strategi 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.

Artikel ini mengasumsikan Anda menggunakan titik akhir online, yaitu titik akhir yang digunakan untuk inferensi online (real-time). Ada dua jenis titik akhir online: titik akhir online terkelola dan titik akhir online Kubernetes. Untuk informasi selengkapnya tentang titik akhir dan perbedaan antara titik akhir online terkelola dan titik akhir online Kubernetes, lihat Apa itu titik akhir Azure Pembelajaran Mesin?.

Contoh utama dalam artikel ini menggunakan titik akhir online terkelola untuk penyebaran. Untuk menggunakan titik akhir Kubernetes, lihat catatan dalam dokumen ini yang sejajar dengan diskusi titik akhir online terkelola.

Dalam artikel ini, Anda akan mempelajari cara:

  • Tentukan titik akhir online dengan penyebaran yang disebut "biru" untuk melayani model versi 1
  • Skalakan penyebaran biru sehingga dapat menangani lebih banyak permintaan
  • Sebarkan model versi 2 (disebut penyebaran "hijau") ke titik akhir, tetapi kirim penyebaran tanpa lalu lintas langsung
  • Menguji penyebaran hijau dalam isolasi
  • Mencerminkan persentase lalu lintas langsung ke penyebaran hijau untuk memvalidasinya
  • Mengirim persentase kecil lalu lintas langsung ke penyebaran hijau
  • Mengirim semua lalu lintas langsung ke penyebaran hijau
  • Menghapus penyebaran biru v1 yang sekarang tidak digunakan

Prasyarat

Sebelum mengikuti langkah-langkah dalam artikel ini, pastikan Anda memiliki prasyarat berikut:

  • 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 ditetapkan sebagaipemilik atau kontributor untuk ruang kerja Azure Machine Learning, atau peran khusus yang memungkinkan Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Machine Learning.

  • (Opsional) Untuk menerapkan secara lokal, Anda harus memasang Docker Engine di komputer lokal Anda. Kami sangat merekomendasikan opsi ini, jadi lebih mudah untuk menghapus masalah.

Siapkan sistem Anda

Atur variabel lingkungan

Jika belum mengatur default untuk Azure CLI, simpan pengaturan default Anda. Untuk menghindari melewati nilai untuk langganan, ruang kerja, dan grup sumber daya Anda beberapa kali, jalankan kode ini:

az account set --subscription <subscription id>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

Mengkloning repositori contoh

Untuk mengikuti artikel ini, pertama-tama klon repositori contoh (azureml-examples). Kemudian, buka direktori repositori cli/ :

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli

Tip

Gunakan --depth 1 untuk mengkloning hanya penerapan terbaru ke repositori. Ini mengurangi waktu untuk menyelesaikan operasi.

Perintah dalam tutorial ini ada dalam file deploy-safe-rollout-online-endpoints.sh di cli direktori, dan file konfigurasi YAML berada di endpoints/online/managed/sample/ subdirektori.

Catatan

File konfigurasi YAML untuk titik akhir online Kubernetes berada di subdirektori endpoints/online/kubernetes/ .

Menentukan titik akhir dan penyebaran

Titik akhir online digunakan untuk inferensi online (real time). Titik akhir online berisi penyebaran yang siap menerima data dari klien dan mengirim respons kembali secara real time.

Menentukan titik akhir

Tabel berikut mencantumkan atribut kunci untuk ditentukan saat Anda menentukan titik akhir.

Atribut KETERANGAN
Nama Harus diisi. Nama titik akhir. Nama harus unik dalam wilayah Azure. Untuk informasi selengkapnya tentang aturan penamaan, lihat batas titik akhir.
Mode autentikasi Metode autentikasi untuk titik akhir. Pilih antara autentikasi berbasis kunci dan autentikasi keyaml_tokenberbasis token Azure Pembelajaran Mesin . Kunci tidak kedaluwarsa, tetapi token kedaluwarsa. Untuk informasi selengkapnya tentang mengautentikasi, lihat Mengautentikasi ke titik akhir online.
Deskripsi Deskripsi titik akhir.
Tag Kamus tag untuk titik akhir.
Lalu lintas Aturan tentang cara merutekan lalu lintas di seluruh penyebaran. Mewakili lalu lintas sebagai kamus pasangan kunci-nilai, di mana kunci mewakili nama dan nilai penyebaran mewakili persentase lalu lintas untuk penyebaran tersebut. Anda hanya dapat mengatur lalu lintas saat penyebaran di bawah titik akhir telah dibuat. Anda juga dapat memperbarui lalu lintas untuk titik akhir online setelah penyebaran dibuat. Untuk informasi selengkapnya tentang cara menggunakan lalu lintas cermin, lihat Mengalokasikan persentase kecil lalu lintas langsung ke penyebaran baru.
Lalu lintas cermin Persentase lalu lintas langsung untuk dicerminkan ke penyebaran. Untuk informasi selengkapnya tentang cara menggunakan lalu lintas cermin, lihat Menguji penyebaran dengan lalu lintas cermin.

Untuk melihat daftar lengkap atribut yang dapat Anda tentukan saat membuat titik akhir, lihat Skema YAML titik akhir online CLI (v2) atau Kelas SDK (v2) ManagedOnlineEndpoint.

Menentukan penyebaran

Penyebaran adalah kumpulan sumber daya yang diperlukan untuk menghosting model yang melakukan inferensi aktual. Tabel berikut ini menjelaskan atribut utama untuk ditentukan saat Anda menentukan penyebaran.

Atribut KETERANGAN
Nama Harus diisi. Nama penyebaran.
Nama titik akhir 2 Harus diisi. Nama titik akhir untuk membuat penyebaran di bawah ini.
Model Model yang digunakan untuk penyebaran. Nilai ini dapat berupa referensi ke model berversi yang ada di ruang kerja atau spesifikasi model sebaris. Dalam contoh, kami memiliki model scikit-learn yang melakukan regresi.
Jalur kode Jalur ke direktori pada lingkungan pengembangan lokal yang berisi semua kode sumber Python untuk menilai model. Anda dapat menggunakan direktori dan paket bertumpuk.
Skrip penskoran Kode Python yang menjalankan model pada permintaan input tertentu. Nilai ini dapat menjadi jalur relatif ke file penilaian di direktori kode sumber.
Skrip penilaian menerima data yang dikirimkan ke layanan web yang disebarkan dan meneruskannya ke model. Skrip kemudian menjalankan model dan mengembalikan responsnya ke klien. Skrip penilaian khusus untuk model Anda dan harus memahami data yang diharapkan model sebagai input dan kembali sebagai output.
Dalam contoh ini, kita memiliki file score.py . Kode Python ini harus memiliki fungsi init() dan fungsi run(). Fungsi init() akan dipanggil setelah model dibuat atau diperbarui (Anda dapat menggunakannya untuk menyimpan model dalam memori, misalnya). Fungsi run() ini disebut pada setiap pemanggilan titik akhir untuk melakukan penilaian/prediksi aktual.
Lingkungan Harus diisi. Lingkungan untuk menghosting model dan kode. Nilai ini dapat berupa referensi ke lingkungan berversi yang ada di ruang kerja atau spesifikasi lingkungan sebaris. Lingkungan dapat menjadi gambar Docker dengan dependensi Conda, Dockerfile, atau lingkungan terdaftar.
Jenis instans Harus diisi. Ukuran VM untuk digunakan untuk penyebaran. Untuk daftar ukuran yang didukung, lihat Daftar SKU titik akhir online terkelola.
Jumlah Instans Harus diisi. Jumlah instans yang digunakan untuk penyebaran. Mendasarkan nilai pada beban kerja yang Anda harapkan. Untuk ketersediaan tinggi, kami sarankan Anda menetapkan nilai ke setidaknya 3. Kami mencadangkan kuota tambahan sebesar 20% untuk melakukan peningkatan. Untuk informasi selengkapnya, lihat batasan untuk titik akhir online.

Untuk melihat daftar lengkap atribut yang dapat Anda tentukan saat membuat penyebaran, lihat Skema YAML penyebaran online terkelola CLI (v2) atau SDK (v2) ManagedOnlineDeployment Class.

Buat titik akhir online

Pertama-tama atur nama titik akhir lalu konfigurasikan. Dalam artikel ini, Anda akan menggunakan file titik akhir/online/terkelola/sampel/endpoint.yml untuk mengonfigurasi titik akhir. Cuplikan berikut menunjukkan konten file:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key

Referensi untuk format YAML titik akhir dijelaskan dalam tabel berikut. Untuk mempelajari cara menentukan atribut ini, lihat referensi YAML titik akhir online. Untuk informasi tentang batasan yang terkait dengan titik akhir online terkelola, lihat batasan untuk titik akhir online.

Kunci Deskripsi
$schema (Optional) Skema YAML. Untuk melihat semua opsi yang tersedia dalam file YAML, Anda dapat melihat skema dalam cuplikan kode sebelumnya di browser.
name Nama titik akhir.
auth_mode Gunakan key untuk autentikasi berbasis kunci. Gunakan aml_token untuk autentikasi berbasis token Azure Machine Learning. Untuk mendapatkan token terbaru, gunakan az ml online-endpoint get-credentials perintah .

Untuk membuat titik akhir online:

  1. Atur nama titik akhir Anda:

    Untuk Unix, jalankan perintah ini (ganti YOUR_ENDPOINT_NAME dengan nama unik):

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    

    Penting

    Nama titik akhir harus unik dalam satu wilayah Azure. Misalnya, di wilayah Azure westus2, hanya ada satu titik akhir dengan nama my-endpoint.

  2. Buat titik akhir di cloud:

    Jalankan kode berikut untuk menggunakan endpoint.yml file untuk mengonfigurasi titik akhir:

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    

Membuat penyebaran 'biru'

Dalam artikel ini, Anda akan menggunakan file titik akhir/online/terkelola/sampel/blue-deployment.yml untuk mengonfigurasi aspek utama penyebaran. Cuplikan berikut menunjukkan konten file:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
  path: ../../model-1/model/
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: 
  conda_file: ../../model-1/environment/conda.yaml
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

Untuk membuat penyebaran bernama blue untuk titik akhir Anda, jalankan perintah berikut untuk menggunakan file untuk blue-deployment.yml mengonfigurasi

az ml online-deployment create --name blue --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic

Penting

Bendera --all-traffic dalam az ml online-deployment create mengalokasikan 100% lalu lintas titik akhir ke penyebaran biru yang baru dibuat.

blue-deployment.yaml Dalam file, kami menentukan path (tempat mengunggah file dari) sebaris. CLI secara otomatis mengunggah file dan mendaftarkan model dan lingkungan. Sebagai praktik terbaik untuk produksi, Anda harus mendaftarkan model dan lingkungan secara terpisah dan menentukan nama dan versi terdaftar dalam YAML. Gunakan formulir model: azureml:my-model:1 atau environment: azureml:my-env:1.

Untuk pendaftaran, Anda dapat mengekstrak definisi YAML dari model dan environment ke file YAML terpisah dan menggunakan perintah az ml model create dan az ml environment create. Untuk mempelajari perintah ini lebih lanjut, jalankan az ml model create -h dan az ml environment create -h.

Untuk informasi selengkapnya tentang mendaftarkan model Anda sebagai aset, lihat Mendaftarkan model Anda sebagai aset di Pembelajaran Mesin dengan menggunakan CLI. Untuk informasi selengkapnya tentang membuat lingkungan, lihat Mengelola lingkungan Azure Pembelajaran Mesin dengan CLI & SDK (v2).

Mengonfirmasi penyebaran anda yang sudah ada

Salah satu cara untuk mengonfirmasi penyebaran yang ada adalah dengan memanggil titik akhir Anda sehingga dapat menilai model Anda untuk permintaan input tertentu. Saat memanggil titik akhir melalui CLI atau Python SDK, Anda dapat memilih untuk menentukan nama penyebaran yang akan menerima lalu lintas masuk.

Catatan

Tidak seperti CLI atau Python SDK, studio Azure Pembelajaran Mesin mengharuskan Anda menentukan penyebaran saat Anda memanggil titik akhir.

Memanggil titik akhir dengan nama penyebaran

Jika Anda memanggil titik akhir dengan nama penyebaran yang akan menerima lalu lintas, Azure Pembelajaran Mesin akan merutekan lalu lintas titik akhir langsung ke penyebaran yang ditentukan dan mengembalikan outputnya. Anda dapat menggunakan --deployment-name opsi untuk CLI v2, atau deployment_name opsi untuk SDK v2 untuk menentukan penyebaran.

Memanggil titik akhir tanpa menentukan penyebaran

Jika Anda memanggil titik akhir tanpa menentukan penyebaran yang akan menerima lalu lintas, Azure Pembelajaran Mesin akan merutekan lalu lintas masuk titik akhir ke penyebaran di titik akhir berdasarkan pengaturan kontrol lalu lintas.

Pengaturan kontrol lalu lintas mengalokasikan persentase lalu lintas masuk yang ditentukan ke setiap penyebaran di titik akhir. Misalnya, jika aturan lalu lintas Anda menentukan bahwa penyebaran tertentu di titik akhir Anda akan menerima lalu lintas masuk 40% dari waktu, Azure Pembelajaran Mesin akan merutekan 40% lalu lintas titik akhir ke penyebaran tersebut.

Anda dapat melihat status titik akhir dan penyebaran yang ada dengan menjalankan:

az ml online-endpoint show --name $ENDPOINT_NAME 

az ml online-deployment show --name blue --endpoint $ENDPOINT_NAME 

Anda akan melihat titik akhir yang diidentifikasi oleh $ENDPOINT_NAME dan, penyebaran yang disebut blue.

Menguji titik akhir dengan data sampel

Titik akhir dapat dipanggil menggunakan invoke perintah . Kami akan mengirimkan permintaan sampel menggunakan file json.

az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

Menskalakan penyebaran yang ada untuk menangani lebih banyak lalu lintas

Dalam penyebaran yang dijelaskan dalam Menyebarkan dan menilai model pembelajaran mesin dengan titik akhir online, Anda mengatur instance_count ke nilai 1 dalam file yaml penyebaran. Anda dapat meluaskan skala menggunakan perintah update:

az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2

Catatan

Perhatikan bahwa dalam perintah di atas kami menggunakan --set untuk mengambil alih konfigurasi penyebaran. Atau Anda dapat memperbarui file yaml dan meneruskannya sebagai input ke perintah update menggunakan input --file.

Menyebarkan model baru, tetapi belum mengirimkannya lalu lintas

Buat penyebaran baru bernama green:

az ml online-deployment create --name green --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/green-deployment.yml

Karena kami belum secara eksplisit mengalokasikan lalu lintas apa pun ke green, lalu lintas tersebut tidak memiliki lalu lintas yang dialokasikan untuknya. Anda dapat memverifikasi hal tersebut menggunakan perintah:

az ml online-endpoint show -n $ENDPOINT_NAME --query traffic

Menguji penyebaran baru

Meskipun green memiliki 0% lalu lintas yang dialokasikan, Anda dapat memanggilnya secara langsung dengan menentukan nama --deployment:

az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name green --request-file endpoints/online/model-2/sample-request.json

Jika Anda ingin menggunakan klien REST untuk memanggil penyebaran secara langsung tanpa melalui aturan lalu lintas, atur header HTTP berikut: azureml-model-deployment: <deployment-name>. Cuplikan kode di bawah ini menggunakan curl untuk memanggil penyebaran secara langsung. Cuplikan kode harus berfungsi di lingkungan Unix/WSL:

# get the scoring uri
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
# use curl to invoke the endpoint
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --header "azureml-model-deployment: green" --data @endpoints/online/model-2/sample-request.json

Menguji penyebaran dengan lalu lintas yang dicerminkan

Setelah menguji penyebaran, Anda dapat mencerminkan green (atau menyalin) persentase lalu lintas langsung ke penyebaran tersebut. Pencerminan lalu lintas (juga disebut bayangan) tidak mengubah hasil yang dikembalikan ke klien—permintaan masih mengalir 100% ke blue penyebaran. Persentase lalu lintas yang dicerminkan disalin dan dikirimkan ke green penyebaran sehingga Anda dapat mengumpulkan metrik dan pengelogan tanpa memengaruhi klien Anda. Pencerminan berguna saat Anda ingin memvalidasi penyebaran baru tanpa memengaruhi klien. Misalnya, Anda dapat menggunakan pencerminan untuk memeriksa apakah latensi berada dalam batas yang dapat diterima atau untuk memeriksa bahwa tidak ada kesalahan HTTP. Menguji penyebaran baru dengan pencerminan/bayangan lalu lintas juga dikenal sebagai pengujian bayangan. Penyebaran yang menerima lalu lintas cermin (dalam hal ini, green penyebaran) juga dapat disebut penyebaran bayangan.

Pencerminan memiliki batasan berikut:

  • Pencerminan didukung untuk CLI (v2) (versi 2.4.0 atau lebih tinggi) dan Python SDK (v2) (versi 1.0.0 atau lebih tinggi). Jika Anda menggunakan versi CLI/SDK yang lebih lama untuk memperbarui titik akhir, Anda akan kehilangan pengaturan lalu lintas cermin.
  • Pencerminan saat ini tidak didukung untuk titik akhir online Kubernetes.
  • Anda hanya dapat mencerminkan lalu lintas ke satu penyebaran di titik akhir.
  • Persentase maksimum lalu lintas yang dapat Anda cerminkan adalah 50%. Batas ini untuk mengurangi efek pada kuota bandwidth titik akhir Anda (default 5 MBPS)—bandwidth titik akhir Anda dibatasi jika Anda melebihi kuota yang dialokasikan. Untuk informasi tentang pembatasan bandwidth pemantauan, lihat Memantau titik akhir online terkelola.

Perhatikan juga perilaku berikut:

  • Penyebaran dapat dikonfigurasi untuk hanya menerima lalu lintas langsung atau lalu lintas cermin, bukan keduanya.
  • Saat Anda memanggil titik akhir, Anda dapat menentukan nama salah satu penyebarannya — bahkan penyebaran bayangan — untuk mengembalikan prediksi.
  • Saat Anda memanggil titik akhir dengan nama penyebaran yang akan menerima lalu lintas masuk, Azure Pembelajaran Mesin tidak akan mencerminkan lalu lintas ke penyebaran bayangan. Azure Pembelajaran Mesin mencerminkan lalu lintas ke penyebaran bayangan dari lalu lintas yang dikirim ke titik akhir saat Anda tidak menentukan penyebaran.

Sekarang, mari kita atur penyebaran hijau untuk menerima 10% lalu lintas cermin. Klien masih akan menerima prediksi dari penyebaran biru saja.

Diagram showing 10% traffic mirrored to one deployment.

Perintah berikut mencerminkan 10% lalu lintas ke penyebaran green:

az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=10"

Anda dapat menguji lalu lintas cermin dengan memanggil titik akhir beberapa kali tanpa menentukan penyebaran untuk menerima lalu lintas masuk:

for i in {1..20} ; do
    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
done

Anda dapat mengonfirmasi bahwa persentase spesifik lalu lintas dikirim ke green penyebaran dengan melihat log dari penyebaran:

az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME

Setelah menguji, Anda dapat mengatur lalu lintas cermin ke nol untuk menonaktifkan pencerminan:

az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=0"

Mengalokasikan sebagian kecil lalu lintas langsung ke penyebaran baru

Setelah Anda menguji penyebaran green, alokasikan sebagian kecil lalu lintas ke penyebaran:

az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=90 green=10"

Tip

Persentase lalu lintas total harus berjumlah 0% (untuk menonaktifkan lalu lintas) atau 100% (untuk mengaktifkan lalu lintas).

Sekarang, penyebaran Anda green menerima 10% dari semua lalu lintas langsung. Klien akan menerima prediksi dari blue penyebaran dan green .

Diagram showing traffic split between deployments.

Mengirim semua lalu lintas ke penyebaran baru

Setelah Anda sepenuhnya puas dengan penyebaran Anda green , alihkan semua lalu lintas ke penyebaran tersebut.

az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=0 green=100"

Menghapus penyebaran lama

Gunakan langkah-langkah berikut untuk menghapus penyebaran individual dari titik akhir online terkelola. Menghapus penyebaran individual memang memengaruhi penyebaran lain di titik akhir online terkelola:

az ml online-deployment delete --name blue --endpoint $ENDPOINT_NAME --yes --no-wait

Menghapus titik akhir dan penyebaran

Jika Anda tidak akan menggunakan titik akhir dan penyebaran, Anda harus menghapusnya. Dengan menghapus titik akhir, Anda juga akan menghapus semua penyebaran yang mendasar.

az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait