Menyebarkan model dengan REST
Pelajari cara menggunakan REST API Azure Machine Learning untuk menyebarkan model.
REST API menggunakan kata kerja HTTP standar untuk membuat, mengambil, memperbarui, dan menghapus sumber daya. REST API bekerja dengan bahasa atau alat apa pun yang dapat membuat permintaan HTTP. Struktur langsung REST sering menjadikannya pilihan yang baik dalam lingkungan pembuatan skrip dan untuk otomatisasi MLOp.
Dalam artikel ini, Anda akan mempelajari cara menggunakan REST API baru untuk:
- Membuat aset pembelajaran mesin
- Membuat pekerjaan pelatihan dasar
- Membuat pekerjaan pembersihan penyetelan hyperparameter
Prasyarat
- Langganan Azure yang hak administratifnya Anda miliki. Jika Anda tidak memiliki langganan tersebut, coba langganan pribadi gratis atau berbayar.
- Ruang kerja Azure Machine Learning.
- Perwakilan layanan di ruang kerja Anda. Permintaan REST administratif menggunakan autentikasi perwakilan layanan.
- Token autentikasi perwakilan layanan. Ikuti langkah-langkah dalam Mengambil token autentikasi perwakilan layanan untuk mengambil token ini.
- Utilitas curl. Program curl tersedia di Subsistem Windows untuk Linux atau distribusi UNIX apa pun. Di PowerShell, curl adalah alias untuk Invoke-WebRequest dan
curl -d "key=val" -X POST uri
menjadiInvoke-WebRequest -Body "key=val" -Method POST -Uri uri
.
Menetapkan nama titik akhir
Catatan
Nama titik akhir harus unik di tingkat wilayah Azure. Misalnya, hanya boleh ada satu titik akhir dengan nama titik akhir-saya di westus2.
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Titik akhir online Azure Machine Learning
Titik akhir online memungkinkan Anda untuk menyebarkan model Anda tanpa harus membuat dan mengelola infrastruktur yang mendasarinya serta kluster Kubernetes. Dalam artikel ini, Anda akan membuat titik akhir dan penyebaran online, dan memvalidasinya dengan memanggilnya. Tetapi pertama-tama, Anda harus mendaftarkan aset yang diperlukan untuk penyebaran, termasuk model, kode, dan lingkungan.
Ada banyak cara untuk membuat titik akhir online Azure Pembelajaran Mesin termasuk Azure CLI, dan secara visual dengan studio. Berikut contoh titik akhir online dengan REST API.
Membuat aset pembelajaran mesin
Pertama, siapkan aset Azure Machine Learning untuk mengonfigurasi pekerjaan Anda.
Dalam panggilan REST API berikut, kami menggunakan SUBSCRIPTION_ID
, RESOURCE_GROUP
, LOCATION
, dan WORKSPACE
sebagai tempat penampung. Ganti tempat penampung dengan nilai Anda sendiri.
REST administratif meminta token autentikasi perwakilan layanan. Ganti TOKEN
dengan nilai Anda sendiri. Anda dapat mengambil token ini dengan perintah berikut:
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN")
accessToken=$(echo $response | jq -r '.accessToken')
Penyedia layanan menggunakan argumen api-version
untuk memastikan kompatibilitas. Argumen api-version
bervariasi dari layanan ke layanan. Atur versi API sebagai variabel untuk mengakomodasi versi mendatang:
API_VERSION="2022-05-01"
Mendapatkan detail akun penyimpanan
Sebelum didaftarkan, model dan kode harus terlebih dahulu diunggah ke akun penyimpanan. Detail akun penyimpanan tersedia di penyimpanan data. Dalam contoh ini, Anda mendapatkan penyimpanan data default dan akun Azure Storage untuk ruang kerja Anda. Ajukan kueri ruang kerja Anda dengan permintaan GET untuk mendapatkan file JSON dengan informasi tersebut.
Anda dapat menggunakan alat jq untuk mengurai hasil JSON dan mendapatkan nilai yang diperlukan. Anda juga dapat menggunakan portal Azure untuk melihat informasi ini:
# 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')
Unggah & daftarkan kode
Setelah memiliki penyimpanan data, Anda dapat mengunggah skrip penilaian. Gunakan CLI Azure Storage untuk mengunggah blob ke dalam kontainer default Anda:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
Tip
Anda juga dapat menggunakan metode lain untuk mengunggah, seperti portal Azure atau Azure Storage Explorer.
Setelah mengunggah kode, Anda dapat menentukan kode dengan permintaan PUT dan melihat penyimpanan data dengan datastoreId
:
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/score-sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"codeUri\": \"https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score\"
}
}"
Mengunggah dan mendaftarkan model
Seperti halnya kode, Unggah file model:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Sekarang, daftarkan model:
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"modelUri\":\"azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model\"
}
}"
Membuat lingkungan
Penyebaran harus dijalankan di lingkungan yang memiliki dependensi yang diperlukan. Buat lingkungan dengan permintaan PUT. Gunakan gambar docker dari Microsoft Container Registry. Anda dapat mengonfigurasi gambar docker dengan Docker
dan menambahkan dependensi conda dengan condaFile
.
Dalam cuplikan berikut, konten lingkungan Conda (file YAML) telah dibaca ke dalam variabel lingkungan:
ENV_VERSION=$RANDOM
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\":{
\"condaFile\": \"$CONDA_FILE\",
\"image\": \"mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1\"
}
}"
Membuat titik akhir
Buat titik akhir online:
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" \
--data-raw "{
\"identity\": {
\"type\": \"systemAssigned\"
},
\"properties\": {
\"authMode\": \"AMLToken\"
},
\"location\": \"$LOCATION\"
}")
Membuat penyebaran
Buat penyebaran di bagian titik akhir:
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/deployments/blue?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" \
--data-raw "{
\"location\": \"$LOCATION\",
\"sku\": {
\"capacity\": 1,
\"name\": \"Standard_DS2_v2\"
},
\"properties\": {
\"endpointComputeType\": \"Managed\",
\"scaleSettings\": {
\"scaleType\": \"Default\"
},
\"model\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1\",
\"codeConfiguration\": {
\"codeId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/score-sklearn/versions/1\",
\"scoringScript\": \"score.py\"
},
\"environmentId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION\"
}
}")
Memanggil titik akhir untuk menilai data dengan model Anda
Kita memerlukan uri penilaian dan token akses untuk memanggil titik akhir. Pertama, dapatkan uri penilaian:
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN")
scoringUri=$(echo $response | jq -r '.properties.scoringUri')
Dapatkan token akses titik akhir:
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN")
accessToken=$(echo $response | jq -r '.accessToken')
Sekarang, panggil titik akhir menggunakan curl:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Memeriksa log
Periksa log penyebaran:
curl --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/deployments/blue/getLogs?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{ \"tail\": 100 }"
Menghapus titik akhir
Jika tidak ingin menggunakan penyebaran, Anda harus menghapusnya dengan perintah berikut (ini akan menghapus titik akhir dan semua penyebaran yang mendasarinya):
curl --location --request DELETE "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" || true
Langkah berikutnya
- Pelajari cara menyebarkan model Anda menggunakan Azure CLI.
- Pelajari cara menyebarkan model Anda menggunakan studio.
- Pelajari cara Memecahkan masalah penyebaran dan penilaian titik akhir online
- Pelajari cara Mengakses sumber daya Azure dengan titik akhir online dan identitas terkelola
- Pelajari cara memantau titik akhir online.
- Pelajari Peluncuran yang aman untuk titik akhir online.
- Melihat biaya untuk titik akhir online terkelola Azure Machine Learning.
- Daftar SKU titik akhir online terkelola.
- Pelajari tentang batasan untuk titik akhir online.