Wdrażanie modeli za pomocą interfejsu REST
Dowiedz się, jak wdrażać modele przy użyciu interfejsu API REST usługi Azure Machine Edukacja.
Interfejs API REST używa standardowych czasowników HTTP do tworzenia, pobierania, aktualizowania i usuwania zasobów. Interfejs API REST współpracuje z dowolnym językiem lub narzędziem, które mogą wysyłać żądania HTTP. Prosta struktura REST sprawia, że dobrym wyborem w środowiskach skryptowych i automatyzacji metodyki MLOps.
Z tego artykułu dowiesz się, jak używać nowych interfejsów API REST do:
- Tworzenie zasobów uczenia maszynowego
- Tworzenie podstawowego zadania szkoleniowego
- Tworzenie zadania zamiatania dostrajania hiperparametrów
Wymagania wstępne
- Subskrypcja platformy Azure, dla której masz uprawnienia administracyjne. Jeśli nie masz takiej subskrypcji, wypróbuj bezpłatną lub płatną subskrypcję osobistą.
- Obszar roboczy usługi Azure Machine Edukacja.
- Jednostka usługi w obszarze roboczym. Administracja istracyjne żądania REST używają uwierzytelniania jednostki usługi.
- Token uwierzytelniania jednostki usługi. Wykonaj kroki opisane w temacie Pobieranie tokenu uwierzytelniania jednostki usługi, aby pobrać ten token.
- Narzędzie curl . Program curl jest dostępny w Podsystem Windows dla systemu Linux lub dowolnej dystrybucji system UNIX. W programie PowerShell program curl jest aliasem invoke-WebRequesti
curl -d "key=val" -X POST uri
staje się .Invoke-WebRequest -Body "key=val" -Method POST -Uri uri
Ustawianie nazwy punktu końcowego
Uwaga
Nazwy punktów końcowych muszą być unikatowe na poziomie regionu świadczenia usługi Azure. Na przykład może istnieć tylko jeden punkt końcowy o nazwie my-endpoint w westus2.
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Punkty końcowe usługi Azure Machine Edukacja online
Punkty końcowe online umożliwiają wdrażanie modelu bez konieczności tworzenia podstawowej infrastruktury oraz klastrów Kubernetes oraz zarządzania nią. W tym artykule utworzysz punkt końcowy i wdrożenie online oraz zweryfikujesz go, wywołując go. Najpierw musisz jednak zarejestrować zasoby potrzebne do wdrożenia, w tym model, kod i środowisko.
Istnieje wiele sposobów tworzenia punktu końcowego usługi Azure Machine Edukacja online, w tym interfejsu wiersza polecenia platformy Azure i wizualnie z programem Studio. W poniższym przykładzie punkt końcowy online z interfejsem API REST.
Tworzenie zasobów uczenia maszynowego
Najpierw skonfiguruj zasoby usługi Azure Machine Edukacja w celu skonfigurowania zadania.
W poniższych wywołaniach interfejsu API REST używamy SUBSCRIPTION_ID
symboli zastępczych , RESOURCE_GROUP
, LOCATION
i WORKSPACE
. Zastąp symbole zastępcze własnymi wartościami.
Administracja istrative REST żąda tokenu uwierzytelniania jednostki usługi. Zastąp TOKEN
ciąg własną wartością. Ten token można pobrać za pomocą następującego polecenia:
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')
Dostawca usług używa argumentu api-version
w celu zapewnienia zgodności. Argument api-version
różni się od usługi do usługi. Ustaw wersję interfejsu API jako zmienną, aby uwzględnić przyszłe wersje:
API_VERSION="2022-05-01"
Pobieranie szczegółów konta magazynu
Aby zarejestrować model i kod, najpierw należy przekazać go na konto magazynu. Szczegóły konta magazynu są dostępne w magazynie danych. W tym przykładzie uzyskasz domyślny magazyn danych i konto usługi Azure Storage dla obszaru roboczego. Wykonaj zapytanie dotyczące obszaru roboczego za pomocą żądania GET, aby uzyskać plik JSON z informacjami.
Możesz użyć narzędzia jq , aby przeanalizować wynik JSON i uzyskać wymagane wartości. Możesz również użyć witryny Azure Portal, aby znaleźć te same informacje:
# 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')
Przekazywanie i rejestrowanie kodu
Teraz, gdy masz magazyn danych, możesz przekazać skrypt oceniania. Użyj interfejsu wiersza polecenia usługi Azure Storage, aby przekazać obiekt blob do kontenera domyślnego:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
Napiwek
Możesz również użyć innych metod przekazywania, takich jak witryna Azure Portal lub Eksplorator usługi Azure Storage.
Po przekazaniu kodu możesz określić kod za pomocą żądania PUT i odwołać się do magazynu danych za pomocą polecenia 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\"
}
}"
Przekazywanie i rejestrowanie modelu
Podobnie jak w kodzie, przekaż pliki modelu:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Teraz zarejestruj 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\"
}
}"
Tworzenie środowiska
Wdrożenie musi zostać uruchomione w środowisku, które ma wymagane zależności. Utwórz środowisko za pomocą żądania PUT. Użyj obrazu platformy Docker z usługi Microsoft Container Registry. Obraz platformy Docker można skonfigurować za pomocą Docker
polecenia i dodać zależności conda za pomocą polecenia condaFile
.
W poniższym fragmencie kodu zawartość środowiska Conda (pliku YAML) została odczytany w zmiennej środowiskowej:
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\"
}
}"
Tworzenie punktu końcowego
Utwórz punkt końcowy online:
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\"
}")
Tworzenie wdrożenia
Utwórz wdrożenie w punkcie końcowym:
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\"
}
}")
Wywoływanie punktu końcowego w celu oceny danych za pomocą modelu
Do wywołania punktu końcowego potrzebujemy identyfikatora URI oceniania i tokenu dostępu. Najpierw uzyskaj identyfikator URI oceniania:
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')
Pobierz token dostępu do punktu końcowego:
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')
Teraz wywołaj punkt końcowy przy użyciu narzędzia curl:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Sprawdzanie dzienników
Sprawdź dzienniki wdrażania:
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 }"
Usuwanie punktu końcowego
Jeśli nie będziesz używać wdrożenia, usuń je za pomocą poniższego polecenia (spowoduje to usunięcie punktu końcowego i wszystkich wdrożeń bazowych):
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
Następne kroki
- Dowiedz się, jak wdrożyć model przy użyciu interfejsu wiersza polecenia platformy Azure.
- Dowiedz się, jak wdrożyć model przy użyciu programu Studio.
- Dowiedz się, jak rozwiązywać problemy z wdrażaniem punktów końcowych online i ocenianie
- Dowiedz się, jak uzyskać dostęp do zasobów platformy Azure przy użyciu punktu końcowego online i tożsamości zarządzanej
- Dowiedz się, jak monitorować punkty końcowe online.
- Poznaj bezpieczne wdrażanie punktów końcowych online.
- Wyświetlanie kosztów dla punktu końcowego online zarządzanego przez usługę Azure Machine Edukacja.
- Lista jednostek SKU zarządzanych punktów końcowych online.
- Dowiedz się więcej o limitach punktów końcowych online.