REST ile modelleri dağıtma
Bu makalede, çevrimiçi uç noktaları kullanarak modelleri dağıtmak için Azure Machine Learning REST API'sinin nasıl kullanılacağı açıklanmaktadır. Çevrimiçi uç noktalar, temel alınan altyapıyı ve Kubernetes kümelerini oluşturmak ve yönetmek zorunda kalmadan modelinizi dağıtmanıza olanak sağlar. Aşağıdaki yordamlarda çevrimiçi uç nokta oluşturma ve dağıtımın nasıl oluşturulacağı ve çağrılarak uç noktanın nasıl doğrulanacağı gösterilmektedir.
Azure Machine Learning çevrimiçi uç noktası oluşturmanın birçok yolu vardır. Azure CLI, Azure Machine Learning stüdyosu veya REST API'yi kullanabilirsiniz. REST API, kaynakları oluşturmak, almak, güncelleştirmek ve silmek için standart HTTP fiillerini kullanır. HTTP isteğinde bulunabilen herhangi bir dil veya araçla çalışır. REST API'nin basit yapısı, betik oluşturma ortamlarında ve makine öğrenmesi işlemleri otomasyonu için iyi bir seçimdir.
Önkoşullar
Yönetici haklarına sahip olduğunuz bir Azure aboneliği. Böyle bir aboneliğiniz yoksa ücretsiz veya ücretli kişisel aboneliği deneyin.
Çalışma alanınızdaki bir hizmet sorumlusu. Yönetim REST istekleri hizmet sorumlusu kimlik doğrulaması kullanır.
Hizmet sorumlusu kimlik doğrulama belirteci. Hizmet sorumlusu kimlik doğrulama belirtecini alma bölümünde yer alan adımları izleyerek belirteci alabilirsiniz.
Curl yardımcı programı.
Microsoft Windows 10 ve Windows 11'in tüm yüklemeleri varsayılan olarak curl yüklüdür. PowerShell'de curl, Invoke-WebRequest için bir diğer addır ve
curl -d "key=val" -X POST uri
olurInvoke-WebRequest -Body "key=val" -Method POST -Uri uri
.UNIX platformları için curl programı Linux için Windows Alt Sistemi veya herhangi bir UNIX dağıtımında kullanılabilir.
Uç nokta adını ayarlama
Uç nokta adları Azure bölge düzeyinde benzersiz olmalıdır. My-endpoint gibi bir uç nokta adı, belirtilen bölgede bu ada sahip tek uç nokta olmalıdır.
değerine endpt-rest
sonek olarak rastgele bir sayı ekleyen yardımcı programını çağırarak RANDOM
benzersiz bir uç nokta adı oluşturun:
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Makine öğrenmesi varlıkları oluşturma
Dağıtıma hazırlanmak için Azure Machine Learning varlıklarınızı ayarlayın ve işinizi yapılandırın. Model, kod ve ortam dahil olmak üzere dağıtım için gerekli varlıkları kaydedersiniz.
İpucu
Aşağıdaki yordamlardaki REST API çağrıları, bazı bağımsız değişkenler için yer tutucu olarak , $RESOURCE_GROUP
, $LOCATION
(bölge) ve Azure Machine Learning'i $WORKSPACE
kullanır$SUBSCRIPTION_ID
. Dağıtımınız için kodu uyguladığınızda, bağımsız değişken yer tutucularını belirli dağıtım değerlerinizle değiştirin.
Yönetim REST bir hizmet sorumlusu kimlik doğrulama belirteci istemektedir. Dağıtımınız için kodu uyguladığınızda, yer tutucu örneklerini $TOKEN
dağıtımınız için hizmet sorumlusu belirteci ile değiştirin. Bu belirteci aşağıdaki komutla alabilirsiniz:
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')
Hizmet sağlayıcısı, uyumluluğu sağlamak için bağımsız değişkenini api-version
kullanır. Bağımsız api-version
değişken hizmetten hizmete değişir.
Değişkenini API_version
gelecekteki sürümleri barındıracak şekilde ayarlayın:
API_VERSION="2022-05-01"
Depolama hesabı ayrıntılarını alma
Modeli ve kodu kaydetmek için önce bu öğeleri bir Azure Depolama hesabına yüklemeniz gerekir. Azure Depolama hesabının ayrıntıları veri deposunda bulunabilir. Bu örnekte, çalışma alanınız için varsayılan veri deponuzu ve Azure Depolama hesabını alırsınız. Bilgileri içeren bir JSON dosyası almak için çalışma alanınızı GET isteğiyle sorgular.
JSON sonucunu ayrıştırmak ve gerekli değerleri almak için jq aracını kullanabilirsiniz. Aynı bilgileri bulmak için Azure portalını da kullanabilirsiniz:
# 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')
Kodu karşıya yükleme ve kaydetme
Artık veri deponuz olduğuna göre puanlama betiğini karşıya yükleyebilirsiniz. Blobu varsayılan kapsayıcınıza yüklemek için Azure Depolama CLI'sini kullanın:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
İpucu
Karşıya yüklemeyi tamamlamak için Azure portalı veya Azure Depolama Gezgini gibi diğer yöntemleri kullanabilirsiniz.
Kodunuzu karşıya yükledikten sonra, kodunuzu put isteğiyle belirtebilir ve tanımlayıcıyla veri deposuna datastoreId
başvurabilirsiniz:
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\"
}
}"
Modeli karşıya yükleme ve kaydetme
Benzer bir REST API çağrısıyla model dosyalarını karşıya yükleyin:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Karşıya yükleme tamamlandıktan sonra modeli kaydedin:
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\"
}
}"
Ortam oluşturma
Dağıtımın gerekli bağımlılıklara sahip bir ortamda çalıştırılması gerekir. Bir PUT isteğiyle ortamı oluşturun. Microsoft Container Registry'den bir Docker görüntüsü kullanın. Docker görüntüsünü komutuyla docker
yapılandırabilir ve komutuyla condaFile
conda bağımlılıkları ekleyebilirsiniz.
Aşağıdaki kod, conda ortamının (YAML dosyası) içeriğini bir ortam değişkenine okur:
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\"
}
}"
Uç nokta oluşturma
Çevrimiçi uç noktayı oluşturun:
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\"
}")
Dağıtım oluşturma
Uç noktanın altında bir dağıtım oluşturun:
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\"
}
}")
Modelle veri puanını almak için uç noktayı çağırma
Dağıtım uç noktasını çağırmak için puanlama URI'sine ve erişim belirtecine ihtiyacınız vardır.
İlk olarak puanlama URI'sini alın:
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')
Ardından uç nokta erişim belirtecini alın:
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')
Son olarak curl yardımcı programını kullanarak uç noktayı çağırın:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Dağıtım günlüklerini denetleme
Dağıtım günlüklerini denetleyin:
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 }"
Uç noktayı silme
Dağıtımı daha fazla kullanmayacaksanız kaynakları silin.
Uç noktayı ve temel alınan tüm dağıtımları silen aşağıdaki komutu çalıştırın:
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