Distribuera modeller med REST
Den här artikeln beskriver hur du använder Azure Machine Learning REST API för att distribuera modeller med hjälp av onlineslutpunkter. Med onlineslutpunkter kan du distribuera din modell utan att behöva skapa och hantera den underliggande infrastrukturen och Kubernetes-kluster. Följande procedurer visar hur du skapar en onlineslutpunkt och distribution och validerar slutpunkten genom att anropa den.
Det finns många sätt att skapa en Azure Machine Learning-slutpunkt online. Du kan använda Azure CLI, Azure Machine Learning-studio eller REST-API:et. REST-API:et använder HTTP-standardverb för att skapa, hämta, uppdatera och ta bort resurser. Den fungerar med valfritt språk eller verktyg som kan göra HTTP-begäranden. Rest-API:ets enkla struktur gör det till ett bra val i skriptmiljöer och för automatisering av maskininlärningsåtgärder.
Förutsättningar
En Azure-prenumeration som du har administratörsbehörighet för. Om du inte har en sådan prenumeration kan du prova den kostnadsfria eller betalda personliga prenumerationen.
Ett huvudnamn för tjänsten på din arbetsyta. Administrativa REST-begäranden använder autentisering med tjänstens huvudnamn.
En autentiseringstoken för tjänstens huvudnamn. Du kan hämta token genom att följa stegen i Hämta en autentiseringstoken för tjänstens huvudnamn.
Curl-verktyget.
Alla installationer av Microsoft Windows 10 och Windows 11 har curl installerat som standard. I PowerShell är curl ett alias för Invoke-WebRequest och
curl -d "key=val" -X POST uri
blirInvoke-WebRequest -Body "key=val" -Method POST -Uri uri
.För UNIX-plattformar är curl-programmet tillgängligt i Windows-undersystem för Linux eller någon UNIX-distribution.
Ange slutpunktsnamn
Slutpunktsnamn måste vara unika på Azure-regionnivå. Ett slutpunktsnamn som my-endpoint måste vara den enda slutpunkten med det namnet inom en angiven region.
Skapa ett unikt slutpunktsnamn genom att anropa RANDOM
verktyget, vilket lägger till ett slumpmässigt tal som ett suffix till värdet endpt-rest
:
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Skapa maskininlärningstillgångar
Förbered för distributionen genom att konfigurera dina Azure Machine Learning-tillgångar och konfigurera ditt jobb. Du registrerar de tillgångar som krävs för distribution, inklusive modell, kod och miljö.
Dricks
REST API-anropen i följande procedurer använder $SUBSCRIPTION_ID
, $RESOURCE_GROUP
, $LOCATION
(region) och Azure Machine Learning $WORKSPACE
som platshållare för vissa argument. När du implementerar koden för distributionen ersätter du argumentplatshållarna med dina specifika distributionsvärden.
Administrativ REST begär en autentiseringstoken för tjänstens huvudnamn. När du implementerar koden för distributionen ersätter du instanser av $TOKEN
platshållaren med tjänstens huvudnamnstoken för distributionen. Du kan hämta den här token med följande kommando:
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')
Tjänstleverantören använder api-version
argumentet för att säkerställa kompatibilitet. Argumentet api-version
varierar från tjänst till tjänst.
Ange variabeln så att den API_version
passar framtida versioner:
API_VERSION="2022-05-01"
Hämta information om lagringskonto
Om du vill registrera modellen och koden måste du först ladda upp dessa objekt till ett Azure Storage-konto. Information om Azure Storage-kontot finns i datalagret. I det här exemplet får du standarddatalagret och Azure Storage-kontot för din arbetsyta. Fråga din arbetsyta med en GET-begäran för att hämta en JSON-fil med informationen.
Du kan använda jq-verktyget för att parsa JSON-resultatet och hämta de värden som krävs. Du kan också använda Azure Portal för att hitta samma information:
# 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')
Ladda upp och registrera kod
Nu när du har datalagret kan du ladda upp bedömningsskriptet. Använd Azure Storage CLI för att ladda upp en blob till din standardcontainer:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
Dricks
Du kan använda andra metoder för att slutföra uppladdningen, till exempel Azure Portal eller Azure Storage Explorer.
När du har laddat upp koden kan du ange koden med en PUT-begäran och referera till datalagret med identifieraren 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\"
}
}"
Ladda upp och registrera modell
Ladda upp modellfilerna med ett liknande REST API-anrop:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
När uppladdningen är klar registrerar du modellen:
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\"
}
}"
Skapa miljö
Distributionen måste köras i en miljö som har nödvändiga beroenden. Skapa miljön med en PUT-begäran. Använd en Docker-avbildning från Microsoft Container Registry. Du kan konfigurera Docker-avbildningen docker
med kommandot och lägga till conda-beroenden med condaFile
kommandot .
Följande kod läser innehållet i en Conda-miljö (YAML-fil) i en miljövariabel:
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\"
}
}"
Skapa slutpunkt
Skapa onlineslutpunkten:
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\"
}")
Skapa distribution
Skapa en distribution under slutpunkten:
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\"
}
}")
Anropa slutpunkten för att poängsätta data med modellen
Du behöver bedömnings-URI och åtkomsttoken för att anropa distributionsslutpunkten.
Hämta först bedömnings-URI: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')
Hämta sedan åtkomsttoken för slutpunkten:
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')
Anropa slutligen slutpunkten med hjälp av curl-verktyget:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Kontrollera distributionsloggar
Kontrollera distributionsloggarna:
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 }"
Ta bort slutpunkt
Om du inte ska använda distributionen ytterligare tar du bort resurserna.
Kör följande kommando, som tar bort slutpunkten och alla underliggande distributioner:
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