Udostępnij za pośrednictwem


Wdrażanie modeli za pomocą interfejsu REST

W tym artykule opisano sposób wdrażania modeli przy użyciu interfejsu API REST usługi Azure Machine Learning przy użyciu punktów końcowych online. Punkty końcowe online umożliwiają wdrażanie modelu bez konieczności tworzenia podstawowej infrastruktury i klastrów Kubernetes oraz zarządzania nimi. Poniższe procedury pokazują, jak utworzyć punkt końcowy online i wdrożenie oraz zweryfikować punkt końcowy, wywołując go.

Istnieje wiele sposobów tworzenia punktu końcowego online usługi Azure Machine Learning. Możesz użyć interfejsu wiersza polecenia platformy Azure, programu Azure Machine Learning Studio lub interfejsu API REST. Interfejs API REST używa standardowych czasowników HTTP do tworzenia, pobierania, aktualizowania i usuwania zasobów. Działa z dowolnym językiem lub narzędziem, które może wysyłać żądania HTTP. Prosta struktura interfejsu API REST sprawia, że dobrym wyborem w środowiskach skryptowych i automatyzacji operacji uczenia maszynowego.

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 Learning.

  • Jednostka usługi w obszarze roboczym. Administracyjne żądania REST używają uwierzytelniania jednostki usługi.

  • Token uwierzytelniania jednostki usługi. Token można uzyskać, wykonując kroki opisane w artykule Pobieranie tokenu uwierzytelniania jednostki usługi.

  • Narzędzie curl .

    • Wszystkie instalacje systemów Microsoft Windows 10 i Windows 11 mają domyślnie zainstalowany program curl. W programie PowerShell program curl jest aliasem invoke-WebRequest i curl -d "key=val" -X POST uri staje się .Invoke-WebRequest -Body "key=val" -Method POST -Uri uri

    • W przypadku platform UNIX program curl jest dostępny w Podsystem Windows dla systemu Linux lub dowolnej dystrybucji systemu UNIX.

Ustawianie nazwy punktu końcowego

Nazwy punktów końcowych muszą być unikatowe na poziomie regionu świadczenia usługi Azure. Nazwa punktu końcowego, takiego jak my-endpoint , musi być jedynym punktem końcowym o tej nazwie w określonym regionie.

Utwórz unikatową nazwę punktu końcowego, wywołując RANDOM narzędzie, które dodaje liczbę losową jako sufiks do wartości endpt-rest:

export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`

Tworzenie zasobów uczenia maszynowego

Aby przygotować się do wdrożenia, skonfiguruj zasoby usługi Azure Machine Learning i skonfiguruj zadanie. Zasoby wymagane do wdrożenia są rejestrowane, w tym model, kod i środowisko.

Napiwek

Wywołania interfejsu API REST w poniższych procedurach używają metod $SUBSCRIPTION_ID, , $RESOURCE_GROUP( $LOCATION region) i Azure Machine Learning $WORKSPACE jako symboli zastępczych dla niektórych argumentów. Podczas implementowania kodu wdrożenia zastąp symbole zastępcze argumentu określonymi wartościami wdrożenia.

Administracja REST żąda tokenu uwierzytelniania jednostki usługi. Podczas implementowania kodu wdrożenia zastąp wystąpienia symbolu $TOKEN zastępczego tokenem jednostki usługi dla wdrożenia. 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 zmienną tak API_version , aby uwzględniła przyszłe wersje:

API_VERSION="2022-05-01"

Pobieranie szczegółów konta magazynu

Aby zarejestrować model i kod, musisz najpierw przekazać te elementy na konto usługi Azure Storage. Szczegóły konta usługi Azure Storage 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

Do ukończenia przekazywania można użyć innych metod, 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 przy użyciu identyfikatora 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

Przekaż pliki modelu za pomocą podobnego wywołania interfejsu API REST:

az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model

Po zakończeniu przekazywania 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 docker pomocą polecenia i dodać zależności conda za condaFile pomocą polecenia .

Poniższy kod odczytuje zawartość środowiska Conda (pliku YAML) do 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\": \"default\"
    },
    \"properties\": {
        \"endpointComputeType\": \"Managed\",
        \"instanceType\": \"Standard_DS3_v2\",
        \"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 oceniania danych za pomocą modelu

Aby wywołać punkt końcowy wdrożenia, potrzebny jest identyfikator URI oceniania i token 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')

Następnie uzyskaj 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')

Na koniec 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 wdrażania

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 zamierzasz dalej korzystać z wdrożenia, usuń zasoby.

Uruchom następujące polecenie, które usuwa punkt końcowy i wszystkie podstawowe wdrożenia:

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