Distribuera modeller med REST
Lär dig hur du använder REST-API:et för Azure Machine Learning för att distribuera modeller.
REST-API:et använder HTTP-standardverb för att skapa, hämta, uppdatera och ta bort resurser. REST-API:et fungerar med valfritt språk eller verktyg som kan göra HTTP-begäranden. REST:s enkla struktur gör det till ett bra val i skriptmiljöer och för MLOps-automatisering.
I den här artikeln får du lära dig hur du använder de nya REST-API:erna för att:
- Skapa maskininlärningstillgångar
- Skapa ett grundläggande utbildningsjobb
- Skapa ett justeringsjobb för hyperparametrar
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.
- En Azure Machine Learning-arbetsyta.
- 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. Följ stegen i Hämta en autentiseringstoken för tjänstens huvudnamn för att hämta den här token.
- Curl-verktyget. Curl-programmet är tillgängligt i Windows-undersystem för Linux eller någon UNIX-distribution. 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
.
Ange slutpunktsnamn
Kommentar
Slutpunktsnamn måste vara unika på Azure-regionnivå. Det kan till exempel bara finnas en slutpunkt med namnet my-endpoint i westus2.
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Azure Machine Learning-slutpunkter online
Med onlineslutpunkter kan du distribuera din modell utan att behöva skapa och hantera den underliggande infrastrukturen samt Kubernetes-kluster. I den här artikeln skapar du en onlineslutpunkt och distribution och verifierar den genom att anropa den. Men först måste du registrera de tillgångar som behövs för distribution, inklusive modell, kod och miljö.
Det finns många sätt att skapa en Azure Machine Learning-slutpunkt online, inklusive Azure CLI och visuellt med studion. Följande exempel är en onlineslutpunkt med REST-API:et.
Skapa maskininlärningstillgångar
Konfigurera först dina Azure Machine Learning-tillgångar för att konfigurera ditt jobb.
I följande REST API-anrop använder SUBSCRIPTION_ID
vi , RESOURCE_GROUP
, LOCATION
och WORKSPACE
som platshållare. Ersätt platshållarna med dina egna värden.
Administrativ REST begär en autentiseringstoken för tjänstens huvudnamn. Ersätt TOKEN
med ditt eget värde. 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 API-versionen som en variabel för framtida versioner:
API_VERSION="2022-05-01"
Hämta information om lagringskonto
För att registrera modellen och koden måste de först laddas upp till ett lagringskonto. Information om lagringskontot finns i datalagret. I det här exemplet får du standarddatalager och Azure Storage-konto 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 verktyget jq för att parsa JSON-resultatet och hämta de värden som krävs. Du kan också använda Azure-portalen 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 datalagringen 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 också använda andra metoder för att ladda upp, till exempel Azure-portalen 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 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
Ungefär som med koden laddar du upp modellfilerna:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Registrera nu 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 med Docker
och lägga till conda-beroenden med condaFile
.
I följande kodfragment har innehållet i en Conda-miljö (YAML-fil) lästs in 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 din modell
Vi behöver bedömnings-URI och åtkomsttoken för att anropa slutpunkten. Få först poäng URI:
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 å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 nu slutpunkten med hjälp av curl:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Kontrollera loggarna
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 slutpunkten
Om du inte använder distributionen bör du ta bort den med kommandot nedan (den 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
Nästa steg
- Lär dig hur du distribuerar din modell med hjälp av Azure CLI.
- Lär dig hur du distribuerar din modell med studio.
- Lär dig att felsöka distribution och bedömning av onlineslutpunkter
- Lär dig hur du får åtkomst till Azure-resurser med en onlineslutpunkt och hanterad identitet
- Lär dig hur du övervakar onlineslutpunkter.
- Lär dig säker distribution för onlineslutpunkter.
- Visa kostnader för en Azure Machine Learning-hanterad onlineslutpunkt.
- SKU-lista över hanterade onlineslutpunkter.
- Läs mer om begränsningar för onlineslutpunkter.