Nasazení modelů pomocí REST

Naučte se používat rozhraní AZURE Machine Učení REST API k nasazení modelů.

Rozhraní REST API používá standardní příkazy HTTP k vytváření, načítání, aktualizaci a odstraňování prostředků. Rozhraní REST API funguje s libovolným jazykem nebo nástrojem, který může provádět požadavky HTTP. Jednoduchá struktura REST je dobrou volbou ve skriptovacím prostředí a pro automatizaci MLOps.

V tomto článku se dozvíte, jak používat nová rozhraní REST API k:

  • Vytváření prostředků strojového učení
  • Vytvoření základní trénovací úlohy
  • Vytvoření úlohy ladění hyperparametrů

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 Učení Azure Machine.
  • Instanční objekt ve vašem pracovním prostoru. Správa istrativní požadavky REST používají ověřování instančního objektu.
  • Ověřovací token instančního objektu. Tento token načtěte podle kroků v části Načtení ověřovacího tokenu instančního objektu.
  • Nástroj curl . Program curl je k dispozici v Subsystém Windows pro Linux nebo jakékoli distribuci systém UNIX. 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.

Nastavení názvu koncového bodu

Poznámka:

Názvy koncových bodů musí být jedinečné na úrovni oblasti Azure. Například může existovat pouze jeden koncový bod s názvem my-endpoint v westus2.

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

Online koncové body služby Azure Machine Učení

Online koncové body umožňují nasadit model bez nutnosti vytvářet a spravovat základní infrastrukturu i clustery Kubernetes. V tomto článku vytvoříte online koncový bod a nasazení a ověříte ho vyvoláním. Nejdřív ale budete muset zaregistrovat prostředky potřebné pro nasazení, včetně modelu, kódu a prostředí.

Existuje mnoho způsobů, jak vytvořit online koncový bod Azure Machine Učení, včetně Azure CLI, a vizuálně se sadou Studio. Následující příklad online koncového bodu s rozhraním REST API.

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

Nejprve nastavte prostředky služby Azure Machine Učení tak, aby konfigurovali vaši úlohu.

V následujících voláních rozhraní REST API používáme SUBSCRIPTION_ID, RESOURCE_GROUPLOCATION, a WORKSPACE jako zástupné symboly. Zástupné znaky nahraďte vlastními hodnotami.

Správa istrativní REST vyžaduje ověřovací token instančního objektu. Nahraďte TOKEN vlastní hodnotou. 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 verzi rozhraní API jako proměnnou 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 ho nejdřív nahrát do účtu úložiště. Podrobnosti o účtu úložiště 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 nahrání můžete použít i 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í 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

Podobně jako v kódu nahrajte soubory modelu:

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

Teď 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 a přidat závislosti conda s condaFile.

V následujícím fragmentu kódu se obsah prostředí Conda (soubor YAML) načetl 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\": \"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\"
    }
}")

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

K vyvolání koncového bodu potřebujeme 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')

Získání přístupového tokenu 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')

Teď pomocí 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ů

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í nepoužíváte, měli byste ho odstranit pomocí následujícího příkazu (odstraní koncový bod a všechna podkladová 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

Další kroky