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.
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.
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
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.
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. Ha a fenti cikk szerint konfigurálta az ML-bővítményt, munkaterülete van.
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
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.
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.
Klónozza a mintaadattárat, majd módosítsa a könyvtárat.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Ha követni szeretné ezt a jegyzetfüzetet, az sdk/endpoints/online/managed/managed-identityes könyvtárban érheti el a társ-példajegyzetfüzetet.
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.
Szerepkör-létrehozási engedélyek az előfizetéshez vagy a felhasználó által hozzárendelt identitás által elért Azure-erőforrásokhoz.
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.
Klónozza a mintaadattárat.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Ha követni szeretné ezt a jegyzetfüzetet, az sdk/endpoints/online/managed/managed-identityes könyvtárban érheti el a társ-példajegyzetfüzetet.
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.
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:
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.
Döntse el a végpont, a munkaterület és a munkaterület helyének nevét, majd exportálja ezt az értéket környezeti változóként:
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 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égpontban használt, felhasználó által hozzárendelt felügyelt identitással éri el ezt a szövegfájlt.
Döntse el a felhasználóneve nevét, és exportálja ezt az értéket környezeti változóként:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Rendeljen értékeket a munkaterülethez és az üzembe helyezéshez kapcsolódó változókhoz:
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 tárfiókban és a tárolólétrehozás kódjában az és ContainerClienta StorageManagementClient .
A változók hozzárendelése 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.
Most szerezze be a munkaterület leíróját, és kérje le a helyét:
from azure.ai.ml import MLClient
from azure.identity import AzureCliCredential
from azure.ai.ml.entities import (
ManagedOnlineDeployment,
ManagedOnlineEndpoint,
Model,
CodeConfiguration,
Environment,
)
credential = AzureCliCredential()
ml_client = MLClient(credential, subscription_id, resource_group, workspace_name)
workspace_location = ml_client.workspaces.get(workspace_name).location
Ezzel az értékkel tárfiókot hozhat létre.
Rendeljen értékeket a munkaterülethez és az üzembe helyezéshez kapcsolódó változókhoz:
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 tárfiókban és a tárolólétrehozás kódjában az és ContainerClienta StorageManagementClient .
A változók hozzárendelése 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, felhasználó által hozzárendelt felügyelt identitással éri el ezt a szövegfájlt.
Döntse el a felhasználóneve nevét:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Most szerezze be a munkaterület leíróját, és kérje le a helyét:
from azure.ai.ml import MLClient
from azure.identity import AzureCliCredential
from azure.ai.ml.entities import (
ManagedOnlineDeployment,
ManagedOnlineEndpoint,
Model,
CodeConfiguration,
Environment,
)
credential = AzureCliCredential()
ml_client = MLClient(credential, subscription_id, resource_group, workspace_name)
workspace_location = ml_client.workspaces.get(workspace_name).location
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
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 a végpontokon/online/managed/managed-identityes/1-uai-create-endpoint helyen található. A fájl,
Meghatározza a végpontra hivatkozni kívánt nevet. my-uai-endpoint
A végpont elérésére használható engedélyezési típust adja meg. auth-mode: key
A használni kívánt identitástípust jelzi, type: user_assigned
Ha online végpontot szeretne üzembe helyezni a Python SDK-val (v2), objektumokkal definiálhatja a következő konfigurációt. Másik lehetőségként a YAML-fájlok betölthetők a .load módszerrel.
A következő Python-végpontobjektum:
Hozzárendeli azt a nevet, amellyel a végpontra hivatkozni szeretne a változóhoz endpoint_name.
Megadja a végpont auth-mode="key"eléréséhez használandó engedélyezési típust.
Ha online végpontot szeretne üzembe helyezni a Python SDK-val (v2), objektumokkal definiálhatja a következő konfigurációt. Másik lehetőségként a YAML-fájlok betölthetők a .load módszerrel.
Felhasználó által hozzárendelt identitás esetén a végpontkonfigurációt a felhasználó által hozzárendelt felügyelt identitás létrehozása után kell meghatároznia.
Ez az üzembe helyezési objektum:
Megadja, hogy a létrehozni kívánt üzembe helyezés típusa az osztályon keresztül legyen ManagedOnlineDeployment .
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 a nameinstance_count
Több objektumot definiál beágyazottan, és társítja őket a (ésEnvironment)CodeConfiguration környezethezModel.
Olyan környezeti változókat tartalmaz, amelyekre a felhasználó által hozzárendelt felügyelt identitásnak szüksége van a tároló eléréséhez.
Hozzáad egy helyőrző környezeti változót a beállításhoz UAI_CLIENT_ID, amelyet a rendszer a konfiguráció létrehozása után és a tényleges üzembe helyezés előtt ad hozzá.
deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=Model(path="../../model-1/model/"),
code_configuration=CodeConfiguration(
code="../../model-1/onlinescoring/", scoring_script="score_managedidentity.py"
),
environment=Environment(
conda_file="../../model-1/environment/conda-managedidentity.yml",
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_account_name,
"STORAGE_CONTAINER_NAME": storage_container_name,
"FILE_NAME": file_name,
# We will update this after creating an identity
"UAI_CLIENT_ID": "uai_client_id_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.
Felhasználó által hozzárendelt felügyelt identitás létrehozásához használja a következő parancsot:
az identity create --name $UAI_NAME
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.
Felhasználó által hozzárendelt felügyelt identitás létrehozásához először kap egy leírót a ManagedServiceIdentityClientkövetkezőhöz:
from azure.mgmt.msi import ManagedServiceIdentityClient
from azure.mgmt.msi.models import Identity
credential = AzureCliCredential()
msi_client = ManagedServiceIdentityClient(
subscription_id=subscription_id,
credential=credential,
)
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.
Ezután töltsön fel egy blobot a tárolóba a ContainerClientkövetkezővel:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
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.
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-uai-create-endpoint.yml --set identity.user_assigned_identities[0].resource_id=$uai_id
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
Kérje le a felhasználó által hozzárendelt felügyelt identitás ügyfél-azonosítóját.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Kérje le a felhasználó által hozzárendelt felügyelt identitásazonosítót.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Kérje le a munkaterülethez társított tárolóregisztrációs adatbázist.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Kérje le a munkaterület alapértelmezett tárolóját.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Adjon engedélyt a tárfióknak a felhasználó által hozzárendelt felügyelt identitásnak.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Adjon engedélyt a tárolóregisztrációs adatbázisnak a felhasználó által hozzárendelt felügyelt identitásnak.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Adjon engedélyt az alapértelmezett munkaterület-tárolóra a felhasználó által hozzárendelt felügyelt identitásnak.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Először készítsen egy listát AuthorizationManagementClient a szerepkördefiníciókról:
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.v2018_01_01_preview.models import RoleDefinition
import uuid
role_definition_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2018-01-01-preview",
)
Most inicializáljon egyet a szerepkör-hozzárendelésekhez:
Ezután rendelje hozzá a tárblobadat-olvasó szerepkört a végponthoz. A szerepkördefiníciót a rendszer név alapján kéri le, és a végpont egyszerű azonosítójával együtt adja át. A szerepkör a fent létrehozott tárfiók hatókörében van alkalmazva, és lehetővé teszi a végpont számára a fájl olvasását.
role_name = "Storage Blob Data Reader"
scope = storage_account.id
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id, principal_id=system_principal_id
),
)
Először készítsen egy listát AuthorizationManagementClient a szerepkördefiníciókról:
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.v2018_01_01_preview.models import RoleDefinition
import uuid
role_definition_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2018-01-01-preview",
)
Most inicializáljon egyet a szerepkör-hozzárendelésekhez:
Ezután kérje le a felhasználó által hozzárendelt felügyelt identitás egyszerű azonosítóját és ügyfél-azonosítóját. A szerepkörök hozzárendeléséhez csak az egyszerű azonosítóra van szükség. Az ügyfélazonosítóval azonban kitöltheti a UAI_CLIENT_ID helyőrző környezeti változót az üzembe helyezés létrehozása előtt.
Ezután rendelje hozzá a tárblobadat-olvasó szerepkört a végponthoz. A szerepkördefiníciót a rendszer név alapján kéri le, és a végpont egyszerű azonosítójával együtt adja át. A szerepkör a fent létrehozott tárfiók hatókörében van alkalmazva, hogy a végpont elolvashassa a fájlt.
role_name = "Storage Blob Data Reader"
scope = storage_account.id
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
A következő két engedélyhez a munkaterület és a tárolóregisztrációs adatbázis objektumai szükségesek:
Ezután rendelje hozzá az AcrPull szerepkört a felhasználó által hozzárendelt identitáshoz. Ez a szerepkör lehetővé teszi a rendszerképek lekérését egy Azure Container Registryből. A hatókör a munkaterülethez társított tárolóregisztrációs adatbázis szintjén lesz alkalmazva.
role_name = "AcrPull"
scope = container_registry
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
Végül rendelje hozzá a Storage Blob Adatolvasó szerepkört a végponthoz a munkaterület tárfiókjának hatókörében. Ez a szerepkör-hozzárendelés lehetővé teszi a végpont számára a blobok olvasását a munkaterület tárfiókjában és az újonnan létrehozott tárfiókban.
A szerepkör neve és képességei megegyeznek a fent hozzárendelt első szerepkör nevével és képességeivel, azonban egy másik hatókörben van alkalmazva, és más azonosítóval rendelkezik.
role_name = "Storage Blob Data Reader"
scope = workspace.storage_account
role_defs = role_definition_client.role_definitions.list(scope=scope)
role_def = next((r for r in role_defs if r.role_name == role_name))
role_assignment_client.role_assignments.create(
scope=scope,
role_assignment_name=str(uuid.uuid4()),
parameters=RoleAssignmentCreateParameters(
role_definition_id=role_def.id,
principal_id=uai_principal_id,
principal_type="ServicePrincipal",
),
)
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()
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
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 ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-uai-create-endpoint.yml --set identity.user_assigned_identities[0].resource_id=$uai_id
Feljegyzés
Az argumentum értéke --name felülírhatja a name YAML-fájlban lévő kulcsot.
A parancs végrehajtása után ellenőrizheti az üzembe helyezés állapotát.
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:
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.