Azure-erőforrások elérése egy online végpontról felügyelt identitással

ÉRVÉNYES:Azure CLI ml-bővítmény v2 (aktuális)Python SDK azure-ai-ml v2 (aktuális)

Megtudhatja, hogyan érheti el az Azure-erőforrásokat a pontozószkriptből egy online végponttal és egy rendszer által hozzárendelt felügyelt identitással vagy egy felhasználó által hozzárendelt felügyelt identitással.

A felügyelt végpontok és a Kubernetes-végpontok egyaránt lehetővé teszik az Azure Machine Tanulás számára a számítási erőforrás kiépítésének és a gépi tanulási modell üzembe helyezésének terheinek kezelését. A modellnek általában hozzá kell férnie az Azure-erőforrásokhoz, például az Azure Container Registryhez vagy a blobtárolóhoz a következtetéshez; felügyelt identitással anélkül érheti el ezeket az erőforrásokat, hogy a kódban lévő hitelesítő adatokat kellene kezelnie. További információ a felügyelt identitásokról.

Ez az útmutató feltételezi, hogy nincs felügyelt identitása, tárfiókja vagy online végpontja. Ha már rendelkezik ezekkel az összetevőkkel, ugorjon a Hozzáférés engedélyezése a felügyelt identitáshoz szakaszra.

Előfeltételek

  • Az Azure Machine Tanulás használatához Azure-előfizetéssel kell rendelkeznie. Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot. Próbálja ki ma az Azure Machine ingyenes vagy fizetős verzióját Tanulás.

  • Telepítse és konfigurálja az Azure CLI és az ML (v2) bővítményt. További információ: Telepítés, beállítás és a 2.0 parancssori felület használata.

  • Egy Azure-erőforráscsoportnak, amelyben Önnek (vagy a használt szolgáltatásnévnek) felhasználói hozzáféréssel kell rendelkeznie Rendszergazda istrator és közreműködői hozzáféréssel. Ilyen erőforráscsoportot akkor használhat, ha az ml-bővítményt az előző cikk szerint konfigurálta.

  • Egy Azure Machine Learning-munkaterület. Már van munkaterülete, ha az ml-bővítményt az előző cikk szerint konfigurálta.

  • Egy betanított gépi tanulási modell, amely készen áll a pontozásra és az üzembe helyezésre. Ha a minta mellett követ egy modellt is.

  • Ha még nem állította be az Azure CLI alapértelmezett beállításait, mentse az alapértelmezett beállításokat. Az előfizetés, a munkaterület és az erőforráscsoport értékeinek többszöri átadásának elkerülése érdekében futtassa ezt a kódot:

    az account set --subscription <subscription ID>
    az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
    
  • A minta követéséhez klónozza a mintaadattárat, majd módosítsa a címtárat parancssori felületre.

    git clone https://github.com/Azure/azureml-examples --depth 1
    cd azureml-examples/cli
    

Korlátozások

  • A végpont identitása nem módosítható. A végpont létrehozása során társíthatja egy rendszer által hozzárendelt identitással (alapértelmezett) vagy egy felhasználó által hozzárendelt identitással. A végpont létrehozása után nem módosíthatja az identitást.
  • Ha az ARC- és blobtároló privátként van konfigurálva, vagyis egy virtuális hálózat mögött, akkor a Kubernetes-végpontról való hozzáférésnek a privát kapcsolaton keresztül kell lennie, függetlenül attól, hogy a munkaterület nyilvános vagy privát. A privát kapcsolat beállításával kapcsolatos további információkért tekintse meg a munkaterület virtuális hálózatának biztonságossá tételét ismertető cikket.

Változók konfigurálása üzembe helyezéshez

Konfigurálja a munkaterület, a munkaterület helye és a létrehozandó végpont változóneveit az üzembe helyezéshez.

A következő kód exportálja ezeket az értékeket környezeti változókként a végpontban:

export WORKSPACE="<WORKSPACE_NAME>"
export LOCATION="<WORKSPACE_LOCATION>"
export ENDPOINT_NAME="<ENDPOINT_NAME>"

Ezután adja meg, hogy mit szeretne blobtárolónak, blobtárolónak és fájlnak nevezni. Ezek a változónevek itt vannak definiálva, és a következő szakaszban hivatkoznak gombra az storage account create és az storage container create parancsokra.

A következő kód exportálja ezeket az értékeket környezeti változókként:

export STORAGE_ACCOUNT_NAME="<BLOB_STORAGE_TO_ACCESS>"
export STORAGE_CONTAINER_NAME="<CONTAINER_TO_ACCESS>"
export FILE_NAME="<FILE_TO_ACCESS>"

A változók exportálása után hozzon létre helyileg egy szövegfájlt. A végpont üzembe helyezésekor a pontozó szkript a végpont létrehozásakor létrehozott rendszer által hozzárendelt felügyelt identitással éri el ezt a szövegfájlt.

Az üzembehelyezési konfiguráció meghatározása

Ha online végpontot szeretne üzembe helyezni a parancssori felülettel, meg kell határoznia a konfigurációt egy YAML-fájlban. A YAML-sémával kapcsolatos további információkért tekintse meg az online végpont YAML-referenciadokumentumát .

Az alábbi példákban szereplő YAML-fájlok online végpontok létrehozására szolgálnak.

A következő YAML-példa végpontokon/online/felügyelt/felügyelt-identitásokon/1-sai-create-endpointon található. A fájl,

  • Meghatározza a végpontra hivatkozni kívánt nevet. my-sai-endpoint
  • A végpont elérésére használható engedélyezési típust adja meg. auth-mode: key
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-sai-endpoint
auth_mode: key

Ez a YAML-példa, 2-sai-deployment.yml,

  • Megadja, hogy a létrehozni kívánt végpont típusa végpont.online >
  • Azt jelzi, hogy a végpontnak van egy társított, úgynevezett blueüzembe helyezése.
  • Konfigurálja az üzembe helyezés részleteit, például azt, hogy melyik modellt, és melyik környezetet és pontozási szkriptet kell használni.
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
model:
  path: ../../model-1/model/
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score_managedidentity.py
environment:
  conda_file: ../../model-1/environment/conda-managedidentity.yaml
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
environment_variables:
  STORAGE_ACCOUNT_NAME: "storage_place_holder"
  STORAGE_CONTAINER_NAME: "container_place_holder"
  FILE_NAME: "file_place_holder"

A felügyelt identitás létrehozása

Az Azure-erőforrások eléréséhez hozzon létre egy rendszer által hozzárendelt vagy felhasználó által hozzárendelt felügyelt identitást az online végponthoz.

Online végpont létrehozásakor a rendszer automatikusan létrehoz egy rendszer által hozzárendelt felügyelt identitást, így nem kell külön identitást létrehoznia.

Tárfiók és tároló létrehozása

Ebben a példában hozzon létre egy blobtároló fiókot és blobtárolót, majd töltse fel a korábban létrehozott szövegfájlt a blobtárolóba. Ehhez a tárfiókhoz és blobtárolóhoz hozzáférést biztosít az online végponthoz és a felügyelt identitáshoz.

Először hozzon létre egy tárfiókot.

az storage account create --name $STORAGE_ACCOUNT_NAME --location $LOCATION

Ezután hozza létre a blobtárolót a tárfiókban.

az storage container create --account-name $STORAGE_ACCOUNT_NAME --name $STORAGE_CONTAINER_NAME

Ezután töltse fel a szövegfájlt a blobtárolóba.

az storage blob upload --account-name $STORAGE_ACCOUNT_NAME --container-name $STORAGE_CONTAINER_NAME --name $FILE_NAME --file endpoints/online/managed/managed-identities/hello.txt

Online végpont létrehozása

Az alábbi kód egy online végpontot hoz létre üzembe helyezés megadása nélkül.

Figyelmeztetés

A végpont identitása nem módosítható. A végpont létrehozása során társíthatja egy rendszer által hozzárendelt identitással (alapértelmezett) vagy egy felhasználó által hozzárendelt identitással. A végpont létrehozása után nem módosíthatja az identitást.

Online végpont létrehozásakor a rendszer alapértelmezés szerint létrehoz egy rendszer által hozzárendelt felügyelt identitást a végponthoz.

az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-sai-create-endpoint.yml

Ellenőrizze a végpont állapotát a következőkkel.

az ml online-endpoint show --name $ENDPOINT_NAME

Ha bármilyen probléma merül fel, tekintse meg az online végpontok üzembe helyezésének és pontozásának hibaelhárítását.

Hozzáférési engedély megadása a felügyelt identitáshoz

Fontos

Az online végpontokhoz az Azure Container Registry lekérési engedélyére, AcrPull-engedélyre van szükség a tárolóregisztrációs adatbázishoz és a Storage Blob Data Readerhez a munkaterület alapértelmezett adattárához.

Engedélyezheti az online végpont számára, hogy a rendszer által hozzárendelt felügyelt identitáson keresztül férhessen hozzá a tárterülethez, vagy engedélyt adhat a felhasználó által hozzárendelt felügyelt identitásnak az előző szakaszban létrehozott tárfiók eléréséhez.

Kérje le a végponthoz létrehozott rendszer által hozzárendelt felügyelt identitást.

system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`

Innen engedélyt adhat a rendszer által hozzárendelt felügyelt identitásnak a tárterület eléréséhez.

az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id

Pontozási szkript az Azure-erőforrás eléréséhez

Az alábbi szkriptből megtudhatja, hogyan használhatja identitásjogkivonatát az Azure-erőforrások eléréséhez, ebben a forgatókönyvben az előző szakaszokban létrehozott tárfiókhoz.

import os
import logging
import json
import numpy
import joblib
import requests
from azure.identity import ManagedIdentityCredential
from azure.storage.blob import BlobClient


def access_blob_storage_sdk():
    credential = ManagedIdentityCredential(client_id=os.getenv("UAI_CLIENT_ID"))
    storage_account = os.getenv("STORAGE_ACCOUNT_NAME")
    storage_container = os.getenv("STORAGE_CONTAINER_NAME")
    file_name = os.getenv("FILE_NAME")

    blob_client = BlobClient(
        account_url=f"https://{storage_account}.blob.core.windows.net/",
        container_name=storage_container,
        blob_name=file_name,
        credential=credential,
    )
    blob_contents = blob_client.download_blob().content_as_text()
    logging.info(f"Blob contains: {blob_contents}")


def get_token_rest():
    """
    Retrieve an access token via REST.
    """

    access_token = None
    msi_endpoint = os.environ.get("MSI_ENDPOINT", None)
    msi_secret = os.environ.get("MSI_SECRET", None)

    # If UAI_CLIENT_ID is provided then assume that endpoint was created with user assigned identity,
    # # otherwise system assigned identity deployment.
    client_id = os.environ.get("UAI_CLIENT_ID", None)
    if client_id is not None:
        token_url = (
            msi_endpoint + f"?clientid={client_id}&resource=https://storage.azure.com/"
        )
    else:
        token_url = msi_endpoint + f"?resource=https://storage.azure.com/"

    logging.info("Trying to get identity token...")
    headers = {"secret": msi_secret, "Metadata": "true"}
    resp = requests.get(token_url, headers=headers)
    resp.raise_for_status()
    access_token = resp.json()["access_token"]
    logging.info("Retrieved token successfully.")
    return access_token


def access_blob_storage_rest():
    """
    Access a blob via REST.
    """

    logging.info("Trying to access blob storage...")
    storage_account = os.environ.get("STORAGE_ACCOUNT_NAME")
    storage_container = os.environ.get("STORAGE_CONTAINER_NAME")
    file_name = os.environ.get("FILE_NAME")
    logging.info(
        f"storage_account: {storage_account}, container: {storage_container}, filename: {file_name}"
    )
    token = get_token_rest()

    blob_url = f"https://{storage_account}.blob.core.windows.net/{storage_container}/{file_name}?api-version=2019-04-01"
    auth_headers = {
        "Authorization": f"Bearer {token}",
        "x-ms-blob-type": "BlockBlob",
        "x-ms-version": "2019-02-02",
    }
    resp = requests.get(blob_url, headers=auth_headers)
    resp.raise_for_status()
    logging.info(f"Blob contains: {resp.text}")


def init():
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # For multiple models, it points to the folder containing all deployed models (./azureml-models)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
    )
    # deserialize the model file back into a sklearn model
    model = joblib.load(model_path)
    logging.info("Model loaded")

    # Access Azure resource (Blob storage) using system assigned identity token
    access_blob_storage_rest()
    access_blob_storage_sdk()

    logging.info("Init complete")


# note you can pass in multiple rows for scoring
def run(raw_data):
    logging.info("Request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

Üzembe helyezés létrehozása a konfigurációval

Hozzon létre egy üzembe helyezést, amely az online végponthoz van társítva. További információ az online végpontokon való üzembe helyezésről.

Figyelmeztetés

Ez az üzembe helyezés körülbelül 8–14 percet vehet igénybe attól függően, hogy az alapul szolgáló környezet/rendszerkép első létrehozása folyamatban van-e. Az azonos környezetet használó későbbi üzembe helyezések gyorsabban fognak haladni.

az ml online-deployment create --endpoint-name $ENDPOINT_NAME --all-traffic --name blue --file endpoints/online/managed/managed-identities/2-sai-deployment.yml --set environment_variables.STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME environment_variables.STORAGE_CONTAINER_NAME=$STORAGE_CONTAINER_NAME environment_variables.FILE_NAME=$FILE_NAME

Feljegyzés

Az argumentum értéke --name felülírhatja a name YAML-fájlban lévő kulcsot.

Ellenőrizze a telepítés állapotát.

az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue

Ha pontosítani szeretné a fenti lekérdezést, hogy csak adott adatokat ad vissza, tekintse meg az Azure CLI-parancs kimenetének lekérdezését.

Feljegyzés

A pontozó szkript init metódusa a rendszer által hozzárendelt felügyelt identitás jogkivonatával olvassa be a fájlt a tárfiókból.

Az init metódus kimenetének ellenőrzéséhez tekintse meg az üzembe helyezési naplót az alábbi kóddal.

# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue

Az üzembe helyezés befejezése után a modell, a környezet és a végpont regisztrálva lesz az Azure Machine Tanulás-munkaterületen.

A végpont tesztelése

Az online végpont üzembe helyezése után egy kéréssel tesztelje és erősítse meg a működését. A következtetés részletei modellenként eltérőek. Ebben az útmutatóban a JSON-lekérdezési paraméterek a következőképpen néznek ki:

{"data": [
    [1,2,3,4,5,6,7,8,9,10], 
    [10,9,8,7,6,5,4,3,2,1]
]}

A végpont meghívásához futtassa a következőt:

az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

A végpont és a tárfiók törlése

Ha nem tervezi tovább használni az üzembe helyezett online végpontot és tárterületet, törölje őket a költségek csökkentése érdekében. A végpont törlésekor a rendszer az összes társított üzembe helyezést is törli.

az ml online-endpoint delete --name $ENDPOINT_NAME --yes
az storage account delete --name $STORAGE_ACCOUNT_NAME --yes