Sdílet prostřednictvím


Nasazení modelů pomocí REST

Tento článek popisuje, jak pomocí rozhraní REST API služby Azure Machine Learning nasadit modely pomocí online koncových bodů. Online koncové body umožňují nasadit model bez nutnosti vytvářet a spravovat základní infrastrukturu a clustery Kubernetes. Následující postupy ukazují, jak vytvořit online koncový bod a nasazení a ověřit ho vyvoláním koncového bodu.

Existuje mnoho způsobů, jak vytvořit online koncový bod služby Azure Machine Learning. Můžete použít Azure CLI, studio Azure Machine Learning nebo rozhraní REST API. Rozhraní REST API používá standardní příkazy HTTP k vytváření, načítání, aktualizaci a odstraňování prostředků. Funguje s libovolným jazykem nebo nástrojem, který může provádět požadavky HTTP. Jednoduchá struktura rozhraní REST API je dobrou volbou ve skriptovacích prostředích a pro automatizaci operací strojového učení.

Požadavky

  • Předplatné Azure, pro které máte práva správce. Pokud takové předplatné nemáte, vyzkoušejte bezplatné nebo placené osobní předplatné.

  • Pracovní prostor Azure Machine Learning.

  • Instanční objekt ve vašem pracovním prostoru. Požadavky REST pro správu používají ověřování instančního objektu.

  • Ověřovací token instančního objektu. Token můžete získat pomocí kroků v části Načtení ověřovacího tokenu instančního objektu.

  • Nástroj curl .

    • Ve výchozím nastavení jsou nainstalované všechny instalace Microsoft Windows 10 a Windows 11 curl. V PowerShellu je curl aliasem pro Invoke-WebRequest a curl -d "key=val" -X POST uri stane se Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.

    • Pro platformy UNIX je program curl k dispozici v Subsystém Windows pro Linux nebo jakékoli distribuci systému UNIX.

Nastavení názvu koncového bodu

Názvy koncových bodů musí být jedinečné na úrovni oblasti Azure. Název koncového bodu, jako je my-koncový bod , musí být jediným koncovým bodem s tímto názvem v zadané oblasti.

Vytvořte jedinečný název koncového bodu voláním RANDOM nástroje, který přidá náhodné číslo jako příponu k hodnotě endpt-rest:

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

Vytváření prostředků strojového učení

Pokud se chcete připravit na nasazení, nastavte prostředky služby Azure Machine Learning a nakonfigurujte úlohu. Zaregistrujete prostředky potřebné pro nasazení, včetně modelu, kódu a prostředí.

Tip

Volání rozhraní REST API v následujících postupech používají $SUBSCRIPTION_IDjako zástupné symboly pro některé argumenty , , $RESOURCE_GROUP( $LOCATION oblast) a Azure Machine Learning $WORKSPACE . Při implementaci kódu pro nasazení nahraďte zástupné symboly argumentů konkrétními hodnotami nasazení.

Rest pro správu vyžaduje ověřovací token instančního objektu. Při implementaci kódu pro nasazení nahraďte instance zástupného symbolu tokenem instančního $TOKEN objektu pro vaše nasazení. Tento token můžete načíst pomocí následujícího příkazu:

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')

Poskytovatel služeb používá api-version argument k zajištění kompatibility. Argument api-version se liší od služby po službu.

Nastavte proměnnou API_version tak, aby vyhovovala budoucím verzím:

API_VERSION="2022-05-01"

Získání podrobností o účtu úložiště

Pokud chcete zaregistrovat model a kód, musíte tyto položky nejprve nahrát do účtu Azure Storage. Podrobnosti o účtu Azure Storage jsou k dispozici v úložišti dat. V tomto příkladu získáte výchozí úložiště dat a účet Azure Storage pro váš pracovní prostor. Zadejte dotaz na pracovní prostor pomocí požadavku GET, abyste získali soubor JSON s informacemi.

Pomocí nástroje jq můžete parsovat výsledek JSON a získat požadované hodnoty. Stejné informace najdete také na webu Azure Portal:

# 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')

Nahrání a registrace kódu

Teď, když máte úložiště dat, můžete nahrát bodovací skript. Pomocí rozhraní příkazového řádku služby Azure Storage nahrajte objekt blob do výchozího kontejneru:

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

Tip

K dokončení nahrávání můžete použít jiné metody, jako je Azure Portal nebo Průzkumník služby Azure Storage.

Po nahrání kódu můžete kód zadat pomocí požadavku PUT a odkazovat na úložiště dat pomocí identifikátoru 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\"
  }
}"

Nahrání a registrace modelu

Nahrajte soubory modelu s podobným voláním rozhraní REST API:

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

Po dokončení nahrávání zaregistrujte 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\"
    }
}"

Vytvoření prostředí

Nasazení musí běžet v prostředí, které má požadované závislosti. Vytvořte prostředí s požadavkem PUT. Použijte image Dockeru ze služby Microsoft Container Registry. Image Dockeru můžete nakonfigurovat pomocí docker příkazu a pomocí příkazu condaFile přidat závislosti conda.

Následující kód přečte obsah prostředí Conda (soubor YAML) do proměnné prostředí:

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\"
    }
}"

Vytvoření koncového bodu

Vytvořte online koncový bod:

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\"
}")

Vytvoření nasazení

Vytvořte nasazení v rámci koncového bodu:

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\"
    }
}")

Vyvolání koncového bodu pro určení skóre dat pomocí modelu

K vyvolání koncového bodu nasazení potřebujete identifikátor URI bodování a přístupový token.

Nejprve získejte identifikátor URI bodování:

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')

Dále získejte přístupový token koncového bodu:

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')

Nakonec pomocí nástroje curl vyvolejte koncový bod:

curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json

Kontrola protokolů nasazení

Zkontrolujte protokoly nasazení:

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 }"

Odstranění koncového bodu

Pokud nasazení nebudete dál používat, odstraňte prostředky.

Spusťte následující příkaz, který odstraní koncový bod a všechna základní nasazení:

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