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_IDsymboli zastępczych , RESOURCE_GROUP, LOCATIONi 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