BERLAKU UNTUK:
Ekstensi ml Azure CLI v2 (saat ini)
Python SDK azure-ai-ml v2 (saat ini)
Dalam artikel ini, Anda belajar menyebarkan model Anda ke titik akhir online untuk digunakan dalam inferensi real time. Anda mulai dengan menyebarkan model di komputer lokal Anda untuk men-debug kesalahan apa pun. Kemudian, Anda menyebarkan dan menguji model di Azure, melihat log penyebaran, dan memantau perjanjian tingkat layanan (SLA). Pada akhir artikel ini, Anda 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 perbedaannya, lihat Titik akhir online terkelola vs. Titik akhir online Kubernetes.
Titik akhir online terkelola membantu menyebarkan model pembelajaran mesin 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 terkelola mengurus penyajian, penskalaan, pengamanan, dan pemantauan model Anda. Bantuan ini membebaskan Anda dari kerumitan dan biaya pengaturan serta pengelolaan infrastruktur dasar.
Contoh utama dalam artikel 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)
Azure CLI dan ml ekstensi untuk Azure CLI, telah diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Menginstal dan menyiapkan CLI (v2).
Shell Bash atau shell yang kompatibel, misalnya, shell pada sistem Linux atau Subsistem Windows untuk Linux. Contoh Azure CLI dalam artikel ini mengasumsikan bahwa Anda menggunakan jenis shell ini.
Ruang kerja Azure Machine Learning. Untuk instruksi membuat ruang kerja, lihat Menyiapkan.
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 Machine Learning, atau peran kustom harus mengizinkan Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Jika Anda menggunakan studio Azure Machine Learning untuk membuat dan mengelola titik akhir atau penyebaran online, Anda memerlukan izin Microsoft.Resources/deployments/write tambahan dari pemilik grup sumber daya. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Pembelajaran Mesin.
(Opsional) Untuk menerapkan secara lokal, Anda harus memasang Docker Engine di komputer lokal Anda. Kami sangat merekomendasikan opsi ini, yang memudahkan untuk men-debug masalah.
BERLAKU UNTUK:
Python SDK azure-ai-ml v2 (saat ini)
Ruang kerja Azure Machine Learning. Untuk langkah-langkah membuat ruang kerja, lihat Membuat ruang kerja.
Azure Machine Learning SDK untuk Python v2. Untuk menginstal SDK, gunakan perintah berikut:
pip install azure-ai-ml azure-identity
Untuk memperbarui penginstalan SDK yang ada ke versi terbaru, gunakan perintah berikut:
pip install --upgrade azure-ai-ml azure-identity
Untuk informasi lebih lanjut, lihat Azure Machine Learning Package client library for Python.
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 Machine Learning, atau peran kustom harus mengizinkan Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Pembelajaran Mesin.
(Opsional) Untuk menerapkan secara lokal, Anda harus memasang Docker Engine di komputer lokal Anda. Kami sangat merekomendasikan opsi ini, yang memudahkan untuk men-debug masalah.
Sebelum Anda mengikuti langkah-langkah dalam artikel ini, pastikan Anda memiliki prasyarat berikut:
Azure CLI dan ekstensi CLI untuk pembelajaran mesin digunakan dalam langkah-langkah ini, tetapi bukan fokus utama. Mereka digunakan lebih sebagai utilitas untuk meneruskan templat ke Azure dan memeriksa status penyebaran templat.
Azure CLI dan ml ekstensi untuk Azure CLI, telah diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Menginstal dan menyiapkan CLI (v2).
Shell Bash atau shell yang kompatibel, misalnya, shell pada sistem Linux atau Subsistem Windows untuk Linux. Contoh Azure CLI dalam artikel ini mengasumsikan bahwa Anda menggunakan jenis shell ini.
Ruang kerja Azure Machine Learning. Untuk instruksi membuat ruang kerja, lihat Menyiapkan.
- 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 Machine Learning, atau peran kustom harus mengizinkan
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Machine Learning.
Pastikan Anda memiliki cukup kuota komputer virtual (VM) yang dialokasikan untuk penyebaran. Azure Machine Learning mencadangkan 20% sumber daya komputasi milik Anda untuk proses peningkatan pada beberapa versi mesin virtual (VM). Misalnya, jika Anda meminta 10 instans dalam penyebaran, Anda harus memiliki kuota 12 untuk setiap jumlah inti untuk versi VM. Kegagalan untuk memperhitungkan sumber daya komputasi tambahan menghasilkan kesalahan. Beberapa versi VM dikecualikan dari reservasi kuota tambahan. Untuk informasi selengkapnya tentang alokasi kuota, lihat Alokasi kuota komputer virtual untuk penyebaran.
Atau, Anda dapat menggunakan kuota dari kumpulan kuota bersama Azure Machine Learning untuk waktu yang terbatas. Azure Pembelajaran Mesin menyediakan kumpulan kuota bersama tempat pengguna di berbagai wilayah dapat mengakses kuota untuk melakukan pengujian dalam waktu terbatas, tergantung pada ketersediaan.
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 kumpulan kuota bersamanya untuk waktu yang singkat sehingga Anda dapat melakukan pengujian. Untuk informasi selengkapnya tentang kumpulan kuota bersama, lihat Kuota bersama Azure Pembelajaran Mesin.
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 kloning repositori azureml-examples, lalu masuk ke direktori repositori azureml-examples/cli.
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli
Gunakan --depth 1 untuk mengkloning hanya commit terbaru ke repositori, yang dapat mengurangi waktu untuk menyelesaikan operasi.
Perintah dalam tutorial ini ada dalam file deploy-local-endpoint.sh dan deploy-managed-online-endpoint.sh di direktori cli . File konfigurasi YAML berada di subdirektori titik akhir/online/terkelola/sampel/ .
Catatan
File konfigurasi YAML untuk titik akhir online Kubernetes berada di subdirektori titik akhir/online/kubernetes/ .
Mengkloning repositori contoh
Untuk menjalankan contoh pelatihan, pertama-tama kloning repositori azureml-examples, lalu ubah menjadi direktori azureml-examples/sdk/python/endpoints/online/managed :
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
Gunakan --depth 1 untuk mengkloning hanya commit terbaru ke repositori, yang dapat mengurangi waktu untuk menyelesaikan operasi.
Informasi dalam artikel ini didasarkan pada notebook online-endpoints-simple-deployment.ipynb . Ini berisi konten yang sama dengan artikel ini, meskipun urutan kode sedikit berbeda.
Sambungkan ke ruang kerja Azure Machine Learning
Ruang kerja adalah sumber daya tingkat atas untuk Azure Pembelajaran Mesin. Ini menyediakan tempat terpusat untuk bekerja dengan semua artefak yang Anda buat saat Anda menggunakan Azure Machine Learning. Di bagian ini, Anda tersambung ke ruang kerja tempat Anda melakukan tugas penyebaran. Untuk mengikutinya, buka notebook online-endpoints-simple-deployment.ipynb Anda.
Impor pustaka yang diperlukan:
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration
)
from azure.identity import DefaultAzureCredential
Catatan
Jika Anda menggunakan titik akhir online Kubernetes, impor kelas KubernetesOnlineEndpoint dan KubernetesOnlineDeployment dari pustaka azure.ai.ml.entities.
Konfigurasikan detail ruang kerja dan dapatkan handel ke ruang kerja.
Untuk menyambungkan ke ruang kerja, Anda memerlukan parameter pengidentifikasi ini: langganan, grup sumber daya, dan nama ruang kerja. Anda menggunakan detail ini di MLClient dari azure.ai.ml untuk mendapatkan akses ke ruang kerja Azure Machine Learning yang diperlukan. Contoh ini menggunakan autentikasi Azure default.
# enter details of your Azure Machine Learning workspace
subscription_id = "<subscription ID>"
resource_group = "<resource group>"
workspace = "<workspace name>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
Jika Anda telah menginstal Git di komputer lokal, Anda dapat mengikuti instruksi untuk mengkloning repositori contoh. Jika tidak, ikuti instruksi untuk mengunduh file dari repositori contoh.
Mengkloning repositori contoh
Untuk mengikuti artikel ini, pertama-tama kloning repositori azureml-examples, lalu masuk ke direktori azureml-examples/cli/endpoints/online/model-1.
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
Gunakan --depth 1 untuk mengkloning hanya commit terbaru ke repositori, yang dapat mengurangi waktu untuk menyelesaikan operasi.
Mengunduh file dari repositori contoh
Jika Anda mengkloning repositori contoh, komputer lokal Anda sudah memiliki salinan file untuk contoh ini, dan Anda dapat melompat ke bagian berikutnya. Jika Anda tidak mengkloning repositori, unduh ke komputer lokal Anda.
- Buka repositori contoh (azureml-examples).
- Buka tombol <> Kode di halaman, lalu pada tab Lokal , pilih Unduh ZIP.
- Temukan folder /cli/endpoints/online/model-1/model dan file /cli/endpoints/online/model-1/onlinescoring/score.py.
Atur variabel lingkungan
Atur variabel lingkungan berikut sehingga Anda dapat menggunakannya dalam contoh dalam artikel ini. Ganti nilai dengan ID langganan Azure Anda, wilayah Azure tempat ruang kerja Anda berada, grup sumber daya yang berisi ruang kerja, dan nama ruang kerja:
export SUBSCRIPTION_ID="<subscription ID>"
export LOCATION="<your region>"
export RESOURCE_GROUP="<resource group>"
export WORKSPACE="<workspace name>"
Beberapa contoh templat mengharuskan Anda mengunggah file ke Azure Blob Storage untuk ruang kerja Anda. Langkah-langkah berikut mengkueri ruang kerja dan menyimpan informasi ini dalam variabel lingkungan yang digunakan dalam contoh:
Dapatkan token akses:
TOKEN=$(az account get-access-token --query accessToken -o tsv)
Atur versi REST API:
API_VERSION="2022-05-01"
Dapatkan informasi penyimpanan:
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
Mengkloning repositori contoh
Untuk mengikuti artikel ini, pertama-tama kloning repositori azureml-examples, lalu ubah menjadi direktori azureml-examples :
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
Gunakan --depth 1 untuk mengkloning hanya commit terbaru ke repositori, yang dapat mengurangi waktu untuk menyelesaikan operasi.
Tentukan titik akhir
Untuk menentukan titik akhir online, tentukan nama titik akhir dan mode autentikasi. Untuk informasi selengkapnya tentang titik akhir online terkelola, lihat Titik akhir online.
Mengatur nama titik akhir
Untuk mengatur nama titik akhir Anda, jalankan perintah berikut. Ganti <YOUR_ENDPOINT_NAME> dengan nama yang unik di wilayah Azure. Untuk informasi selengkapnya tentang aturan penamaan, lihat Batas titik akhir.
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
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 Titik akhir online Azure Machine Learning dan titik akhir batch.
| 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. Gunakan aad_token untuk autentikasi berbasis token Microsoft Entra (pratinjau). Untuk informasi selengkapnya tentang mengautentikasi, lihat Mengautentikasi klien untuk titik akhir online. |
Pertama-tama tentukan nama titik akhir online, lalu konfigurasikan titik akhir.
Ganti <YOUR_ENDPOINT_NAME> dengan nama yang unik di wilayah Azure, atau gunakan metode contoh untuk menentukan nama acak. Pastikan untuk menghapus metode yang tidak Anda gunakan. Untuk informasi selengkapnya tentang aturan penamaan, lihat Batas titik akhir.
# method 1: define an endpoint name
endpoint_name = "<YOUR_ENDPOINT_NAME>"
# method 2: example way to define a random name
import datetime
endpoint_name = "endpt-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name = endpoint_name,
description="this is a sample endpoint",
auth_mode="key"
)
Kode sebelumnya menggunakan key untuk autentikasi berbasis kunci. Untuk menggunakan autentikasi berbasis token Azure Pembelajaran Mesin, gunakan aml_token. Untuk menggunakan autentikasi berbasis token Microsoft Entra (pratinjau), gunakan aad_token. Untuk informasi selengkapnya tentang mengautentikasi, lihat Mengautentikasi klien untuk titik akhir online.
Saat Anda menyebarkan ke Azure dari studio, Anda membuat titik akhir dan penyebaran untuk ditambahkan ke dalamnya. Pada saat itu, Anda diminta untuk memberikan nama untuk titik akhir dan penyebaran.
Mengatur nama titik akhir
Untuk mengatur nama titik akhir Anda, jalankan perintah berikut untuk menghasilkan nama acak. Nama harus unik dalam wilayah Azure. Untuk informasi selengkapnya tentang aturan penamaan, lihat Batas titik akhir.
export ENDPOINT_NAME=endpoint-`echo $RANDOM`
Untuk menentukan titik akhir dan penyebaran, artikel ini menggunakan templat Azure Resource Manager (templat ARM) online-endpoint.json dan online-endpoint-deployment.json. Untuk menggunakan templat untuk menentukan titik akhir dan penyebaran online, lihat bagian Sebarkan ke Azure .
Menentukan penyebaran
Penyebaran adalah kumpulan sumber daya yang diperlukan untuk menghosting model yang melakukan inferensi aktual. Untuk contoh ini, Anda menyebarkan scikit-learn model yang melakukan regresi dan menggunakan skrip penilaian score.py untuk menjalankan model pada permintaan input tertentu.
Untuk mempelajari atribut utama penyebaran, lihat Penyebaran online.
Konfigurasi penyebaran Anda menggunakan lokasi model yang ingin Anda sebarkan.
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-ubuntu22.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
File blue-deployment.yml menentukan atribut penyebaran berikut:
-
model: Menentukan properti model sebaris dengan menggunakan path parameter (tempat mengunggah file). CLI secara otomatis mengunggah file model dan mendaftarkan model dengan nama yang dibuat secara otomatis.
-
environment: Menggunakan definisi sebaris yang menyertakan tempat untuk mengunggah file. CLI secara otomatis mengunggah file conda.yaml dan mendaftarkan lingkungan. Kemudian, untuk membangun lingkungan, penyebaran menggunakan image parameter untuk gambar dasar. Dalam contoh ini, itu adalah mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Dependensi conda_file diinstal di atas gambar dasar.
-
code_configuration: Mengunggah file lokal, seperti sumber Python untuk model penilaian, dari lingkungan pengembangan selama penyebaran.
Untuk informasi selengkapnya tentang skema YAML, lihat referensi YAML titik akhir online.
Catatan
Untuk menggunakan titik akhir Kubernetes alih-alih titik akhir online terkelola sebagai target komputasi:
- Buat dan lampirkan kluster AKS sebagai target komputasi ke ruang kerja Azure Machine Learning menggunakan Azure Machine Learning studio.
- Gunakan YAML titik akhir untuk menargetkan Kubernetes alih-alih YAML titik akhir terkelola. Anda perlu mengedit YAML untuk mengubah nilai
compute menjadi nama target komputasi terdaftar Anda. Anda dapat menggunakan deployment.yaml ini yang memiliki properti lain yang berlaku untuk penyebaran Kubernetes.
Semua perintah yang digunakan dalam artikel ini untuk titik akhir online terkelola juga berlaku untuk titik akhir Kubernetes, kecuali untuk kemampuan berikut yang tidak berlaku untuk titik akhir Kube:
Gunakan kode berikut untuk mengonfigurasi penyebaran:
model = Model(path="../model-1/model/sklearn_regression_model.pkl")
env = Environment(
conda_file="../model-1/environment/conda.yaml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
-
Model: Menentukan properti model sebaris dengan menggunakan path parameter (tempat mengunggah file). SDK secara otomatis mengunggah file model dan mendaftarkan model dengan nama yang dibuat secara otomatis.
-
Environment: Menggunakan definisi sebaris yang menyertakan tempat untuk mengunggah file. SDK secara otomatis mengunggah file conda.yaml dan mendaftarkan lingkungan. Kemudian, untuk membangun lingkungan, penyebaran menggunakan image parameter untuk gambar dasar. Dalam contoh ini, itu adalah mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Dependensi conda_file diinstal di atas gambar dasar.
-
CodeConfiguration: Mengunggah file lokal, seperti sumber Python untuk model penilaian, dari lingkungan pengembangan selama penyebaran.
Untuk informasi selengkapnya tentang definisi penyebaran online, lihat Kelas OnlineDeployment.
Saat Anda melakukan proses penempatan ke Azure, Anda membuat titik akhir serta melakukan penempatan untuk menambahkannya ke dalamnya. Pada saat itu, Anda diminta untuk memberikan nama untuk titik akhir dan penyebaran.
Memahami skrip penilaian
Format skrip penilaian untuk titik akhir online terkelola adalah format yang sama yang digunakan dalam CLI versi sebelumnya dan di Python SDK.
Skrip penilaian yang ditentukan harus code_configuration.scoring_script memiliki init() fungsi dan run() fungsi.
Skrip penilaian harus memiliki init() fungsi dan run() fungsi.
Skrip penilaian harus memiliki init() fungsi dan run() fungsi.
Skrip penilaian harus memiliki init() fungsi dan run() fungsi. Artikel ini menggunakan file score.py.
Saat Anda menggunakan templat untuk penyebaran, Anda harus terlebih dahulu mengunggah file penilaian ke Blob Storage, lalu mendaftarkannya:
Kode berikut menggunakan perintah az storage blob upload-batch Azure CLI untuk mengunggah file penilaian:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s cli/endpoints/online/model-1/onlinescoring --account-name $AZURE_STORAGE_ACCOUNT
Kode berikut menggunakan templat untuk mendaftarkan kode:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/code-version.json \
--parameters \
workspaceName=$WORKSPACE \
codeAssetName="score-sklearn" \
codeUri="https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score"
Contoh ini menggunakan file score.py dari repositori yang Anda kloning atau unduh sebelumnya:
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 ditunjukkan dalam file score.py ini).
Fungsi run() ini dipanggil setiap kali titik akhir dipanggil. Sistem ini melakukan penilaian dan prediksi sesungguhnya. Dalam file score.py ini, run() fungsi mengekstrak data dari input JSON, memanggil metode model predict() scikit-learn, lalu mengembalikan hasil prediksi.
Menyebarkan dan men-debug secara lokal dengan menggunakan titik akhir lokal
Kami sangat menyarankan Agar Anda menguji jalankan titik akhir Anda secara lokal untuk memvalidasi dan men-debug kode dan konfigurasi Anda sebelum Anda menyebarkan ke Azure. Azure CLI dan Python SDK mendukung titik akhir dan penyebaran lokal, tetapi studio Azure Machine Learning 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.
Anda dapat menggunakan paket Python server HTTP inferensi Azure Machine Learning untuk men-debug skrip penilaian Anda secara lokal tanpa Docker Engine. Penelusuran debug dengan server inferensi membantu Anda mempersiapkan skrip penilaian sebelum menyebarkan ke titik akhir lokal, sehingga Anda dapat melakukan debug tanpa terpengaruh oleh konfigurasi kontainer saat penyebaran.
Untuk informasi selengkapnya tentang penelusuran kesalahan titik akhir online secara lokal sebelum Anda menyebarkan ke Azure, lihat Penelusuran kesalahan titik akhir online.
Menyebarkan model secara lokal
Pertama, buat titik akhir. Secara opsional, untuk titik akhir lokal, Anda dapat melewati langkah ini. Anda dapat membuat penyebaran secara langsung (langkah berikutnya), yang pada gilirannya 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
ml_client.online_endpoints.begin_create_or_update(endpoint, local=True)
Studio tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
Templat tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
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.
ml_client.online_deployments.begin_create_or_update(
deployment=blue_deployment, local=True
)
Bendera local=True mengarahkan SDK untuk menyebarkan titik akhir di lingkungan Docker.
Studio tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
Templat tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
Verifikasi bahwa penyebaran lokal berhasil
Periksa status penyebaran untuk melihat apakah model disebarkan tanpa kesalahan:
az ml online-endpoint show -n $ENDPOINT_NAME --local
Output harus serupa dengan JSON berikut. Parameternya provisioning_state adalah Succeeded.
{
"auth_mode": "key",
"location": "local",
"name": "docs-endpoint",
"properties": {},
"provisioning_state": "Succeeded",
"scoring_uri": "http://localhost:49158/score",
"tags": {},
"traffic": {}
}
ml_client.online_endpoints.get(name=endpoint_name, local=True)
Metode mengembalikan ManagedOnlineEndpoint entitas. Parameternya provisioning_state adalah Succeeded.
ManagedOnlineEndpoint({'public_network_access': None, 'provisioning_state': 'Succeeded', 'scoring_uri': 'http://localhost:49158/score', 'swagger_uri': None, 'name': 'endpt-10061534497697', 'description': 'this is a sample endpoint', 'tags': {}, 'properties': {}, 'id': None, 'Resource__source_path': None, 'base_path': '/path/to/your/working/directory', 'creation_context': None, 'serialize': <msrest.serialization.Serializer object at 0x7ffb781bccd0>, 'auth_mode': 'key', 'location': 'local', 'identity': None, 'traffic': {}, 'mirror_traffic': {}, 'kind': None})
Studio tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
Templat tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
Tabel berikut berisi peluang nilai untuk provisioning_state:
| Nilai |
Deskripsi |
Creating |
Sumber daya sedang dibuat. |
Updating |
Sumber daya sedang diperbarui. |
Deleting |
Sumber daya sedang dihapus. |
Succeeded |
Operasi buat atau perbarui berhasil. |
Failed |
Operasi buat, perbarui, atau hapus gagal. |
Panggil titik akhir lokal untuk menilai data dengan model Anda
Panggil titik akhir untuk menilai model dengan menggunakan invoke perintah 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.
Panggil titik akhir untuk menilai model dengan menggunakan invoke perintah dan meneruskan parameter kueri yang disimpan dalam file JSON.
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
request_file="../model-1/sample-request.json",
local=True,
)
Jika Anda ingin menggunakan klien REST (seperti curl), Anda harus memiliki URI penilaian. Untuk mendapatkan URI penilaian, jalankan kode berikut. Dalam data yang dikembalikan, temukan atribut scoring_uri.
endpoint = ml_client.online_endpoints.get(endpoint_name, local=True)
scoring_uri = endpoint.scoring_uri
Studio tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
Templat tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
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
Anda dapat melihat output ini dengan menggunakan get_logs metode :
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, local=True, lines=50
)
Studio tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
Templat tidak mendukung titik akhir lokal. Untuk langkah-langkah menguji titik akhir secara lokal, lihat tab Azure CLI atau Python.
Menyebarkan titik akhir online Anda ke Azure
Selanjutnya, sebarkan titik akhir online Anda ke Azure. Sebagai praktik terbaik untuk produksi, kami sarankan Anda mendaftarkan model dan lingkungan yang Anda gunakan dalam penyebaran Anda.
Mendaftarkan model dan lingkungan Anda
Kami menyarankan agar Anda mendaftarkan model dan lingkungan sebelum penyebaran ke Azure sehingga Anda dapat menentukan nama dan versi terdaftar mereka selama penyebaran. Setelah Anda mendaftarkan aset, Anda dapat menggunakannya kembali tanpa perlu mengunggahnya setiap kali membuat deployment. Praktik ini meningkatkan reproduksi dan keterlacakan.
Tidak seperti penyebaran ke Azure, penyebaran lokal tidak mendukung penggunaan model dan lingkungan terdaftar. Sebagai gantinya, penyebaran lokal memanfaatkan file model lokal dan lingkungan dengan file lokal saja.
Untuk penyebaran ke Azure, Anda dapat menggunakan aset lokal atau terdaftar (model dan lingkungan). Di bagian artikel ini, penyebaran ke Azure menggunakan aset terdaftar, tetapi Anda memiliki opsi untuk menggunakan aset lokal sebagai gantinya. Untuk contoh konfigurasi penyebaran yang mengunggah file lokal yang akan digunakan untuk penyebaran lokal, lihat Mengonfigurasi penyebaran.
Untuk mendaftarkan model dan lingkungan, 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 di folder titik akhir/online/terkelola/sampel , 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.
Buat definisi YAML untuk model. Beri nama file model.yml:
$schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
name: my-model
path: ../../model-1/model/
Daftarkan model:
az ml model create -n my-model -v 1 -f endpoints/online/managed/sample/model.yml
Buat definisi YAML untuk lingkungan. Beri nama file environment.yml:
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: my-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
conda_file: ../../model-1/environment/conda.yaml
Daftarkan lingkungan:
az ml environment create -n my-env -v 1 -f endpoints/online/managed/sample/environment.yml
Untuk informasi selengkapnya tentang cara mendaftarkan model Anda sebagai aset, lihat Mendaftarkan model dengan menggunakan Azure CLI atau Python SDK. Untuk informasi selengkapnya tentang membuat lingkungan, lihat Membuat lingkungan kustom.
Daftarkan model:
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
file_model = Model(
path="../model-1/model/",
type=AssetTypes.CUSTOM_MODEL,
name="my-model",
description="Model created from local file.",
)
ml_client.models.create_or_update(file_model)
Daftarkan lingkungan:
from azure.ai.ml.entities import Environment
env_docker_conda = Environment(
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="../model-1/environment/conda.yaml",
name="my-env",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)
Untuk mempelajari cara mendaftarkan model Anda sebagai aset sehingga Anda dapat menentukan nama dan versi terdaftarnya selama penyebaran, lihat Mendaftarkan model dengan menggunakan Azure CLI atau Python SDK.
Untuk informasi selengkapnya tentang membuat lingkungan, lihat Membuat lingkungan kustom.
Mendaftarkan model
Pendaftaran model adalah entitas logis di ruang kerja yang dapat berisi satu file model atau direktori beberapa file. Sebagai praktik terbaik untuk produksi, daftarkan model dan lingkungan. Sebelum Anda membuat titik akhir dan penyebaran di artikel ini, daftarkan folder model yang berisi model.
Untuk mendaftarkan model contoh, ikuti langkah-langkah berikut:
Pergi ke Azure Machine Learning Studio.
Di panel kiri, pilih halaman Model .
Pilih Daftar, lalu pilih Dari file lokal.
Pilih Jenis yang tidak ditentukan untuk jenis Model.
Pilih Telusuri, dan pilih Telusuri folder.
Pilih folder \azureml-examples\cli\endpoints\online\model-1\model dari salinan lokal repositori yang Anda kloning atau unduh sebelumnya. Saat diminta, pilih Unggah dan tunggu hingga unggahan selesai.
Pilih Selanjutnya.
Masukkan nama yang mudah diingat untuk model. Langkah-langkah dalam artikel ini mengasumsikan bahwa model diberi nama model-1.
Pilih Berikutnya, lalu pilih Daftar untuk menyelesaikan pendaftaran.
Untuk informasi selengkapnya tentang cara bekerja dengan model terdaftar, lihat Bekerja dengan model terdaftar.
Membuat dan mendaftarkan lingkungan
Di panel kiri, pilih halaman Lingkungan .
Pilih tab Lingkungan kustom , lalu pilih Buat.
Pada halaman Pengaturan , masukkan nama, seperti my-env untuk lingkungan.
Untuk Pilih sumber lingkungan, pilih Gunakan gambar Docker yang sudah ada dengan sumber conda yang opsional.
Pilih Berikutnya untuk masuk ke halaman Kustomisasi .
Salin konten file \azureml-examples\cli\endpoints\online\model-1\environment\conda.yaml dari repositori yang Anda kloning atau unduh sebelumnya.
Tempelkan konten ke dalam kotak teks.
Pilih Berikutnya hingga Anda masuk ke halaman Buat , lalu pilih Buat.
Untuk informasi selengkapnya tentang cara membuat lingkungan di studio, lihat Membuat lingkungan.
Untuk mendaftarkan model dengan menggunakan templat, Anda harus terlebih dahulu mengunggah file model ke Blob Storage. Contoh berikut menggunakan az storage blob upload-batch perintah untuk mengunggah file ke penyimpanan default untuk ruang kerja Anda:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s cli/endpoints/online/model-1/model --account-name $AZURE_STORAGE_ACCOUNT
Setelah Anda mengunggah file, gunakan templat untuk membuat pendaftaran model. Dalam contoh berikut, modelUri parameter berisi jalur ke model:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/model-version.json \
--parameters \
workspaceName=$WORKSPACE \
modelAssetName="sklearn" \
modelUri="azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model/sklearn_regression_model.pkl"
Bagian dari lingkungan adalah file conda yang menentukan dependensi model yang diperlukan untuk menghosting model. Contoh berikut menunjukkan cara membaca konten file conda ke dalam variabel lingkungan:
CONDA_FILE=$(cat cli/endpoints/online/model-1/environment/conda.yaml)
Contoh berikut menunjukkan cara menggunakan templat untuk mendaftarkan lingkungan. Konten file conda dari langkah sebelumnya diteruskan ke templat dengan menggunakan condaFile parameter :
ENV_VERSION=$RANDOM
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/environment-version.json \
--parameters \
workspaceName=$WORKSPACE \
environmentAssetName=sklearn-env \
environmentAssetVersion=$ENV_VERSION \
dockerImage=mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1 \
condaFile="$CONDA_FILE"
Penting
Saat Anda menentukan lingkungan kustom untuk penyebaran Anda, pastikan paket azureml-inference-server-http disertakan dalam file conda. Paket ini sangat penting agar server inferensi berfungsi dengan baik. Jika Anda tidak terbiasa dengan cara membuat lingkungan kustom Anda sendiri, gunakan salah satu lingkungan yang dikumpulkan seperti minimal-py-inference (untuk model kustom yang tidak menggunakan mlflow) atau mlflow-py-inference (untuk model yang menggunakan mlflow). Anda dapat menemukan lingkungan yang telah dikurasi ini di tab Lingkungan pada instans Anda dari Azure Machine Learning Studio.
Konfigurasi penyebaran Anda menggunakan model terdaftar yang ingin Anda sebarkan dan lingkungan terdaftar Anda.
Gunakan aset terdaftar (model dan lingkungan) dalam definisi penyebaran Anda. Cuplikan di bawah menunjukkan berkas endpoints/online/terkelola/sampel/blue-deployment-with-registered-assets.yml, dengan semua input yang diperlukan untuk konfigurasi penyebaran.
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model: azureml:my-model:1
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment: azureml:my-env:1
instance_type: Standard_DS3_v2
instance_count: 1
Untuk mengonfigurasi penyebaran, gunakan model dan lingkungan terdaftar:
model = "azureml:my-model:1"
env = "azureml:my-env:1"
blue_deployment_with_registered_assets = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
Saat menyebarkan dari studio, Anda membuat titik akhir dan penyebaran untuk ditambahkan ke dalamnya. Pada saat itu, Anda diminta untuk memasukkan nama untuk titik akhir dan penyebaran.
Menggunakan jenis dan gambar instans CPU dan GPU yang berbeda
Anda dapat menentukan jenis instans CPU atau GPU dan gambar dalam definisi penyebaran Anda untuk penyebaran lokal dan penyebaran ke Azure.
Definisi penyebaran Anda dalam file blue-deployment-with-registered-assets.yml menggunakan instans jenis tujuan umum Standard_DS3_v2 dan gambar Docker non-GPU mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Untuk komputasi GPU, pilih versi jenis komputasi GPU dan gambar Docker GPU.
Untuk jenis instans tujuan umum dan GPU yang didukung, lihat Daftar SKU titik akhir online terkelola. Untuk daftar gambar dasar CPU dan GPU Azure Machine Learning, lihat gambar dasar Azure Machine Learning.
Anda dapat menentukan jenis instans CPU atau GPU dan gambar dalam konfigurasi penyebaran Anda untuk penyebaran dan penyebaran lokal ke Azure.
Sebelumnya, Anda mengonfigurasi penyebaran yang 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 versi jenis komputasi GPU dan gambar Docker GPU.
Untuk jenis instans tujuan umum dan GPU yang didukung, lihat Daftar SKU titik akhir online terkelola. Untuk daftar gambar dasar CPU dan GPU Azure Machine Learning, lihat gambar dasar Azure Machine Learning.
Pendaftaran lingkungan sebelumnya menentukan gambar Docker non-GPU mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 dengan cara meneruskan nilai ke templat environment-version.json menggunakan parameter dockerImage. Untuk komputasi GPU, berikan nilai untuk gambar Docker GPU ke templat (gunakan dockerImage parameter) dan berikan versi jenis komputasi GPU ke online-endpoint-deployment.json templat (gunakan skuName parameter ).
Untuk jenis instans tujuan umum dan GPU yang didukung, lihat Daftar SKU titik akhir online terkelola. Untuk daftar gambar dasar CPU dan GPU Azure Machine Learning, lihat gambar dasar Azure Machine Learning.
Selanjutnya, sebarkan titik akhir online Anda ke Azure.
Sebarkan ke Azure
Buat titik akhir di cloud Azure:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Buat penyebaran bernama blue pada titik akhir:
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
Pembuatan penyebaran dapat memakan waktu hingga 15 menit, tergantung pada apakah lingkungan atau gambar yang mendasar sedang dibangun untuk pertama kalinya. Penyebaran berikutnya yang menggunakan lingkungan yang sama diproses lebih cepat.
Jika Anda lebih suka tidak memblokir konsol CLI, Anda dapat menambahkan bendera --no-wait ke perintah . Namun, opsi ini menghentikan tampilan interaktif status penyebaran.
Bendera --all-traffic dalam kode az ml online-deployment create yang digunakan untuk membuat penyebaran mengalokasikan 100% lalu lintas titik akhir ke penyebaran biru yang baru dibuat. Menggunakan flag ini berguna untuk tujuan pengembangan dan pengujian, tetapi untuk produksi, Anda mungkin ingin mengalihkan lalu lintas ke deployment baru melalui perintah eksplisit. Misalnya, gunakan az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".
Buat titik akhir:
Dengan menggunakan endpoint parameter yang Anda tentukan sebelumnya dan MLClient parameter yang Anda buat sebelumnya, Anda sekarang dapat membuat titik akhir di ruang kerja. Perintah ini memulai pembuatan titik akhir dan mengembalikan respons konfirmasi saat pembuatan titik akhir berlanjut.
ml_client.online_endpoints.begin_create_or_update(endpoint)
Buat penyebaran:
Dengan menggunakan blue_deployment_with_registered_assets parameter yang Anda tentukan sebelumnya dan MLClient parameter yang Anda buat sebelumnya, Anda sekarang dapat membuat penyebaran di ruang kerja. Perintah ini memulai pembuatan penyebaran dan mengembalikan respons konfirmasi saat pembuatan penyebaran berlanjut.
ml_client.online_deployments.begin_create_or_update(blue_deployment_with_registered_assets)
Jika Anda lebih suka tidak memblokir konsol Python, Anda dapat menambahkan bendera no_wait=True ke parameter. Namun, opsi ini menghentikan tampilan interaktif status penyebaran.
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint)
Membuat titik akhir dan penyebaran online terkelola
Gunakan studio untuk membuat titik akhir online terkelola secara langsung di browser Anda. Saat Anda membuat titik akhir online terkelola di studio, Anda harus menentukan penyebaran awal. Anda tidak dapat membuat titik akhir online terkelola yang kosong.
Salah satu cara untuk membuat titik akhir online terkelola di studio adalah dari halaman Model . Metode ini juga menyediakan cara mudah untuk menambahkan model ke penyebaran online terkelola yang ada. Untuk menyebarkan model bernama model-1 yang Anda daftarkan sebelumnya di bagian Daftarkan model dan lingkungan Anda:
Pergi ke Azure Machine Learning Studio.
Di panel kiri, pilih halaman Model .
Pilih model bernama model-1.
Pilih Sebarkan>titik akhir Real-time.
Tindakan ini membuka jendela tempat Anda dapat menentukan detail tentang titik akhir Anda.
Masukkan nama titik akhir yang unik di wilayah Azure. Untuk informasi selengkapnya tentang aturan penamaan, lihat Batas titik akhir.
Pertahankan pilihan default: Dikelola untuk jenis komputasi.
Pertahankan pilihan default: autentikasi berbasis kunci untuk jenis autentikasi. Untuk informasi selengkapnya tentang mengautentikasi, lihat Mengautentikasi klien untuk titik akhir online.
Pilih Berikutnya hingga Anda masuk ke halaman Penyebaran . Alihkan diagnostik Application Insights ke Diaktifkan sehingga Anda dapat melihat grafik aktivitas titik akhir Anda di studio nanti dan menganalisis metrik dan log dengan menggunakan Application Insights.
Pilih Berikutnya untuk masuk ke halaman Kode + lingkungan . Pilih opsi berikut:
-
Pilih skrip penilaian untuk inferensi: Telusuri dan pilih file \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py dari repositori yang Anda kloning atau unduh sebelumnya.
-
Pilih bagian lingkungan : Pilih Lingkungan kustom lalu pilih lingkungan my-env:1 yang Anda buat sebelumnya.
Pilih Berikutnya, dan terima pengaturan bawaan hingga Anda diminta untuk membuat penyebaran.
Tinjau pengaturan penyebaran Anda dan pilih Buat.
Atau, Anda dapat membuat titik akhir online terkelola dari halaman Titik akhir di studio.
Pergi ke Azure Machine Learning Studio.
Di panel kiri, pilih halaman Titik Akhir .
Pilih + Buat.
Tindakan ini membuka jendela bagi Anda untuk memilih model Anda dan menentukan detail tentang titik akhir dan penyebaran Anda. Masukkan pengaturan untuk titik akhir dan penyebaran Anda seperti yang dijelaskan sebelumnya, lalu pilih Buat untuk membuat penyebaran.
Gunakan templat untuk membuat titik akhir online:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/online-endpoint.json \
--parameters \
workspaceName=$WORKSPACE \
onlineEndpointName=$ENDPOINT_NAME \
identityType=SystemAssigned \
authMode=AMLToken \
location=$LOCATION
Sebarkan model ke titik akhir setelah titik akhir dibuat:
resourceScope="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices"
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/online-endpoint-deployment.json \
--parameters \
workspaceName=$WORKSPACE \
location=$LOCATION \
onlineEndpointName=$ENDPOINT_NAME \
onlineDeploymentName=blue \
codeId="$resourceScope/workspaces/$WORKSPACE/codes/score-sklearn/versions/1" \
scoringScript=score.py \
environmentId="$resourceScope/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION" \
model="$resourceScope/workspaces/$WORKSPACE/models/sklearn/versions/1" \
endpointComputeType=Managed \
skuName=Standard_F2s_v2 \
skuCapacity=1
Untuk men-debug kesalahan dalam penyebaran Anda, lihat Pemecahan masalah penyebaran titik akhir online.
Periksa status titik akhir online
show Gunakan perintah untuk menampilkan informasi di provisioning_state untuk titik akhir dan penyebaran:
az ml online-endpoint show -n $ENDPOINT_NAME
Cantumkan semua titik akhir di ruang kerja dalam format tabel dengan menggunakan list perintah :
az ml online-endpoint list --output table
Periksa status titik akhir untuk melihat apakah model disebarkan tanpa kesalahan:
ml_client.online_endpoints.get(name=endpoint_name)
Cantumkan semua titik akhir di ruang kerja dalam format tabel dengan menggunakan list metode :
for endpoint in ml_client.online_endpoints.list():
print(endpoint.name)
Metode mengembalikan daftar (iterator) ManagedOnlineEndpoint entitas.
Anda bisa mendapatkan informasi lebih lanjut dengan menentukan lebih banyak parameter. Misalnya, keluarkan daftar titik akhir seperti tabel:
print("Kind\tLocation\tName")
print("-------\t----------\t------------------------")
for endpoint in ml_client.online_endpoints.list():
print(f"{endpoint.kind}\t{endpoint.location}\t{endpoint.name}")
Melihat titik akhir online terkelola
Anda dapat melihat semua titik akhir online terkelola Anda di halaman Titik akhir . Buka halaman Detail titik akhir untuk menemukan informasi penting, seperti URI titik akhir, status, alat pengujian, monitor aktivitas, log penyebaran, dan kode konsumsi sampel.
Di panel kiri, pilih Titik Akhir untuk melihat daftar semua titik akhir di ruang kerja.
(Opsional) Buat filter pada Jenis komputasi untuk memperlihatkan hanya jenis komputasi terkelola .
Pilih nama titik akhir untuk melihat halaman Detail titik akhir.
Templat berguna untuk menyebarkan sumber daya, tetapi Anda tidak dapat menggunakannya untuk mencantumkan, menampilkan, atau memanggil sumber daya. Gunakan Azure CLI, Python SDK, atau studio untuk melakukan operasi ini. Kode berikut menggunakan Azure CLI.
show Gunakan perintah untuk menampilkan informasi dalam provisioning_state parameter untuk titik akhir dan penyebaran:
az ml online-endpoint show -n $ENDPOINT_NAME
Cantumkan semua titik akhir di ruang kerja dalam format tabel dengan menggunakan list perintah :
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.
Anda dapat melihat output log dengan menggunakan get_logs metode :
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50
)
Secara default, log ditarik dari kontainer server inferensi. Untuk melihat log dari kontainer penginisialisasi penyimpanan, tambahkan container_type="storage-initializer" opsi . Untuk informasi selengkapnya tentang log penyebaran, lihat Mendapatkan log kontainer.
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50, container_type="storage-initializer"
)
Untuk melihat output log, pilih tab Log dari halaman titik akhir. Jika Anda memiliki beberapa penyebaran di titik akhir Anda, gunakan daftar turun untuk memilih penyebaran dengan log yang ingin Anda lihat.
Secara default, log ditarik dari server inferensi. Untuk melihat log dari kontainer penginisialisasi penyimpanan, gunakan Azure CLI atau Python SDK (lihat setiap tab untuk detailnya). Log dari kontainer penginisialisasi penyimpanan memberikan informasi tentang apakah kode dan data model berhasil diunduh ke kontainer. Untuk informasi selengkapnya tentang log penyebaran, lihat Mendapatkan log kontainer.
Templat berguna untuk menyebarkan sumber daya, tetapi Anda tidak dapat menggunakannya untuk mencantumkan, menampilkan, atau memanggil sumber daya. Gunakan Azure CLI, Python SDK, atau studio untuk melakukan operasi ini. Kode berikut menggunakan Azure CLI.
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
invoke Gunakan perintah 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
Dapatkan kunci yang digunakan untuk mengautentikasi ke titik akhir:
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 tentang cara mengelola otorisasi ke ruang kerja, lihat Mengelola akses ke ruang kerja Azure Machine Learning.
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
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 Anda menggunakan show perintah dan get-credentials untuk mendapatkan kredensial autentikasi. Perhatikan juga bahwa Anda menggunakan --query bendera untuk hanya memfilter atribut yang diperlukan. Untuk mempelajari selengkapnya tentang --query bendera, lihat Kueri output perintah Azure CLI.
Untuk melihat log pemanggilan, jalankan get-logs lagi.
Dengan menggunakan parameter MLClient yang Anda buat sebelumnya, Anda mendapatkan pegangan ke titik akhir ini. Anda kemudian dapat memanggil titik akhir dengan menggunakan invoke perintah dengan parameter berikut:
-
endpoint_name: Nama titik akhir.
-
request_file: File berisi data permintaan.
-
deployment_name: Nama penyebaran tertentu yang akan diuji pada titik akhir.
Kirim permintaan sampel dengan menggunakan file JSON .
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
Gunakan tab Uji pada halaman detail titik akhir untuk menguji penyebaran online terkelola Anda. Masukkan sampel input dan lihat hasilnya.
Pilih tab Uji pada halaman detail titik akhir.
Gunakan menu tarik-turun untuk memilih penyebaran yang ingin Anda uji.
Masukkan input sampel.
Pilih Uji.
Templat berguna untuk menyebarkan sumber daya, tetapi Anda tidak dapat menggunakannya untuk mencantumkan, menampilkan, atau memanggil sumber daya. Gunakan Azure CLI, Python SDK, atau studio untuk melakukan operasi ini. Kode berikut menggunakan Azure CLI.
invoke Gunakan perintah atau klien REST pilihan Anda untuk memanggil titik akhir dan menilai beberapa data:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file cli/endpoints/online/model-1/sample-request.json
[Opsional] Perbarui penyebaran
Jika Anda ingin memperbarui kode, model, atau lingkungan, perbarui file YAML. Kemudian jalankan az ml online-endpoint update perintah .
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 dilakukan terlebih dahulu. Pembaruan lainnya diterapkan berikutnya. Ini adalah praktik yang baik untuk melakukan operasi ini secara terpisah di lingkungan produksi.
Untuk memahami cara kerja update:
Buka file online/model-1/onlinescoring/score.py.
Ubah baris terakhir dari fungsi init(): setelah logging.info("Init complete"), tambahkan logging.info("Updated successfully").
Simpan file.
Jalankan perintah ini:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
Memperbarui dengan menggunakan YAML adalah deklaratif. Artinya, perubahan dalam YAML tercermin dalam sumber daya Resource Manager yang mendasar (titik akhir dan penyebaran). Pendekatan deklaratif memudahkan GitOps: Semua perubahan pada titik akhir/penyebaran (bahkan instance_count) melalui YAML.
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. Pendekatan ini menyimpan semua konfigurasi yang ada tetapi hanya memperbarui parameter yang ditentukan.
Karena Anda memodifikasi init() fungsi, yang berjalan saat titik akhir dibuat atau diperbarui, pesan Updated successfully muncul 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.
Jika Anda ingin memperbarui kode, model, atau lingkungan, perbarui konfigurasi lalu jalankan metode MLClient dari online_deployments.begin_create_or_update untuk membuat atau memperbarui penyebaran.
Jika Anda memperbarui jumlah instans (untuk menskalakan penyebaran Anda) bersama dengan pengaturan model lain (seperti kode, model, atau lingkungan) dalam satu begin_create_or_update metode, operasi penskalaan dilakukan terlebih dahulu. Kemudian pembaruan lainnya diterapkan. Ini adalah praktik yang baik untuk melakukan operasi ini secara terpisah di lingkungan produksi.
Untuk memahami cara kerja begin_create_or_update:
Buka file online/model-1/onlinescoring/score.py.
Ubah baris terakhir dari fungsi init(): setelah logging.info("Init complete"), tambahkan logging.info("Updated successfully").
Simpan file.
Menjalankan metode :
ml_client.online_deployments.begin_create_or_update(blue_deployment_with_registered_assets)
Karena Anda memodifikasi init() fungsi, yang berjalan saat titik akhir dibuat atau diperbarui, pesan Updated successfully muncul di log. Ambil URL dengan menjalankan:
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50
)
Metode ini begin_create_or_update juga berfungsi dengan penyebaran lokal. Gunakan metode yang sama dengan local=True bendera .
Saat ini, Anda hanya dapat membuat pembaruan pada jumlah instans penyebaran. Gunakan instruksi berikut untuk menskalakan penyebaran individual ke atas atau ke bawah dengan menyesuaikan jumlah instans:
- Buka halaman Rincian titik akhir dan cari kartu untuk penyebaran yang ingin Anda perbarui.
- Pilih ikon edit (ikon pensil) di samping nama penyebaran.
- Perbarui jumlah instans yang terkait dengan penyebaran. Pilih antara Default atau Pemanfaatan Target untuk jenis skala Penyebaran.
- Jika Anda memilih Default, Anda juga dapat menentukan nilai numerik untuk jumlah Instans.
- Jika Anda memilih Pemanfaatan Target, Anda dapat menentukan nilai yang akan digunakan untuk parameter saat Anda menskalakan penyebaran secara otomatis.
- Pilih Perbarui untuk menyelesaikan pembaruan jumlah instans untuk penyebaran Anda.
Saat ini tidak ada opsi untuk memperbarui penyebaran dengan menggunakan templat ARM.
Catatan
Pembaruan untuk penyebaran di bagian ini adalah contoh pembaruan bergulir di tempat.
- Untuk titik akhir online terkelola, penyebaran diperbarui ke konfigurasi baru dengan 20% node secara bersamaan. Artinya, jika penyebaran memiliki 10 simpul, 2 simpul sekali waktu diperbarui.
- Untuk titik akhir online Kubernetes, sistem secara berulang membuat instans penyebaran baru dengan konfigurasi baru dan menghapus yang lama.
- Untuk penggunaan produksi, pertimbangkan penyebaran biru-hijau, yang menawarkan alternatif yang lebih aman untuk memperbarui layanan web.
Skala otomatis secara otomatis menjalankan jumlah sumber daya yang tepat untuk menangani beban pada aplikasi Anda. Titik akhir online terkelola mendukung penskalakan otomatis melalui integrasi dengan fitur skala otomatis Azure Monitor. Untuk mengonfigurasi autoscaling, lihat Titik akhir online skala otomatis.
[Opsional] Pantau SLA menggunakan Azure Monitor
Untuk melihat metrik dan mengatur pemberitahuan berdasarkan SLA Anda, ikuti langkah-langkah yang dijelaskan di Memantau titik akhir online.
[Opsional] Integrasikan dengan Log Analytics
get-logs Perintah untuk CLI atau metode get_logs untuk SDK hanya menyediakan beberapa ratus baris log terakhir dari instans yang otomatis terpilih. Namun, Log Analytics menyediakan cara untuk menyimpan dan menganalisis log dalam waktu yang lama. Untuk informasi selengkapnya tentang cara menggunakan pengelogan, lihat Menggunakan log.
Hapus titik akhir dan penyebaran
Gunakan perintah berikut untuk menghapus endpoint dan semua penyebaran terkaitnya.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Gunakan perintah berikut untuk menghapus endpoint dan semua penyebaran terkaitnya.
ml_client.online_endpoints.begin_delete(name=endpoint_name)
Jika Anda tidak akan menggunakan titik akhir dan penyebaran, hapus keduanya. Dengan menghapus titik akhir, Anda juga menghapus semua penyebaran yang mendasarnya.
- Pergi ke Azure Machine Learning Studio.
- Di panel kiri, pilih halaman Titik Akhir .
- Pilih titik akhir.
- Pilih Hapus.
Atau, Anda dapat menghapus titik akhir online terkelola secara langsung dengan memilih ikon Hapus di halaman detail titik akhir.
Gunakan perintah berikut untuk menghapus endpoint dan semua penyebaran terkaitnya.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Konten terkait