Menyebarkan dan menilai model pembelajaran mesin menggunakan titik akhir online

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

Dalam artikel ini, Anda akan belajar menyebarkan model Anda ke titik akhir online untuk digunakan dalam inferensi real time. Anda akan mulai dengan menyebarkan model di komputer lokal Anda untuk men-debug kesalahan apa pun. Kemudian, Anda akan menyebarkan dan menguji model di Azure. Anda juga akan belajar melihat log penyebaran dan memantau perjanjian tingkat layanan (SLA). Pada akhir artikel ini, Anda akan memiliki titik akhir HTTPS/REST yang dapat diskalakan yang dapat Anda gunakan untuk inferensi real time.

Titik akhir online adalah titik akhir yang digunakan untuk inferensi 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?.

Titik akhir online terkelola membantu menyebarkan model ML Anda secara turnkey. Titik akhir online terkelola bekerja dengan mesin CPU dan GPU yang kuat di Azure dengan cara yang dapat diskalakan dan dikelola sepenuhnya. Titik akhir online yang dikelola menangani penyajian, penskalaan, pengamanan, dan pemantauan model Anda, membebaskan Anda dari overhead pengaturan dan pengelolaan infrastruktur yang mendasarinya.

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

Prasyarat

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

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/*. Jika Anda menggunakan studio untuk membuat/mengelola titik akhir/penyebaran online, Anda akan memerlukan izin tambahan "Microsoft.Resources/deployments/write" dari pemilik grup sumber daya. 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.

Alokasi kuota komputer virtual untuk penyebaran

Untuk titik akhir online terkelola, Azure Pembelajaran Mesin mencadangkan 20% sumber daya komputasi Anda untuk melakukan peningkatan pada beberapa SKU VM. Jika Anda meminta sejumlah instans dalam penyebaran, Anda harus memiliki kuota yang tersedia untuk ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU menghindari kesalahan. Misalnya, jika Anda meminta 10 instans VM Standard_DS3_v2 (yang dilengkapi dengan 4 core) dalam penyebaran, Anda harus memiliki kuota untuk 48 core (12 instances * 4 cores) yang tersedia. Untuk melihat peningkatan penggunaan dan permintaan kuota Anda, lihat Melihat penggunaan dan kuota Anda di portal Azure.

Ada SKU VM tertentu yang dikecualikan dari reservasi kuota tambahan. Untuk melihat daftar lengkap, lihat Daftar SKU titik akhir online terkelola.

Azure Pembelajaran Mesin menyediakan kumpulan kuota bersama tempat semua pengguna dapat mengakses kuota untuk melakukan pengujian dalam waktu terbatas. Saat Anda menggunakan studio untuk menyebarkan model Llama-2, Phi, Nemotron, Mistral, Dolly, dan Deci-DeciLM dari katalog model ke titik akhir online terkelola, Azure Pembelajaran Mesin memungkinkan Anda mengakses kuota bersama ini untuk waktu yang singkat.

Untuk informasi selengkapnya tentang cara menggunakan kuota bersama untuk penyebaran titik akhir online, lihat Cara menyebarkan model fondasi menggunakan studio.

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, jalankan kode berikut untuk masuk ke 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, yang mengurangi waktu untuk menyelesaikan operasi.

Perintah dalam tutorial ini ada di file deploy-local-endpoint.sh dan deploy-managed-online-endpoint.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/ .

Tentukan titik akhir

Untuk menentukan titik akhir, Anda perlu menentukan:

  • Nama titik akhir: 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 berbasis token Azure Pembelajaran Mesin. Kunci tidak kedaluwarsa, tetapi token kedaluwarsa. Untuk informasi selengkapnya tentang mengautentikasi, lihat Mengautentikasi ke titik akhir online.
  • Secara opsional, Anda dapat menambahkan deskripsi dan tag ke titik akhir Anda.

Mengatur nama titik akhir

Untuk mengatur nama titik akhir Anda, jalankan perintah berikut (ganti YOUR_ENDPOINT_NAME dengan nama unik).

Untuk Linux, jalankan perintah ini:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Mengonfigurasi titik akhir

Cuplikan berikut memperlihatkan file endpoints/online/managed/sample/endpoint.yml:

$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 batas yang terkait dengan titik akhir 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 .

Menentukan penyebaran

Penyebaran adalah kumpulan sumber daya yang diperlukan untuk menghosting model yang melakukan inferensi aktual. Untuk menyebarkan model, Anda harus memiliki:

  • File model (atau nama dan versi model yang sudah terdaftar di ruang kerja Anda). Dalam contoh, kami memiliki model scikit-learn yang melakukan regresi.
  • Skrip penilaian, yaitu kode yang menjalankan model pada permintaan input tertentu. 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 .
  • Lingkungan tempat model Anda berjalan. Lingkungan dapat menjadi gambar Docker dengan dependensi Conda atau Dockerfile.
  • Pengaturan untuk menentukan jenis instans dan kapasitas penskalaan.

Tabel berikut menjelaskan atribut utama penyebaran:

Atribut KETERANGAN
Nama Nama penyebaran.
Nama titik akhir 2 Nama titik akhir untuk membuat penyebaran di bawah.
Model Model yang digunakan untuk penyebaran. Nilai ini dapat berupa referensi ke model berversi yang ada di ruang kerja atau spesifikasi model sebaris.
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 Jalur relatif ke file penilaian di direktori kode sumber. 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 Lingkungan untuk menghosting model dan kode. Nilai ini dapat berupa referensi ke lingkungan berversi yang ada di ruang kerja atau spesifikasi lingkungan sebaris.
Jenis instans Ukuran VM untuk digunakan untuk penyebaran. Untuk daftar ukuran yang didukung, lihat Daftar SKU titik akhir online terkelola.
Jumlah Instans 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 alokasi kuota komputer virtual untuk penyebaran.

Catatan

  • Model dan gambar kontainer (seperti yang didefinisikan dalam Lingkungan) dapat dirujuk lagi kapan saja oleh penyebaran ketika instans di balik penyebaran melalui patch keamanan dan/atau operasi pemulihan lainnya. Jika Anda menggunakan model terdaftar atau gambar kontainer di Azure Container Registry untuk penyebaran dan menghapus model atau gambar kontainer, penyebaran yang mengandalkan aset ini dapat gagal saat pencitraan ulang terjadi. Jika Anda menghapus model atau gambar kontainer, pastikan penyebaran dependen dibuat ulang atau diperbarui dengan model alternatif atau gambar kontainer.
  • Registri kontainer yang dirujuk lingkungan dapat bersifat privat hanya jika identitas titik akhir memiliki izin untuk mengaksesnya melalui autentikasi Microsoft Entra dan Azure RBAC. Untuk alasan yang sama, registri Docker privat selain Azure Container Registry tidak didukung.

Mengonfigurasi penyebaran

Cuplikan berikut menunjukkan file titik akhir/online/terkelola/sampel/blue-deployment.yml , dengan semua input yang diperlukan untuk mengonfigurasi penyebaran:

$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

Catatan

Dalam file blue-deployment.yml, kami telah menentukan atribut penyebaran berikut:

  • model - Dalam contoh ini, kami menentukan properti model sebaris menggunakan path. File model secara otomatis diunggah dan didaftarkan dengan nama yang dibuat secara otomatis.
  • environment - Dalam contoh ini, kita memiliki definisi sebaris yang menyertakan path. Kami akan menggunakan environment.docker.image untuk gambar. Dependensi conda_file akan dipasang di atas gambar.

Selama penyebaran, file lokal seperti sumber data Python untuk model penilaian, diunggah dari lingkungan pengembangan.

Untuk informasi selengkapnya tentang skema YAML, lihat referensi YAML titik akhir online.

Catatan

Untuk menggunakan Azure alih-alih titik akhir terkelola sebagai target komputasi:

  1. Buat dan lampirkan kluster AKS sebagai target komputasi ke ruang kerja Azure Machine Learning menggunakan Azure Machine Learning studio.
  2. Gunakan YAML titik akhir untuk menargetkan Kubernetes alih-alih YAML titik akhir terkelola. Anda harus mengedit YAML untuk mengubah nilai target menjadi nama target komputasi terdaftar Anda. Anda dapat menggunakan deployment.yaml ini yang memiliki properti tambahan yang berlaku untuk penyebaran Kubernetes.

Semua perintah yang digunakan dalam artikel ini (kecuali pemantauan SLA opsional dan integrasi Azure Log Analytics) dapat digunakan baik dengan titik akhir terkelola maupun dengan titik akhir Kubernetes.

Daftarkan model dan lingkungan Anda secara terpisah

Dalam contoh ini, kami menentukan path (tempat untuk 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).

Menggunakan jenis dan gambar instans CPU dan GPU yang berbeda

Definisi sebelumnya dalam file blue-deployment.yml menggunakan instans jenis Standard_DS3_v2 tujuan umum dan gambar mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestDocker non-GPU . Untuk komputasi GPU, pilih SKU jenis komputasi GPU dan gambar Docker GPU.

Untuk tipe instans tujuan umum dan GPU yang didukung, lihat SKU VM yang didukung titik akhir online terkelola. Untuk daftar gambar dasar CPU dan GPU Azure Machine Learning, lihat gambar dasar Azure Machine Learning.

Catatan

Untuk menggunakan Kubernetes alih-alih titik akhir terkelola sebagai target komputasi, lihat Pengantar target komputasi Kubernetes.

Mengidentifikasi jalur model sehubungan dengan AZUREML_MODEL_DIR

Saat menyebarkan model Anda ke Azure Pembelajaran Mesin, Anda perlu menentukan lokasi model yang ingin Anda sebarkan sebagai bagian dari konfigurasi penyebaran Anda. Di Azure Pembelajaran Mesin, jalur ke model Anda dilacak dengan AZUREML_MODEL_DIR variabel lingkungan. Dengan mengidentifikasi jalur model sehubungan AZUREML_MODEL_DIRdengan , Anda dapat menyebarkan satu atau beberapa model yang disimpan secara lokal di komputer Anda atau menyebarkan model yang terdaftar di ruang kerja Azure Pembelajaran Mesin Anda.

Untuk ilustrasi, kami mereferensikan struktur folder lokal berikut untuk dua kasus pertama tempat Anda menyebarkan satu model atau menyebarkan beberapa model yang disimpan secara lokal:

A screenshot showing a folder structure containing multiple models.

Menggunakan satu model lokal dalam penyebaran

Untuk menggunakan satu model yang Anda miliki di komputer lokal Anda dalam penyebaran, tentukan path ke model dalam YAML penyebaran Anda. Berikut adalah contoh YAML penyebaran dengan jalur /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl:

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

Setelah Anda membuat penyebaran, variabel AZUREML_MODEL_DIR lingkungan akan menunjuk ke lokasi penyimpanan dalam Azure tempat model Anda disimpan. Misalnya, /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 akan berisi model sample_m1.pkl.

Dalam skrip penilaian Anda (score.py), Anda dapat memuat model Anda (dalam contoh ini, sample_m1.pkl) dalam init() fungsi:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl") 
    model = joblib.load(model_path) 

Menggunakan beberapa model lokal dalam penyebaran

Meskipun Azure CLI, Python SDK, dan alat klien lainnya memungkinkan Anda menentukan hanya satu model per penyebaran dalam definisi penyebaran, Anda masih dapat menggunakan beberapa model dalam penyebaran dengan mendaftarkan folder model yang berisi semua model sebagai file atau subdirektori.

Dalam contoh struktur folder sebelumnya, Anda melihat bahwa ada beberapa model di models folder. Dalam YAML penyebaran, Anda dapat menentukan jalur ke models folder sebagai berikut:

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

Setelah Anda membuat penyebaran, variabel AZUREML_MODEL_DIR lingkungan akan menunjuk ke lokasi penyimpanan dalam Azure tempat model Anda disimpan. Misalnya, /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 akan berisi model dan struktur file.

Untuk contoh ini, konten AZUREML_MODEL_DIR folder akan terlihat seperti ini:

A screenshot of the folder structure of the storage location for multiple models.

Dalam skrip penilaian Anda (score.py), Anda dapat memuat model Anda dalam init() fungsi . Kode berikut memuat sample_m1.pkl model:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ") 
    model = joblib.load(model_path) 

Untuk contoh cara menyebarkan beberapa model ke satu penyebaran, lihat Menyebarkan beberapa model ke satu penyebaran (contoh CLI) dan Menyebarkan beberapa model ke satu penyebaran (contoh SDK).

Tip

Jika Anda memiliki lebih dari 1500 file untuk didaftarkan, pertimbangkan untuk mengompresi file atau subdirektori sebagai .tar.gz saat mendaftarkan model. Untuk menggunakan model, Anda dapat menghapus kompresi file atau subdirektori dalam init() fungsi dari skrip penilaian. Atau, ketika Anda mendaftarkan model, atur azureml.unpack properti ke True, untuk secara otomatis membongkar file atau subdirektori. Dalam kedua kasus, uncompression terjadi sekali dalam tahap inisialisasi.

Menggunakan model yang terdaftar di ruang kerja Azure Pembelajaran Mesin Anda dalam penyebaran

Untuk menggunakan satu atau beberapa model, yang terdaftar di ruang kerja Azure Pembelajaran Mesin Anda, dalam penyebaran Anda, tentukan nama model terdaftar dalam YAML penyebaran Anda. Misalnya, konfigurasi YAML penyebaran berikut menentukan nama terdaftar model sebagai azureml:local-multimodel:3:

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

Untuk contoh ini, pertimbangkan bahwa local-multimodel:3 berisi artefak model berikut, yang dapat dilihat dari tab Model di studio Azure Pembelajaran Mesin:

A screenshot of the folder structure showing the model artifacts of the registered model.

Setelah Anda membuat penyebaran, variabel AZUREML_MODEL_DIR lingkungan akan menunjuk ke lokasi penyimpanan dalam Azure tempat model Anda disimpan. Misalnya, /var/azureml-app/azureml-models/local-multimodel/3 akan berisi model dan struktur file. AZUREML_MODEL_DIR akan menunjuk ke folder yang berisi akar artefak model. Berdasarkan contoh ini, konten AZUREML_MODEL_DIR folder akan terlihat seperti ini:

A screenshot of the folder structure showing multiple models.

Dalam skrip penilaian Anda (score.py), Anda dapat memuat model Anda dalam init() fungsi . Misalnya, muat diabetes.sav model:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav") 
    model = joblib.load(model_path) 

Memahami skrip penilaian

Tip

Format skrip penilaian untuk titik akhir online terkelola adalah format yang sama yang digunakan dalam CLI versi sebelumnya dan di Python SDK.

Seperti disebutkan sebelumnya, skrip penilaian yang ditentukan di code_configuration.scoring_script harus memiliki init() fungsi dan run() fungsi.

Contoh ini menggunakan file score.py: score.py

import os
import logging
import json
import numpy
import joblib


def init():
    """
    This function is called when the container is initialized/started, typically after create/update of the deployment.
    You can write the logic here to perform init operations like caching the model in memory
    """
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
    )
    # deserialize the model file back into a sklearn model
    model = joblib.load(model_path)
    logging.info("Init complete")


def run(raw_data):
    """
    This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
    In the example we extract the data from the json input and call the scikit-learn model's predict()
    method and return the result back
    """
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

Fungsi init() ini dipanggil saat kontainer diinisialisasi/dimulai. Inisialisasi ini biasanya terjadi tak lama setelah penyebaran dibuat atau diperbarui. Fungsi ini init adalah tempat untuk menulis logika untuk operasi inisialisasi global seperti penembolokan model dalam memori (seperti yang kita lakukan dalam contoh ini).

Fungsi run() ini dipanggil untuk setiap pemanggilan titik akhir, dan melakukan penilaian dan prediksi aktual. Dalam contoh ini, kita akan mengekstrak data dari input JSON, memanggil metode model predict() scikit-learn, lalu mengembalikan hasilnya.

Sebarkan dan debug secara lokal menggunakan titik akhir lokal

Kami sangat menyarankan Agar Anda menguji-jalankan titik akhir Anda secara lokal dengan memvalidasi dan men-debug kode dan konfigurasi Anda sebelum Anda menyebarkan ke Azure. Azure CLI dan Python SDK mendukung titik akhir dan penyebaran lokal, sementara azure Pembelajaran Mesin studio dan templat ARM tidak.

Untuk menyebarkan secara lokal, Docker Engine harus diinstal dan berjalan. Mesin Docker biasanya dimulai ketika komputer dimulai. Jika tidak, Anda dapat memecahkan masalah Docker Engine.

Tip

Anda dapat menggunakan paket Python server HTTP inferensi Azure Pembelajaran Mesin untuk men-debug skrip penilaian Anda secara lokal tanpa Docker Engine. Penelusuran kesalahan dengan server inferensi membantu Anda men-debug skrip penilaian sebelum menyebarkan ke titik akhir lokal sehingga Anda dapat men-debug tanpa terpengaruh oleh konfigurasi kontainer penyebaran.

Catatan

Titik akhir lokal memiliki batasan berikut:

  • Mereka tidak mendukung aturan lalu lintas, autentikasi, atau pengaturan pemeriksaan.
  • Mereka hanya mendukung satu penyebaran per titik akhir.
  • Mereka mendukung file model lokal dan lingkungan dengan file conda lokal saja. Jika Anda ingin menguji model terdaftar, pertama-tama unduh menggunakan CLI atau SDK, lalu gunakan path dalam definisi penyebaran untuk merujuk ke folder induk. Jika Anda ingin menguji lingkungan terdaftar, periksa konteks lingkungan di studio Azure Pembelajaran Mesin dan siapkan file conda lokal untuk digunakan. Contoh dalam artikel ini menunjukkan penggunaan model dan lingkungan lokal dengan file conda lokal, yang mendukung penyebaran lokal.

Untuk informasi selengkapnya tentang penelusuran kesalahan titik akhir online secara lokal sebelum menyebarkan ke Azure, lihat Men-debug titik akhir online secara lokal di Visual Studio Code.

Menyebarkan model secara lokal

Pertama-tama buat titik akhir. Secara opsional, untuk titik akhir lokal, Anda dapat melewati langkah ini dan langsung membuat penyebaran (langkah berikutnya), yang pada gilirannya akan membuat metadata yang diperlukan. Menyebarkan model secara lokal berguna untuk tujuan pengembangan dan pengujian.

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

Sekarang, buat penyebaran bernama blue di bagian titik akhir.

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

Bendera --local mengarahkan CLI untuk menyebarkan titik akhir di lingkungan Docker.

Tip

Gunakan Visual Studio Code untuk menguji dan mendebug titik akhir Anda secara lokal. Untuk informasi selengkapnya, lihat mendebug titik akhir online secara lokal di Visual Studio Code.

Verifikasi apakah penyebaran lokal berhasil

Periksa status untuk melihat apakah model tersebut disebarkan tanpa kesalahan:

az ml online-endpoint show -n $ENDPOINT_NAME --local

Output harus serupa dengan JSON berikut. provisioning_state adalah Succeeded.

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

Tabel berikut berisi peluang nilai untuk provisioning_state:

Provinsi Deskripsi
Membuat Sumber daya sedang dibuat.
Memperbarui Sumber daya sedang diperbarui.
Menghapus Sumber daya sedang dihapus.
Berhasil Operasi buat/perbarui berhasil.
Gagal Operasi buat/perbarui/hapus telah gagal.

Panggil titik akhir lokal untuk menilai data dengan model Anda

Panggil titik akhir untuk menilai model dengan menggunakan perintah yang mudah invoke dan meneruskan parameter kueri yang disimpan dalam file JSON:

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

Jika Anda ingin menggunakan klien REST (seperti curl), Anda harus memiliki URI penilaian. Untuk mendapatkan penilaian URI, jalankanaz ml online-endpoint show --local -n $ENDPOINT_NAME. Dalam data yang dikembalikan, temukan atribut scoring_uri. Contoh perintah berbasis curl tersedia nanti di dokumen ini.

Meninjau log output dari operasi panggil

Dalam contoh file score.py, metode run() mencatat output tertentu ke konsol.

Anda dapat melihat output ini dengan menggunakan get-logs perintah :

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

Menyebarkan titik akhir online Anda ke Azure

Selanjutnya, sebarkan titik akhir online Anda ke Azure.

Sebarkan ke Azure

Untuk membuat titik akhir di cloud, jalankan kode berikut:

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

Untuk membuat penyebaran bernama blue di bagian titik akhir, jalankan kode berikut:

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

Penyebaran ini dapat memakan waktu hingga 15 menit, tergantung pada apakah lingkungan atau gambar yang mendasarinya dibuat untuk pertama kalinya atau tidak. Penyebaran berikutnya yang menggunakan lingkungan yang sama akan selesai diproses lebih cepat.

Tip

  • Jika lebih suka untuk tidak memblokir konsol CLI, Anda dapat menambahkan bendera --no-wait ke perintah. Namun, tindakan ini akan menghentikan tampilan interaktif status penyebaran.

Penting

--all-traffic Bendera di atas az ml online-deployment create mengalokasikan 100% lalu lintas titik akhir ke penyebaran biru yang baru dibuat. Meskipun ini sangat membantu untuk tujuan pengembangan dan pengujian, untuk produksi, Anda mungkin ingin membuka lalu lintas ke penyebaran baru melalui perintah eksplisit. Contohnya,az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

Tip

Memeriksa status titik akhir

show Perintah berisi informasi di provisioning_state untuk titik akhir dan penyebaran:

az ml online-endpoint show -n $ENDPOINT_NAME

Anda dapat mencantumkan semua titik akhir di ruang kerja dalam format tabel dengan menggunakan perintah list:

az ml online-endpoint list --output table

Periksa status penyebaran online

Periksa log untuk melihat apakah model disebarkan tanpa kesalahan.

Untuk melihat output log dari kontainer, gunakan perintah CLI berikut:

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

Secara default, log ditarik dari kontainer server inferensi. Untuk melihat log dari kontainer penginisialisasi penyimpanan, tambahkan --container storage-initializer bendera. Untuk informasi selengkapnya tentang log penyebaran, lihat Mendapatkan log kontainer.

Panggil titik akhir lokal untuk menilai data dengan model Anda

Anda dapat menggunakan perintah invoke atau klien REST pilihan Anda untuk memanggil titik akhir dan menilai beberapa data:

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

Contoh berikut menunjukkan cara menggunakan kunci untuk mengautentikasi ke titik akhir:

Tip

Anda dapat mengontrol prinsip keamanan Microsoft Entra mana yang bisa mendapatkan kunci autentikasi dengan menetapkannya ke peran kustom yang memungkinkan Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action dan Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Machine Learning.

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)

Selanjutnya, gunakan curl untuk menilai data.

SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)

curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json

Perhatikan bahwa kami menggunakan perintah show dan get-credentials untuk mendapatkan kredensial autentikasi. Selain itu perhatikan bahwa kami menggunakan bendera --query untuk memfilter atribut ke hanya yang kami butuhkan. Untuk mempelajari selengkapnya tentang--query, lihat Mengkueri output perintah Azure CLI.

Untuk melihat log pemanggilan, jalankan get-logs lagi.

Untuk informasi tentang mengautentikasi menggunakan token, lihat Mengautentikasi ke titik akhir online.

[Opsional] Perbarui penyebaran

Jika Anda ingin memperbarui kode, model, atau lingkungan, perbarui file YAML, lalu jalankan perintah az ml online-endpoint update.

Catatan

Jika Anda memperbarui jumlah instans (untuk menskalakan penyebaran Anda) bersama dengan pengaturan model lain (seperti kode, model, atau lingkungan) dalam satu update perintah, operasi penskalaan akan dilakukan terlebih dahulu, maka pembaruan lainnya akan diterapkan. Ini adalah praktik yang baik untuk melakukan operasi ini secara terpisah di lingkungan produksi.

Untuk memahami cara kerja update:

  1. Buka file online/model-1/onlinescoring/score.py.

  2. Ubah baris terakhir dari fungsi init(): setelah logging.info("Init complete"), tambahkan logging.info("Updated successfully").

  3. Simpan file.

  4. Jalankan perintah ini:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
    

    Catatan

    Memperbarui dengan menggunakan YAML adalah deklaratif. Artinya, perubahan dalam YAML akan tercermin dalam sumber daya Azure Resource Manager yang mendasarinya (titik akhir & penyebaran). Pendekatan deklaratif memudahkan GitOps: Semua perubahan pada titik akhir/penyebaran (bahkan instance_count) melalui YAML.

    Tip

    • Anda dapat menggunakan parameter pembaruan generik, seperti --set parameter , dengan perintah CLI update untuk mengambil alih atribut di YAML Anda atau untuk mengatur atribut tertentu tanpa meneruskannya dalam file YAML. Penggunaan --set untuk atribut tunggal sangat berguna dalam skenario pengembangan/pengujian. Misalnya, untuk meningkatkan skala nilai instance_count untuk penyebaran pertama, Anda dapat menggunakan bendera --set instance_count=2. Namun, karena YAML tidak diperbarui, teknik ini tidak memudahkan GitOps.
    • Menentukan file YAML TIDAK wajib. Misalnya, jika Anda ingin menguji pengaturan konkurensi yang berbeda untuk penyebaran tertentu, Anda dapat mencoba sesuatu seperti az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4. Ini akan mempertahankan semua konfigurasi yang ada tetapi hanya memperbarui parameter yang ditentukan.
  5. Karena Anda memodifikasi init() fungsi, yang berjalan ketika titik akhir dibuat atau diperbarui, pesan Updated successfully akan berada di log. Ambil URL dengan menjalankan:

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

Perintah update juga berfungsi dengan penyebaran lokal. Gunakan perintah az ml online-deployment update yang sama dengan bendera --local.

Catatan

Pembaruan sebelumnya untuk penyebaran adalah contoh pembaruan bergulir di tempat.

  • Untuk titik akhir online terkelola, penyebaran diperbarui ke konfigurasi baru dengan simpul 20% pada satu waktu. Artinya, jika penyebaran memiliki 10 simpul, 2 simpul pada satu waktu akan diperbarui.
  • Untuk titik akhir online Kubernetes, sistem akan secara berulang membuat instans penyebaran baru dengan konfigurasi baru dan menghapus yang lama.
  • Untuk penggunaan produksi, Anda harus mempertimbangkan penyebaran biru-hijau, yang menawarkan alternatif yang lebih aman untuk memperbarui layanan web.

(Opsional) Konfigurasikan penskalaan otomatis

Skala otomatis secara otomatis menjalankan jumlah sumber daya yang tepat untuk menangani beban pada aplikasi Anda. Titik akhir online terkelola mendukung penskalaan otomatis melalui integrasi dengan fitur skala otomatis pemantauan Azure. Untuk mengonfigurasi penskalaan otomatis, lihat Cara menskalakan otomatis titik akhir online.

[Opsional] Pantau SLA menggunakan Azure Monitor

Untuk melihat metrik dan mengatur peringatan berdasarkan SLA Anda, selesaikan langkah-langkah yang dijelaskan di Memantau titik akhir online.

[Opsional] Integrasikan dengan Log Analytics

get-logs Perintah untuk CLI atau get_logs metode untuk SDK hanya menyediakan beberapa ratus baris log terakhir dari instans yang dipilih secara otomatis. Namun, Log Analytics menyediakan cara untuk menyimpan dan menganalisis log dalam waktu yang lama. Untuk informasi selengkapnya tentang menggunakan pengelogan, lihat Memantau titik akhir online.

Hapus titik akhir dan penyebaran

Jika tidak ingin menggunakan penyebaran, Anda harus menghapusnya dengan menjalankan perintah berikut (ini akan menghapus titik akhir dan semua penyebaran yang mendasarinya):

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