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 seInvoke-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_GROUP
LOCATION
, 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
- Zjistěte, jak nasadit model pomocí Azure CLI.
- Zjistěte, jak nasadit model pomocí studia.
- Informace o řešení potíží s nasazením a vyhodnocováním online koncových bodů
- Zjistěte, jak získat přístup k prostředkům Azure pomocí online koncového bodu a spravované identity.
- Zjistěte, jak monitorovat online koncové body.
- Seznamte se s bezpečným zaváděním pro online koncové body.
- Zobrazení nákladů na spravovaný online koncový bod služby Azure Machine Učení
- Seznam skladových položek spravovaných online koncových bodů
- Přečtěte si informace o limitech pro online koncové body.