Bereitstellen von Modellen mit REST
Erfahren Sie, wie Sie die Azure Machine Learning-REST-API zum Bereitstellen von Modellen verwenden.
Von der REST-API werden HTTP-Standardverben genutzt, um Ressourcen zu erstellen, abzurufen, zu aktualisieren und zu löschen. Die REST-API funktioniert mit jeder Sprache oder jedem Tool, die bzw. das HTTP-Anforderungen ausführen kann. Durch die unkomplizierte Struktur von REST sind diese APIs eine gute Wahl in Skriptumgebungen und für die MLOps-Automatisierung.
In diesem Artikel wird beschrieben, wie Sie die neuen REST-APIs für folgende Zwecke verwenden:
- Erstellen von Machine Learning-Ressourcen
- Erstellen eines einfachen Trainingsauftrags
- Erstellen eines Sweep-Auftrags für die Hyperparameteroptimierung
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 Azure Machine Learning-Arbeitsbereich.
- Ein Dienstprinzipal in Ihrem Arbeitsbereich. Für administrative REST-Anforderungen wird die Dienstprinzipalauthentifizierung verwendet.
- Ein Token für die Dienstprinzipalauthentifizierung. Führen Sie die Schritte unter Abrufen eines Tokens für die Dienstprinzipalauthentifizierung aus, um dieses Token abzurufen.
- Das curl-Hilfsprogramm. Das curl-Programm ist im Windows-Subsystem für Linux oder jeder beliebigen UNIX-Distribution verfügbar. 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
.
Festlegen von Endpunktnamen
Hinweis
Endpunktnamen müssen auf Azure-Regionsebene eindeutig sein. Beispielsweise kann es nur einen Endpunkt namens „my-endpoint“ in „westus2“ geben.
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Onlineendpunkte für Azure Machine Learning
Onlineendpunkte gestatten Ihnen die Bereitstellung Ihres Modells, ohne dass Sie die zugrunde liegende Infrastruktur oder Kubernetes-Cluster erstellen und verwalten müssen. In diesem Artikel erstellen Sie einen Onlineendpunkt und eine Bereitstellung und überprüfen ihn, indem Sie ihn aufrufen. Zunächst müssen Sie jedoch die für die Bereitstellung erforderlichen Ressourcen registrieren, einschließlich Modell, Code und Umgebung.
Es gibt viele Möglichkeiten, einen Azure Machine Learning-Onlineendpunkt zu erstellen, einschließlich Azure CLI und visuell über Studio. Im folgenden Beispiel wird ein Onlineendpunkt mit der REST-API verwendet.
Erstellen von Machine Learning-Ressourcen
Richten Sie zunächst Ihre Azure Machine Learning-Ressourcen ein, um Ihren Auftrag zu konfigurieren.
In den folgenden REST-API-Aufrufen verwenden wir SUBSCRIPTION_ID
, RESOURCE_GROUP
, LOCATION
und WORKSPACE
als Platzhalter. Ersetzen Sie die Platzhalter durch Ihre eigenen Werte.
Für administrative REST-Anforderungen wird ein Token für die Dienstprinzipalauthentifizierung angefordert. Ersetzen Sie TOKEN
durch Ihren eigenen Wert. 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 API-Version zur Vorbereitung für zukünftige Versionen als Variable fest:
API_VERSION="2022-05-01"
Abrufen von Speicherkontodetails
Um das Modell und den Code zu registrieren, müssen sie zuerst in ein Speicherkonto hochgeladen werden. Die Details des Speicherkontos 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 analysieren 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 des Codes
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 Uploadmethoden 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 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 ähnlich wie den Code hoch:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Registrieren Sie jetzt 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 Docker
konfigurieren und Conda-Abhängigkeiten mit condaFile
hinzufügen.
Im folgenden Codeausschnitt wurde der Inhalt einer Conda-Umgebung (YAML-Datei) in eine Umgebungsvariable gelesen:
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 Ihrem Modell
Wir benötigen den Bewertungs-URI und das Zugriffstoken, um den Endpunkt 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 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 jetzt den Endpunkt mit curl 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 der Protokolle
Ü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 des Endpunkts
Wenn Sie die Bereitstellung nicht verwenden, sollten Sie sie mit dem folgenden Befehl löschen (der Endpunkt und alle zugrunde liegenden Bereitstellungen werden gelöscht):
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ächste Schritte
- Erfahren Sie, wie Sie Ihr Modell mithilfe der Azure-Befehlszeilenschnittstelle bereitstellen.
- Erfahren Sie, wie Sie Ihr Modell über das Studio bereitstellen.
- Erfahren Sie mehr über die Problembehandlung für die Bereitstellung und Bewertung von Onlineendpunkten.
- Erfahren Sie, wie Sie mit einem Onlineendpunkt und einer verwalteten Identität auf Azure-Ressourcen zugreifen
- Erfahren Sie, wie Sie Onlineendpunkte überwachen.
- Erhalten Sie Informationen zu Sicherer Rollout für Onlineendpunkte.
- Anzeigen der Kosten für einen verwalteten Azure Machine Learning-Onlineendpunkt
- SKU-Liste für verwaltete Onlineendpunkte
- Erfahren Sie mehr über Grenzwerte für Online-Endpunkte.