Delen via


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 Azure Machine Learning-werkruimte.

  • 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