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