Modellen implementeren met REST
In dit artikel wordt beschreven hoe u de Azure Machine Learning REST API gebruikt om modellen te implementeren met behulp van online-eindpunten. Met online-eindpunten kunt u uw model implementeren zonder dat u de onderliggende infrastructuur en Kubernetes-clusters hoeft te maken en beheren. De volgende procedures laten zien hoe u een online-eindpunt en -implementatie maakt en het eindpunt valideert door het aan te roepen.
Er zijn veel manieren om een online-eindpunt voor Azure Machine Learning te maken. U kunt de Azure CLI, de Azure Machine Learning-studio of de REST API gebruiken. De REST API maakt gebruik van standaard HTTP-woorden om resources te maken, op te halen, bij te werken en te verwijderen. Het werkt met elke taal of elk hulpprogramma dat HTTP-aanvragen kan indienen. De eenvoudige structuur van de REST API maakt het een goede keuze in scriptomgevingen en voor automatisering van machine learning-bewerkingen.
Vereisten
Een Azure-abonnement waarvoor u beheerdersrechten hebt. Als u geen dergelijk abonnement hebt, kunt u het gratis of betaalde persoonlijke abonnement proberen.
Een service-principal in uw werkruimte. Beheer-REST-aanvragen maken gebruik van verificatie van de service-principal.
Een verificatietoken voor de service-principal. U kunt het token ophalen door de stappen in een verificatietoken voor een service-principal op te halen.
Het krulhulpprogramma .
Voor alle installaties van Microsoft Windows 10 en Windows 11 is curl standaard geïnstalleerd. In PowerShell is curl een alias voor Invoke-WebRequest en
curl -d "key=val" -X POST uri
wordt .Invoke-WebRequest -Body "key=val" -Method POST -Uri uri
Voor UNIX-platforms is het curl-programma beschikbaar in de Windows-subsysteem voor Linux of een UNIX-distributie.
Eindpuntnaam instellen
Eindpuntnamen moeten uniek zijn op het niveau van de Azure-regio. Een eindpuntnaam, zoals mijn eindpunt , moet het enige eindpunt zijn met die naam binnen een opgegeven regio.
Maak een unieke eindpuntnaam door het RANDOM
hulpprogramma aan te roepen, waarmee een willekeurig getal als achtervoegsel wordt toegevoegd aan de waarde endpt-rest
:
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Machine Learning-assets maken
Als u de implementatie wilt voorbereiden, stelt u uw Azure Machine Learning-assets in en configureert u uw taak. U registreert de assets die nodig zijn voor implementatie, inclusief het model, de code en de omgeving.
Tip
De REST API-aanroepen in de volgende procedures gebruiken$SUBSCRIPTION_ID
, $RESOURCE_GROUP
$LOCATION
(regio) en Azure Machine Learning $WORKSPACE
als tijdelijke aanduidingen voor een aantal argumenten. Wanneer u de code voor uw implementatie implementeert, vervangt u de tijdelijke aanduidingen voor argumenten door uw specifieke implementatiewaarden.
Beheer-REST vraagt een verificatietoken voor de service-principal aan. Wanneer u de code voor uw implementatie implementeert, vervangt u exemplaren van de $TOKEN
tijdelijke aanduiding door het token van de service-principal voor uw implementatie. U kunt dit token ophalen met de volgende opdracht:
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')
De serviceprovider gebruikt het api-version
argument om compatibiliteit te garanderen. Het api-version
argument varieert van service tot service.
Stel de API_version
variabele in voor toekomstige versies:
API_VERSION="2022-05-01"
Details van opslagaccount ophalen
Als u het model en de code wilt registreren, moet u deze items eerst uploaden naar een Azure Storage-account. De details van het Azure Storage-account zijn beschikbaar in het gegevensarchief. In dit voorbeeld krijgt u het standaardgegevensarchief en het Azure Storage-account voor uw werkruimte. Voer een query uit op uw werkruimte met een GET-aanvraag om een JSON-bestand op te halen met de informatie.
U kunt het hulpprogramma jq gebruiken om het JSON-resultaat te parseren en de vereiste waarden op te halen. U kunt azure Portal ook gebruiken om dezelfde informatie te vinden:
# 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')
Code uploaden en registreren
Nu u het gegevensarchief hebt, kunt u het scorescript uploaden. Gebruik de Azure Storage CLI om een blob te uploaden naar uw standaardcontainer:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
Tip
U kunt andere methoden gebruiken om het uploaden te voltooien, zoals Azure Portal of Azure Storage Explorer.
Nadat u uw code hebt geüpload, kunt u uw code opgeven met een PUT-aanvraag en verwijzen naar het gegevensarchief met de datastoreId
id:
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\"
}
}"
Model uploaden en registreren
Upload de modelbestanden met een vergelijkbare REST API-aanroep:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Nadat het uploaden is voltooid, registreert u het 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\"
}
}"
Omgeving maken
De implementatie moet worden uitgevoerd in een omgeving met de vereiste afhankelijkheden. Maak de omgeving met een PUT-aanvraag. Gebruik een Docker-installatiekopieën uit Microsoft Container Registry. U kunt de Docker-installatiekopieën configureren met de docker
opdracht en conda-afhankelijkheden toevoegen met de condaFile
opdracht.
Met de volgende code wordt de inhoud van een YamL-bestand (Conda Environment) gelezen in een omgevingsvariabele:
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\"
}
}"
Eindpunt maken
Maak het online-eindpunt:
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\"
}")
Implementatie maken
Maak een implementatie onder het eindpunt:
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\"
}
}")
Eindpunt aanroepen om gegevens te scoren met model
U hebt de score-URI en het toegangstoken nodig om het implementatie-eindpunt aan te roepen.
Haal eerst de score-URI op:
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')
Haal vervolgens het eindpunttoegangstoken op:
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')
Roep ten slotte het eindpunt aan met behulp van het curl-hulpprogramma:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Implementatielogboeken controleren
Controleer de implementatielogboeken:
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 }"
Eindpunt verwijderen
Als u de implementatie niet verder gaat gebruiken, verwijdert u de resources.
Voer de volgende opdracht uit, waarmee het eindpunt en alle onderliggende implementaties worden verwijderd:
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