Modellek üzembe helyezése REST használatával

Megtudhatja, hogyan helyezhet üzembe modelleket az Azure Machine Tanulás REST API használatával.

A REST API szabványos HTTP-parancsokat használ erőforrások létrehozásához, lekéréséhez, frissítéséhez és törléséhez. A REST API bármilyen olyan nyelvvel vagy eszközzel működik, amely HTTP-kéréseket tud küldeni. A REST egyszerű struktúrája jó választás a szkriptelési környezetekben és az MLOps automatizálásában.

Ebből a cikkből megtudhatja, hogyan használhatja az új REST API-kat a következőre:

  • Gépi tanulási eszközök létrehozása
  • Alapszintű betanítási feladat létrehozása
  • Hiperparaméter-finomhangolási takarítási feladat létrehozása

Előfeltételek

  • Egy Azure-előfizetés , amelyhez rendszergazdai jogosultságokkal rendelkezik. Ha nem rendelkezik ilyen előfizetéssel, próbálja ki az ingyenes vagy fizetős személyes előfizetést.
  • Azure Machine Tanulás munkaterület.
  • Egy szolgáltatásnév a munkaterületen. Rendszergazda a rendszerbiztonsági REST-kérelmek szolgáltatásnév-hitelesítést használnak.
  • Szolgáltatásnév hitelesítési jogkivonata. A jogkivonat lekéréséhez kövesse a Szolgáltatásnév-hitelesítési jogkivonat lekérése című témakör lépéseit.
  • A curl segédprogram. A curl program elérhető a Linuxos Windows-alrendszer vagy bármely UNIX-disztribúcióban. A PowerShellben a curl az Invoke-WebRequest aliasa, és curl -d "key=val" -X POST uri így leszInvoke-WebRequest -Body "key=val" -Method POST -Uri uri.

Végpont nevének beállítása

Megjegyzés:

A végpontneveknek egyedinek kell lenniük az Azure-régió szintjén. A westus2-ben például csak egy végpont lehet a my-endpoint névvel.

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

Azure Machine Tanulás online végpontok

Az online végpontok lehetővé teszik a modell üzembe helyezését anélkül, hogy létre kellene hoznia és kezelnie kellene a mögöttes infrastruktúrát, valamint a Kubernetes-fürtöket. Ebben a cikkben létrehoz egy online végpontot és üzembe helyezést, és a meghívásával érvényesíti azt. Először azonban regisztrálnia kell az üzembe helyezéshez szükséges eszközöket, beleértve a modellt, a kódot és a környezetet.

Az Azure Machine Tanulás online végpontok számos módon hozhatók létre, beleértve az Azure CLI-t és vizuálisan a studióval. Az alábbi példa egy online végpont a REST API-val.

Gépi tanulási eszközök létrehozása

Először állítsa be az Azure Machine-Tanulás-eszközöket a feladat konfigurálásához.

A következő REST API-hívásokban helyőrzőket használunkSUBSCRIPTION_IDLOCATIONRESOURCE_GROUPWORKSPACE. Helyettesítse a helyőrzőket a saját értékeivel.

Rendszergazda istrative REST szolgáltatásnév-hitelesítési jogkivonatot kér. Cserélje le TOKEN a saját értékére. Ezt a jogkivonatot a következő paranccsal kérdezheti le:

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

A szolgáltató az argumentum használatával biztosítja a api-version kompatibilitást. Az api-version argumentum szolgáltatásonként eltérő. Állítsa be az API-verziót változóként a jövőbeli verziókhoz:

API_VERSION="2022-05-01"

Tárfiók adatainak lekérése

A modell és a kód regisztrálásához először fel kell tölteni őket egy tárfiókba. A tárfiók részletei elérhetők az adattárban. Ebben a példában a munkaterület alapértelmezett adattárát és Azure Storage-fiókját kapja meg. Kérje le a munkaterületet egy GET kéréssel, amely egy JSON-fájlt kér le az adatokkal.

Az eszköz jq használatával elemezheti a JSON-eredményt, és lekérheti a szükséges értékeket. Az Azure Portallal is megtalálhatja ugyanazokat az információkat:

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

Kód feltöltése > regisztrálása

Most, hogy már rendelkezik az adattárkal, feltöltheti a pontozási szkriptet. Az Azure Storage CLI használatával feltölthet egy blobot az alapértelmezett tárolóba:

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

Tipp.

Más módszereket is használhat a feltöltéshez, például az Azure Portalt vagy az Azure Storage Explorert.

Miután feltöltötte a kódot, megadhatja a kódot EGY PUT kéréssel, és a következővel datastoreIdhivatkozhat az adattárra:

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

Modell feltöltése és regisztrálása

A kódhoz hasonlóan töltse fel a modellfájlokat:

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

Most regisztrálja a modellt:

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

Környezet létrehozása

Az üzembe helyezésnek olyan környezetben kell futnia, amely rendelkezik a szükséges függőségekkel. Hozza létre a környezetet EGY PUT-kéréssel. Docker-rendszerkép használata a Microsoft Container Registryből. Konfigurálhatja a Docker-rendszerképet a Docker conda-függőségekkel, és hozzáadhatja a következővel condaFile: .

A következő kódrészletben egy Conda-környezet (YAML-fájl) tartalma beolvasva egy környezeti változóba:

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

Végpont létrehozása

Hozza létre az online végpontot:

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

Üzemelő példány létrehozása

Üzembe helyezés létrehozása a végpont alatt:

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

A végpont meghívása adatok pontozásához a modellel

A végpont meghívásához szükségünk van a pontozó URI-ra és a hozzáférési jogkivonatra. Először szerezze be a pontozó uri-t:

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

A végpont hozzáférési jogkivonatának lekérése:

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

Most hívja meg a végpontot a curl használatával:

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

Ellenőrizze a naplókat

Ellenőrizze az üzembehelyezési naplókat:

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

A végpont törlése

Ha nem használja az üzemelő példányt, törölje az alábbi paranccsal (törli a végpontot és az összes mögöttes üzemelő példányt):

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

További lépések