Menyebarkan model dengan REST
Artikel ini menjelaskan cara menggunakan Azure Pembelajaran Mesin REST API untuk menyebarkan model dengan menggunakan titik akhir online. Titik akhir online memungkinkan Anda menyebarkan model tanpa harus membuat dan mengelola infrastruktur dan kluster Kubernetes yang mendasar. Prosedur berikut menunjukkan cara membuat titik akhir dan penyebaran online dan memvalidasi titik akhir dengan memanggilnya.
Ada banyak cara untuk membuat titik akhir online Azure Pembelajaran Mesin. Anda dapat menggunakan Azure CLI, studio Azure Pembelajaran Mesin, atau REST API. REST API menggunakan kata kerja HTTP standar untuk membuat, mengambil, memperbarui, dan menghapus sumber daya. Ini berfungsi dengan bahasa atau alat apa pun yang dapat membuat permintaan HTTP. Struktur langsung REST API menjadikannya pilihan yang baik di lingkungan pembuatan skrip dan untuk otomatisasi operasi pembelajaran mesin.
Prasyarat
Langganan Azure yang hak administratifnya Anda miliki. Jika Anda tidak memiliki langganan tersebut, coba langganan pribadi gratis atau berbayar.
Perwakilan layanan di ruang kerja Anda. Permintaan REST administratif menggunakan autentikasi perwakilan layanan.
Token autentikasi perwakilan layanan. Anda bisa mendapatkan token dengan mengikuti langkah-langkah dalam Mengambil token autentikasi perwakilan layanan.
Utilitas curl.
Semua penginstalan Microsoft Windows 10 dan Windows 11 telah menginstal curl secara default. 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
.Untuk platform UNIX, program curl tersedia dalam Subsistem Windows untuk Linux atau distribusi UNIX apa pun.
Menetapkan nama titik akhir
Nama titik akhir harus unik di tingkat wilayah Azure. Nama titik akhir seperti titik akhir saya harus menjadi satu-satunya titik akhir dengan nama tersebut dalam wilayah tertentu.
Buat nama titik akhir unik dengan memanggil RANDOM
utilitas, yang menambahkan angka acak sebagai akhiran ke nilai endpt-rest
:
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Membuat aset pembelajaran mesin
Untuk mempersiapkan penyebaran, siapkan aset Azure Pembelajaran Mesin Anda dan konfigurasikan pekerjaan Anda. Anda mendaftarkan aset yang diperlukan untuk penyebaran, termasuk model, kode, dan lingkungan.
Tip
REST API memanggil dalam prosedur berikut menggunakan $SUBSCRIPTION_ID
, , $RESOURCE_GROUP
$LOCATION
(wilayah), dan Azure Pembelajaran Mesin $WORKSPACE
sebagai tempat penampung untuk beberapa argumen. Saat Anda menerapkan kode untuk penyebaran Anda, ganti tempat penampung argumen dengan nilai penyebaran spesifik Anda.
REST administratif meminta token autentikasi perwakilan layanan. Saat Anda menerapkan kode untuk penyebaran Anda, ganti instans $TOKEN
tempat penampung dengan token perwakilan layanan untuk penyebaran Anda. 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 API_version
variabel untuk mengakomodasi versi mendatang:
API_VERSION="2022-05-01"
Mendapatkan detail akun penyimpanan
Untuk mendaftarkan model dan kode, Anda harus terlebih dahulu mengunggah item ini ke akun Azure Storage. Detail akun Azure Storage 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')
Mengunggah dan mendaftarkan kode
Sekarang setelah Anda 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 dapat menggunakan metode lain untuk menyelesaikan unggahan, seperti portal Azure atau Azure Storage Explorer.
Setelah mengunggah kode, Anda dapat menentukan kode dengan permintaan PUT dan merujuk ke penyimpanan data dengan datastoreId
pengidentifikasi:
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
Unggah file model dengan panggilan REST API serupa:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Setelah unggahan selesai, 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
perintah dan menambahkan dependensi conda dengan condaFile
perintah .
Kode berikut membaca konten lingkungan Conda (file YAML) 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 memerlukan URI penilaian dan token akses untuk memanggil titik akhir penyebaran.
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')
Selanjutnya, 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')
Terakhir, panggil titik akhir dengan menggunakan utilitas 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 penyebaran
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 Anda tidak akan menggunakan penyebaran lebih lanjut, hapus sumber daya.
Jalankan perintah berikut, yang 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