Bereitstellen von Modellen mit REST
In diesem Artikel wird beschrieben, wie Sie die Azure Machine Learning-REST-API verwenden, um Modelle mithilfe von Onlineendpunkten bereitzustellen. Onlineendpunkte gestatten Ihnen die Bereitstellung Ihres Modells, ohne dass Sie die zugrunde liegende Infrastruktur oder Kubernetes-Cluster erstellen und verwalten müssen. Die folgenden Verfahren veranschaulichen, wie Sie einen Onlineendpunkt und eine Bereitstellung erstellen und den Endpunkt durch Aufrufen überprüfen.
Es gibt zahlreiche Möglichkeiten zum Erstellen eines Azure Machine Learning-Onlineendpunkts. Sie können die Azure CLI, Azure Machine Learning Studio oder die REST-API verwenden. Von der REST-API werden HTTP-Standardverben genutzt, um Ressourcen zu erstellen, abzurufen, zu aktualisieren und zu löschen. Sie funktioniert mit jeder Sprache oder jedem Tool, die bzw. das HTTP-Anforderungen ausführen kann. Durch die unkomplizierte Struktur der REST-API ist sie eine gute Wahl in Skriptumgebungen sowie für Machine Learning Operations-Automatisierung.
Voraussetzungen
Ein Azure-Abonnement, für das Sie über Administratorrechte verfügen. Testen Sie das kostenlose oder kostenpflichtige persönliche Abonnement, falls Sie nicht über ein Abonnement dieser Art verfügen.
Ein Dienstprinzipal in Ihrem Arbeitsbereich. Für administrative REST-Anforderungen wird die Dienstprinzipalauthentifizierung verwendet.
Ein Token für die Dienstprinzipalauthentifizierung. Sie können das Token abrufen, indem Sie die Schritte unter Abrufen eines Tokens für die Dienstprinzipalauthentifizierung ausführen.
Das curl-Hilfsprogramm.
Bei allen Installationen von Microsoft Windows 10 und Windows 11 ist curl standardmäßig installiert. In PowerShell ist curl ein Alias für Invoke-WebRequest, und
curl -d "key=val" -X POST uri
wird zuInvoke-WebRequest -Body "key=val" -Method POST -Uri uri
.Für UNIX-Plattformen ist das curl-Programm im Windows-Subsystem für Linux oder jeder beliebigen UNIX-Distribution verfügbar.
Festlegen von Endpunktnamen
Endpunktnamen müssen auf Azure-Regionsebene eindeutig sein. Ein Endpunktname wie my-endpoint muss der einzige Endpunkt mit diesem Namen innerhalb einer angegebenen Region sein.
Erstellen Sie einen eindeutigen Endpunktnamen, indem Sie das Hilfsprogramm RANDOM
aufrufen, das dem Wert endpt-rest
eine Zufallszahl als Suffix hinzufügt:
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Erstellen von Machine Learning-Ressourcen
Richten Sie zum Vorbereiten auf die Bereitstellung Ihre Azure Machine Learning-Ressourcen ein, und konfigurieren Sie Ihren Auftrag. Sie registrieren die für die Bereitstellung erforderlichen Ressourcen, einschließlich Modell, Code und Umgebung.
Tipp
Die REST-API-Aufrufe in den folgenden Verfahren verwenden $SUBSCRIPTION_ID
, $RESOURCE_GROUP
, $LOCATION
(Region) und Azure Machine Learning $WORKSPACE
als Platzhalter für einige Argumente. Wenn Sie den Code für Ihre Bereitstellung implementieren, ersetzen Sie die Argumentplatzhalter durch Ihre spezifischen Bereitstellungswerte.
Für administrative REST-Anforderungen wird ein Token für die Dienstprinzipalauthentifizierung angefordert. Wenn Sie den Code für Ihre Bereitstellung implementieren, ersetzen Sie Instanzen des $TOKEN
-Platzhalters durch das Dienstprinzipaltoken für Ihre Bereitstellung. Sie können dieses Token mit dem folgenden Befehl abrufen:
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')
Der Dienstanbieter verwendet das api-version
-Argument, um Kompatibilität zu gewährleisten. Das api-version
-Argument variiert von Dienst zu Dienst.
Legen Sie die Variable API_version
zur Vorbereitung auf zukünftige Versionen fest:
API_VERSION="2022-05-01"
Abrufen von Speicherkontodetails
Um das Modell und den Code zu registrieren, müssen Sie diese Elemente zunächst in ein Azure Storage-Konto hochladen. Die Details des Azure Storage-Kontos sind im Datenspeicher verfügbar. In diesem Beispiel rufen Sie den Standarddatenspeicher und das Azure Storage-Konto für Ihren Arbeitsbereich ab. Fragen Sie Ihren Arbeitsbereich mit einer GET-Anforderung ab, um eine JSON-Datei mit den Informationen abzurufen.
Sie können das Tool jq verwenden, um das JSON-Ergebnis zu parsen und die erforderlichen Werte zu ermitteln. Sie können diese Informationen auch über das Azure-Portal ermitteln:
# 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')
Hochladen und Registrieren von Code
Nachdem Sie über den Datenspeicher verfügen, können Sie das Bewertungsskript hochladen. Verwenden Sie die Azure Storage-CLI, um ein Blob in Ihren Standardcontainer hochzuladen:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
Tipp
Sie können auch andere Methoden für den Upload verwenden, z. B. das Azure-Portal oder Azure Storage-Explorer.
Nachdem Sie Ihren Code hochgeladen haben, können Sie ihn mit einer PUT-Anforderung angeben und mit dem Bezeichner datastoreId
auf den Datenspeicher verweisen:
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\"
}
}"
Hochladen und Registrieren des Modells
Laden Sie die Modelldateien mit einem ähnlichen REST-API-Aufruf hoch:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Registrieren Sie nach Abschluss des Uploads das Modell:
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\"
}
}"
Erstellen der Umgebung
Die Bereitstellung muss in einer Umgebung ausgeführt werden, die über die erforderlichen Abhängigkeiten verfügt. Erstellen Sie die Umgebung mit einer PUT-Anforderung. Verwenden Sie ein Docker-Image aus Microsoft Container Registry. Sie können das Docker-Image mit dem Befehl docker
konfigurieren und Conda-Abhängigkeiten mit dem Befehl condaFile
hinzufügen.
Der folgende Code liest den Inhalt einer Conda-Umgebung (YAML-Datei) in eine Umgebungsvariable:
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\"
}
}"
Endpunkt erstellen
Erstellen Sie den Onlineendpunkt:
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\"
}")
Bereitstellung erstellen
Erstellen Sie eine Bereitstellung unter dem Endpunkt:
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\"
}
}")
Aufrufen des Endpunkts zum Bewerten von Daten mit einem Modell
Sie benötigen den Bewertungs-URI und das Zugriffstoken, um den Bereitstellungsendpunkt aufzurufen.
Rufen Sie zunächst den Bewertungs-URI ab:
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')
Rufen Sie dann das Zugriffstoken des Endpunkts ab:
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')
Rufen Sie schließlich den Endpunkt mithilfe des curl-Hilfsprogramms auf:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Überprüfen von Bereitstellungsprotokollen
Überprüfen Sie die Bereitstellungsprotokolle:
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 }"
Löschen eines Endpunkts
Wenn Sie die Bereitstellung nicht weiter verwenden werden, löschen Sie die Ressourcen.
Führen Sie den folgenden Befehl aus, mit dem der Endpunkt und alle zugrunde liegenden Bereitstellungen gelöscht werden:
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