Bagikan melalui


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.

  • Ruang kerja Azure Machine Learning.

  • 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 menjadi Invoke-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