Modellen implementeren met REST
Meer informatie over het gebruik van de Azure Machine Learning REST API voor het implementeren van modellen.
De REST API maakt gebruik van standaard HTTP-woorden om resources te maken, op te halen, bij te werken en te verwijderen. De REST API werkt met elke taal of elk hulpprogramma waarmee HTTP-aanvragen kunnen worden ingediend. De eenvoudige structuur van REST maakt het een goede keuze in scriptomgevingen en voor MLOps-automatisering.
In dit artikel leert u hoe u de nieuwe REST API's gebruikt voor het volgende:
- Machine Learning-assets maken
- Een basistrainingstaak maken
- Een taak voor het afstemmen van hyperparameters maken
Vereisten
- Een Azure-abonnement waarvoor u beheerdersrechten hebt. Als u geen dergelijk abonnement hebt, kunt u het gratis of betaalde persoonlijke abonnement proberen.
- Een Azure Machine Learning-werkruimte.
- Een service-principal in uw werkruimte. Beheer istratieve REST-aanvragen maken gebruik van service-principalverificatie.
- Een verificatietoken voor de service-principal. Volg de stappen in Een verificatietoken voor de service-principal ophalen om dit token op te halen.
- Het krulhulpprogramma . Het curl-programma is beschikbaar in de Windows-subsysteem voor Linux of een UNIX-distributie. 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
Eindpuntnaam instellen
Notitie
Eindpuntnamen moeten uniek zijn op het niveau van de Azure-regio. Er kan bijvoorbeeld slechts één eindpunt zijn met de naam mijn eindpunt in westus2.
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Online-eindpunten voor Azure Machine Learning
Met online-eindpunten kunt u uw model implementeren zonder dat u de onderliggende infrastructuur en Kubernetes-clusters hoeft te maken en beheren. In dit artikel maakt u een online-eindpunt en -implementatie en valideert u het door het aan te roepen. Maar eerst moet u de assets registreren die nodig zijn voor implementatie, inclusief model, code en omgeving.
Er zijn veel manieren om een online-eindpunt voor Azure Machine Learning te maken, waaronder de Azure CLI, en visueel met de studio. In het volgende voorbeeld een online-eindpunt met de REST API.
Machine Learning-assets maken
Stel eerst uw Azure Machine Learning-assets in om uw taak te configureren.
In de volgende REST API-aanroepen gebruiken SUBSCRIPTION_ID
we, RESOURCE_GROUP
en LOCATION
WORKSPACE
als tijdelijke aanduidingen. Vervang de plaatsaanduidingen door uw eigen waarden.
Beheer istratieve REST vraagt een verificatietoken voor de service-principal aan. Vervang door TOKEN
uw eigen waarde. 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-versie in als een variabele voor toekomstige versies:
API_VERSION="2022-05-01"
Details van opslagaccount ophalen
Als u het model en de code wilt registreren, moeten ze eerst worden geüpload naar een opslagaccount. De details van het opslagaccount 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 ook andere methoden gebruiken om te uploaden, zoals Azure Portal of Azure Storage Explorer.
Zodra u uw code hebt geüpload, kunt u uw code opgeven met een PUT-aanvraag en verwijzen naar het gegevensarchief met 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\"
}
}"
Model uploaden en registreren
Upload de modelbestanden, vergelijkbaar met de code:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Registreer nu 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 Docker
en conda-afhankelijkheden toevoegen met condaFile
.
In het volgende codefragment is 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\"
}
}")
Het eindpunt aanroepen om gegevens te scoren met uw model
We hebben de score-URI en het toegangstoken nodig om het 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 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 nu het eindpunt aan met behulp van curl:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
De logboeken 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 }"
Het eindpunt verwijderen
Als u de implementatie niet gaat gebruiken, moet u deze verwijderen met de onderstaande opdracht (hiermee worden het eindpunt en alle onderliggende implementaties 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
Volgende stappen
- Meer informatie over het implementeren van uw model met behulp van de Azure CLI.
- Meer informatie over het implementeren van uw model met behulp van studio.
- Meer informatie over het oplossen van problemen met de implementatie en score van online-eindpunten
- Meer informatie over het openen van Azure-resources met een online-eindpunt en beheerde identiteit
- Meer informatie over het bewaken van online-eindpunten.
- Meer informatie over veilige implementatie voor online-eindpunten.
- Kosten weergeven voor een beheerd online-eindpunt van Azure Machine Learning.
- Lijst met beheerde online-eindpunten.
- Meer informatie over limieten voor online-eindpunten.