GÄLLER FÖR:
Azure CLI ml extension v2 (current)
Python SDK azure-ai-ml v2 (aktuell)
Lär dig hur du kommer åt Azure-resurser från ditt bedömningsskript med en onlineslutpunkt och antingen en systemtilldelad hanterad identitet eller en användartilldelad hanterad identitet.
Både hanterade slutpunkter och Kubernetes-slutpunkter gör det möjligt för Azure Machine Learning att hantera bördan med att etablera beräkningsresursen och distribuera din maskininlärningsmodell. Vanligtvis behöver din modell komma åt Azure-resurser, till exempel Azure Container Registry eller din bloblagring för slutsatsdragning. med en hanterad identitet kan du komma åt dessa resurser utan att behöva hantera autentiseringsuppgifter i koden. Läs mer om hanterade identiteter.
Den här guiden förutsätter att du inte har någon hanterad identitet, ett lagringskonto eller en onlineslutpunkt. Om du redan har dessa komponenter går du vidare till avsnittet Ge åtkomstbehörighet till den hanterade identiteten .
Förutsättningar
Om du vill använda Azure Machine Learning måste du ha en Azure-prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning idag.
Installera och konfigurera Tillägget Azure CLI och ML (v2). Mer information finns i Installera, konfigurera och använda 2.0 CLI.
En Azure-resursgrupp där du (eller tjänstens huvudnamn du använder) måste ha användaråtkomstadministratör och deltagaråtkomst . Du har en sådan resursgrupp om du har konfigurerat ML-tillägget enligt föregående artikel.
En Azure Machine Learning-arbetsyta. Du har redan en arbetsyta om du har konfigurerat ML-tillägget enligt föregående artikel.
En tränad maskininlärningsmodell som är redo för bedömning och distribution. Om du följer med i exemplet tillhandahålls en modell.
Om du inte redan har angett standardinställningarna för Azure CLI sparar du standardinställningarna. Kör den här koden för att undvika att skicka in värdena för din prenumeration, arbetsyta och resursgrupp flera gånger:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Om du vill följa med i exemplet klonar du exempellagringsplatsen och ändrar sedan katalogen till cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Om du vill använda Azure Machine Learning måste du ha en Azure-prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning idag.
Installera och konfigurera Tillägget Azure CLI och ML (v2). Mer information finns i Installera, konfigurera och använda 2.0 CLI.
En Azure-resursgrupp där du (eller tjänstens huvudnamn du använder) måste ha användaråtkomstadministratör och deltagaråtkomst . Du har en sådan resursgrupp om du har konfigurerat ML-tillägget enligt föregående artikel.
En Azure Machine Learning-arbetsyta. Du har en arbetsyta om du har konfigurerat ML-tillägget enligt artikeln ovan.
En tränad maskininlärningsmodell som är redo för bedömning och distribution. Om du följer med i exemplet tillhandahålls en modell.
Om du inte redan har angett standardinställningarna för Azure CLI sparar du standardinställningarna. Kör den här koden för att undvika att skicka in värdena för din prenumeration, arbetsyta och resursgrupp flera gånger:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Om du vill följa med i exemplet klonar du exempellagringsplatsen och ändrar sedan katalogen till cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Om du vill använda Azure Machine Learning måste du ha en Azure-prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning idag.
Installera och konfigurera Azure Machine Learning Python SDK (v2). Mer information finns i Installera och konfigurera SDK (v2).
En Azure-resursgrupp där du (eller tjänstens huvudnamn du använder) måste ha användaråtkomstadministratör och deltagaråtkomst . Du har en sådan resursgrupp om du har konfigurerat ML-tillägget enligt föregående artikel.
En Azure Machine Learning-arbetsyta. Du har redan en arbetsyta om du har konfigurerat ML-tillägget enligt föregående artikel.
En tränad maskininlärningsmodell som är redo för bedömning och distribution. Om du följer med i exemplet tillhandahålls en modell.
Klona exempellagringsplatsen och ändra sedan katalogen.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Om du vill följa med i den här notebook-filen får du åtkomst till notebook-filen med tillhörande exempel i katalogen sdk/endpoints/online/managed/managed-identities.
Andra Python-paket krävs för det här exemplet:
- Microsoft Azure Storage Management Client
- Microsoft Azure Authorization Management Client
Installera dem med följande kod:
%pip install --pre azure-mgmt-storage
%pip install --pre azure-mgmt-authorization
Om du vill använda Azure Machine Learning måste du ha en Azure-prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning idag.
Behörigheter för att skapa roller för din prenumeration eller de Azure-resurser som används av den användartilldelade identiteten.
Installera och konfigurera Azure Machine Learning Python SDK (v2). Mer information finns i Installera och konfigurera SDK (v2).
En Azure-resursgrupp där du (eller tjänstens huvudnamn du använder) måste ha användaråtkomstadministratör och deltagaråtkomst . Du har en sådan resursgrupp om du har konfigurerat ML-tillägget enligt föregående artikel.
En Azure Machine Learning-arbetsyta. Du har redan en arbetsyta om du har konfigurerat ML-tillägget enligt föregående artikel.
En tränad maskininlärningsmodell som är redo för bedömning och distribution. Om du följer med i exemplet tillhandahålls en modell.
Klona exempellagringsplatsen.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Om du vill följa med i den här notebook-filen får du åtkomst till notebook-filen med tillhörande exempel i katalogen sdk/endpoints/online/managed/managed-identities.
Andra Python-paket krävs för det här exemplet:
- Microsoft Azure MSI-hanteringsklient
- Microsoft Azure Storage-klient
- Microsoft Azure Authorization Management Client
Installera dem med följande kod:
%pip install --pre azure-mgmt-msi
%pip install --pre azure-mgmt-storage
%pip install --pre azure-mgmt-authorization
Begränsningar
- Identiteten för en slutpunkt är oföränderlig. När slutpunkten skapas kan du associera den med en systemtilldelad identitet (standard) eller en användartilldelad identitet. Du kan inte ändra identiteten när slutpunkten har skapats.
- Om arc- och bloblagringen har konfigurerats som privata, dvs. bakom ett virtuellt nätverk, bör åtkomsten från Kubernetes-slutpunkten vara via den privata länken oavsett om din arbetsyta är offentlig eller privat. Mer information om inställningen för privat länk finns i Så här skyddar du arbetsytans virtuella nätverk.
Konfigurera variabelnamnen för arbetsytan, arbetsytans plats och slutpunkten som du vill skapa för användning med distributionen.
Följande kod exporterar dessa värden som miljövariabler i slutpunkten:
export WORKSPACE="<WORKSPACE_NAME>"
export LOCATION="<WORKSPACE_LOCATION>"
export ENDPOINT_NAME="<ENDPOINT_NAME>"
Ange sedan vad du vill ge bloblagringskontot, blobcontainern och filen namnet. Dessa variabelnamn definieras här och refereras till i az storage account create
och az storage container create
kommandon i nästa avsnitt.
Följande kod exporterar dessa värden som miljövariabler:
export STORAGE_ACCOUNT_NAME="<BLOB_STORAGE_TO_ACCESS>"
export STORAGE_CONTAINER_NAME="<CONTAINER_TO_ACCESS>"
export FILE_NAME="<FILE_TO_ACCESS>"
När dessa variabler har exporterats skapar du en textfil lokalt. När slutpunkten distribueras kommer bedömningsskriptet åt den här textfilen med hjälp av den systemtilldelade hanterade identiteten som genereras när slutpunkten skapas.
Bestäm namnet på slutpunkten, arbetsytan och arbetsytans plats och exportera sedan värdet som en miljövariabel:
export WORKSPACE="<WORKSPACE_NAME>"
export LOCATION="<WORKSPACE_LOCATION>"
export ENDPOINT_NAME="<ENDPOINT_NAME>"
Ange sedan vad du vill ge bloblagringskontot, blobcontainern och filen namnet. Dessa variabelnamn definieras här och refereras till i az storage account create
och az storage container create
kommandon i nästa avsnitt.
export STORAGE_ACCOUNT_NAME="<BLOB_STORAGE_TO_ACCESS>"
export STORAGE_CONTAINER_NAME="<CONTAINER_TO_ACCESS>"
export FILE_NAME="<FILE_TO_ACCESS>"
När dessa variabler har exporterats skapar du en textfil lokalt. När slutpunkten distribueras kommer bedömningsskriptet åt den här textfilen med hjälp av den användartilldelade hanterade identiteten som används i slutpunkten.
Bestäm namnet på ditt användaridentitetsnamn och exportera värdet som en miljövariabel:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Tilldela värden för arbetsytan och distributionsrelaterade variabler:
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace_name = "<AML_WORKSPACE_NAME>"
endpoint_name = "<ENDPOINT_NAME>"
Ange sedan vad du vill ge bloblagringskontot, blobcontainern och filen namnet. Dessa variabelnamn definieras här och refereras till i lagringskontot och koden för att skapa containrar av StorageManagementClient
och ContainerClient
.
storage_account_name = "<STORAGE_ACCOUNT_NAME>"
storage_container_name = "<CONTAINER_TO_ACCESS>"
file_name = "<FILE_TO_ACCESS>"
När dessa variabler har tilldelats skapar du en textfil lokalt. När slutpunkten distribueras kommer bedömningsskriptet åt den här textfilen med hjälp av den systemtilldelade hanterade identiteten som genereras när slutpunkten skapas.
Hämta nu ett handtag till arbetsytan och hämta dess plats:
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
Använd det här värdet för att skapa ett lagringskonto.
Tilldela värden för arbetsytan och distributionsrelaterade variabler:
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace_name = "<AML_WORKSPACE_NAME>"
endpoint_name = "<ENDPOINT_NAME>"
Ange sedan vad du vill ge bloblagringskontot, blobcontainern och filen namnet. Dessa variabelnamn definieras här och refereras till i lagringskontot och koden för att skapa containrar av StorageManagementClient
och ContainerClient
.
storage_account_name = "<STORAGE_ACCOUNT_NAME>"
storage_container_name = "<CONTAINER_TO_ACCESS>"
file_name = "<FILE_TO_ACCESS>"
När dessa variabler har tilldelats skapar du en textfil lokalt. När slutpunkten distribueras kommer bedömningsskriptet åt den här textfilen med hjälp av den användartilldelade hanterade identiteten som genereras när slutpunkten skapas.
Bestäm namnet på användaridentitetens namn:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Hämta nu ett handtag till arbetsytan och hämta dess plats:
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
Använd det här värdet för att skapa ett lagringskonto.
Definiera distributionskonfigurationen
Om du vill distribuera en onlineslutpunkt med CLI måste du definiera konfigurationen i en YAML-fil. Mer information om YAML-schemat finns i YAML-referensdokumentet för onlineslutpunkten.
YAML-filerna i följande exempel används för att skapa onlineslutpunkter.
Följande YAML-exempel finns vid slutpunkter/online/managed/managed-identities/1-sai-create-endpoint. Filen,
- Definierar namnet som du vill referera till slutpunkten,
my-sai-endpoint
.
- Anger vilken typ av auktorisering som ska användas för att komma åt slutpunkten,
auth-mode: key
.
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-sai-endpoint
auth_mode: key
Det här YAML-exemplet, 2-sai-deployment.yml,
- Anger att den typ av slutpunkt som du vill skapa är en
online
slutpunkt.
- Anger att slutpunkten har en associerad distribution med namnet
blue
.
- Konfigurerar information om distributionen, till exempel vilken modell som ska distribueras och vilken miljö och bedömningsskript som ska användas.
$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"
Om du vill distribuera en onlineslutpunkt med CLI måste du definiera konfigurationen i en YAML-fil. Mer information om YAML-schemat finns i YAML-referensdokumentet för onlineslutpunkten.
YAML-filerna i följande exempel används för att skapa onlineslutpunkter.
Följande YAML-exempel finns på slutpunkter/online/managed/managed-identities/1-uai-create-endpoint. Filen,
- Definierar namnet som du vill referera till slutpunkten,
my-uai-endpoint
.
- Anger vilken typ av auktorisering som ska användas för att komma åt slutpunkten,
auth-mode: key
.
- Anger den identitetstyp som ska användas,
type: user_assigned
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-uai-endpoint
auth_mode: key
identity:
type: user_assigned
user_assigned_identities:
- resource_id: user_identity_ARM_id_place_holder
Det här YAML-exemplet, 2-sai-deployment.yml,
- Anger att den typ av slutpunkt som du vill skapa är en
online
slutpunkt.
- Anger att slutpunkten har en associerad distribution med namnet
blue
.
- Konfigurerar information om distributionen, till exempel vilken modell som ska distribueras och vilken miljö och bedömningsskript som ska användas.
$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"
UAI_CLIENT_ID: "uai_client_id_place_holder"
Om du vill distribuera en onlineslutpunkt med Python SDK (v2) kan objekt användas för att definiera följande konfiguration. Alternativt kan YAML-filer läsas in med hjälp av .load
metoden .
Följande Python-slutpunktsobjekt:
- Tilldelar det namn med vilket du vill referera till slutpunkten till variabeln
endpoint_name
.
- Anger vilken typ av auktorisering som ska användas för att komma åt slutpunkten
auth-mode="key"
.
endpoint = ManagedOnlineEndpoint(name=endpoint_name, auth_mode="key")
Det här distributionsobjektet:
- Anger att den typ av distribution som du vill skapa är en
ManagedOnlineDeployment
via -klassen.
- Anger att slutpunkten har en associerad distribution med namnet
blue
.
- Konfigurerar information om distributionen, till exempel
name
och instance_count
- Definierar extra objekt infogade och associerar dem med distributionen för
Model
,CodeConfiguration
, och Environment
.
- Innehåller miljövariabler som behövs för att den systemtilldelade hanterade identiteten ska få åtkomst till lagringen.
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,
},
)
Om du vill distribuera en onlineslutpunkt med Python SDK (v2) kan objekt användas för att definiera följande konfiguration. Alternativt kan YAML-filer läsas in med hjälp av .load
metoden .
För en användartilldelad identitet definierar du slutpunktskonfigurationen när den användartilldelade hanterade identiteten har skapats.
Det här distributionsobjektet:
- Anger att den typ av distribution som du vill skapa är en
ManagedOnlineDeployment
via -klassen.
- Anger att slutpunkten har en associerad distribution med namnet
blue
.
- Konfigurerar information om distributionen, till exempel
name
och instance_count
- Definierar fler objekt infogade och associerar dem med distributionen för
Model
,CodeConfiguration
, och Environment
.
- Innehåller miljövariabler som krävs för att den användartilldelade hanterade identiteten ska få åtkomst till lagring.
- Lägger till en platshållarmiljövariabel för
UAI_CLIENT_ID
, som läggs till när du har skapat en och innan du distribuerar den här konfigurationen.
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",
},
)
Skapa den hanterade identiteten
Om du vill komma åt Azure-resurser skapar du en systemtilldelad eller användartilldelad hanterad identitet för din onlineslutpunkt.
När du skapar en onlineslutpunkt genereras automatiskt en systemtilldelad hanterad identitet åt dig, så du behöver inte skapa en separat.
Om du vill skapa en användartilldelad hanterad identitet använder du följande kommando:
az identity create --name $UAI_NAME
När du skapar en onlineslutpunkt genereras automatiskt en systemtilldelad hanterad identitet åt dig, så du behöver inte skapa en separat.
Om du vill skapa en användartilldelad hanterad identitet hämtar du först ett handtag till ManagedServiceIdentityClient
:
from azure.mgmt.msi import ManagedServiceIdentityClient
from azure.mgmt.msi.models import Identity
credential = AzureCliCredential()
msi_client = ManagedServiceIdentityClient(
subscription_id=subscription_id,
credential=credential,
)
Skapa sedan identiteten:
msi_client.user_assigned_identities.create_or_update(
resource_group_name=resource_group,
resource_name=uai_name,
parameters=Identity(location=workspace_location),
)
Hämta nu identitetsobjektet, som innehåller information som du använder:
uai_identity = msi_client.user_assigned_identities.get(
resource_group_name=resource_group,
resource_name=uai_name,
)
uai_identity.as_dict()
Skapa lagringskonto och container
I det här exemplet skapar du ett bloblagringskonto och en blobcontainer och laddar sedan upp den tidigare skapade textfilen till blobcontainern. Du ger onlineslutpunkten och den hanterade identiteten åtkomst till det här lagringskontot och blobcontainern.
Skapa först ett lagringskonto.
az storage account create --name $STORAGE_ACCOUNT_NAME --location $LOCATION
Skapa sedan blobcontainern i lagringskontot.
az storage container create --account-name $STORAGE_ACCOUNT_NAME --name $STORAGE_CONTAINER_NAME
Ladda sedan upp textfilen till blobcontainern.
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
Skapa först ett lagringskonto.
az storage account create --name $STORAGE_ACCOUNT_NAME --location $LOCATION
Du kan också hämta ett befintligt lagringskonto-ID med följande.
storage_id=`az storage account show --name $STORAGE_ACCOUNT_NAME --query "id" -o tsv`
Skapa sedan blobcontainern i lagringskontot.
az storage container create --account-name $STORAGE_ACCOUNT_NAME --name $STORAGE_CONTAINER_NAME
Ladda sedan upp filen i containern.
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
Hämta först ett handtag till StorageManagementclient
:
from azure.mgmt.storage import StorageManagementClient
from azure.storage.blob import ContainerClient
from azure.mgmt.storage.models import Sku, StorageAccountCreateParameters, BlobContainer
credential = AzureCliCredential()
storage_client = StorageManagementClient(
credential=credential, subscription_id=subscription_id
)
Skapa sedan ett lagringskonto:
storage_account_parameters = StorageAccountCreateParameters(
sku=Sku(name="Standard_LRS"),
kind="Storage",
location=workspace_location,
tags={"NRMS.NSP-extension": "ServiceTag-storage"},
)
storage_account = storage_client.storage_accounts.begin_create(
resource_group_name=resource_group,
account_name=storage_account_name,
parameters=storage_account_parameters,
).result()
Skapa sedan blobcontainern i lagringskontot:
blob_container = storage_client.blob_containers.create(
resource_group_name=resource_group,
account_name=storage_account_name,
container_name=storage_container_name,
blob_container=BlobContainer(),
)
Hämta lagringskontonyckeln och skapa ett handtag till containern med ContainerClient
:
res = storage_client.storage_accounts.list_keys(
resource_group_name=resource_group,
account_name=storage_account_name,
)
key = res.keys[0].value
container_client = ContainerClient(
account_url=storage_account.primary_endpoints.blob,
container_name=storage_container_name,
credential=key,
)
Ladda sedan upp en blob till containern med ContainerClient
:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Hämta först ett handtag till StorageManagementclient
:
from azure.mgmt.storage import StorageManagementClient
from azure.storage.blob import ContainerClient
from azure.mgmt.storage.models import Sku, StorageAccountCreateParameters, BlobContainer
credential = AzureCliCredential()
storage_client = StorageManagementClient(
credential=credential, subscription_id=subscription_id
)
Skapa sedan ett lagringskonto:
storage_account_parameters = StorageAccountCreateParameters(
sku=Sku(name="Standard_LRS"),
kind="Storage",
location=workspace_location,
tags={"NRMS.NSP-extension": "ServiceTag-storage"},
)
storage_account = storage_client.storage_accounts.begin_create(
resource_group_name=resource_group,
account_name=storage_account_name,
parameters=storage_account_parameters,
).result()
Skapa sedan blobcontainern i lagringskontot:
blob_container = storage_client.blob_containers.create(
resource_group_name=resource_group,
account_name=storage_account_name,
container_name=storage_container_name,
blob_container=BlobContainer(),
)
Hämta lagringskontonyckeln och skapa ett handtag till containern med ContainerClient
:
res = storage_client.storage_accounts.list_keys(
resource_group_name=resource_group,
account_name=storage_account_name,
)
key = res.keys[0].value
container_client = ContainerClient(
account_url=storage_account.primary_endpoints.blob,
container_name=storage_container_name,
credential=key,
)
Ladda sedan upp en blob till containern med ContainerClient
:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Skapa en onlineslutpunkt
Följande kod skapar en onlineslutpunkt utan att ange någon distribution.
Varning
Identiteten för en slutpunkt är oföränderlig. När slutpunkten skapas kan du associera den med en systemtilldelad identitet (standard) eller en användartilldelad identitet. Du kan inte ändra identiteten när slutpunkten har skapats.
När du skapar en onlineslutpunkt skapas som standard en systemtilldelad hanterad identitet för slutpunkten.
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-sai-create-endpoint.yml
Kontrollera statusen för slutpunkten med följande.
az ml online-endpoint show --name $ENDPOINT_NAME
Om du stöter på problem kan du läsa Felsöka distribution och bedömning av onlineslutpunkter.
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
Kontrollera statusen för slutpunkten med följande.
az ml online-endpoint show --name $ENDPOINT_NAME
Om du stöter på problem kan du läsa Felsöka distribution och bedömning av onlineslutpunkter.
När du skapar en onlineslutpunkt skapas som standard en systemtilldelad hanterad identitet för slutpunkten.
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
Kontrollera slutpunktens status via information om det distribuerade slutpunktsobjektet med följande kod:
endpoint = ml_client.online_endpoints.get(endpoint_name)
print(endpoint.identity.type)
print(endpoint.identity.principal_id)
Om du stöter på problem kan du läsa Felsöka distribution och bedömning av onlineslutpunkter.
Följande Python-slutpunktsobjekt:
- Tilldelar det namn med vilket du vill referera till slutpunkten till variabeln
endpoint_name
.
- Anger vilken typ av auktorisering som ska användas för att komma åt slutpunkten
auth-mode="key"
.
- Definierar dess identitet som en
ManagedServiceIdentity
och anger den hanterade identiteten som tilldelad användare.
Definiera och distribuera slutpunkten:
from azure.ai.ml.entities import ManagedIdentityConfiguration, IdentityConfiguration
endpoint = ManagedOnlineEndpoint(
name=endpoint_name,
auth_mode="key",
identity=IdentityConfiguration(
type="user_assigned",
user_assigned_identities=[
ManagedIdentityConfiguration(resource_id=uai_identity.id)
],
),
)
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
Kontrollera slutpunktens status via information om det distribuerade slutpunktsobjektet med följande kod:
endpoint = ml_client.online_endpoints.get(endpoint_name)
print(endpoint.identity.type)
print(endpoint.identity.user_assigned_identities)
Om du stöter på problem kan du läsa Felsöka distribution och bedömning av onlineslutpunkter.
Ge åtkomstbehörighet till den hanterade identiteten
Viktigt!
Onlineslutpunkter kräver pull-behörighet för Azure Container Registry, AcrPull-behörighet till containerregistret och behörigheten Storage Blob Data Reader till arbetsytans standarddatalager.
Du kan ge onlineslutpunkten behörighet att komma åt lagringen via dess systemtilldelade hanterade identitet eller ge behörighet till den användartilldelade hanterade identiteten för att få åtkomst till lagringskontot som skapades i föregående avsnitt.
Hämta den systemtilldelade hanterade identiteten som skapades för slutpunkten.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Härifrån kan du ge den systemtilldelade hanterade identiteten behörighet att komma åt din lagring.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Hämta användartilldelat klient-ID för hanterad identitet.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Hämta det användartilldelade hanterade identitets-ID:t.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Hämta containerregistret som är associerat med arbetsytan.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Hämta standardlagringen för arbetsytan.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Ge behörighet för lagringskontot till den användartilldelade hanterade identiteten.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Ge behörighet för containerregistret till användartilldelad hanterad identitet.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Ge behörighet för standardlagring av arbetsytor till användartilldelad hanterad identitet.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Börja med att göra en AuthorizationManagementClient
lista över rolldefinitioner:
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",
)
Initiera nu en för att göra rolltilldelningar:
from azure.mgmt.authorization.v2020_10_01_preview.models import (
RoleAssignment,
RoleAssignmentCreateParameters,
)
role_assignment_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2020-10-01-preview",
)
Hämta sedan huvud-ID:t för den systemtilldelade hanterade identiteten:
endpoint = ml_client.online_endpoints.get(endpoint_name)
system_principal_id = endpoint.identity.principal_id
Tilldela sedan rollen Storage Blob Data Reader till slutpunkten. Rolldefinitionen hämtas med namn och skickas tillsammans med slutpunktens huvudnamns-ID. Rollen tillämpas i omfånget för lagringskontot som skapades ovan och gör att slutpunkten kan läsa filen.
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
),
)
Börja med att göra en AuthorizationManagementClient
lista över rolldefinitioner:
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",
)
Initiera nu en för att göra rolltilldelningar:
from azure.mgmt.authorization.v2020_10_01_preview.models import (
RoleAssignment,
RoleAssignmentCreateParameters,
)
role_assignment_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2020-10-01-preview",
)
Hämta sedan huvud-ID och klient-ID för den användartilldelade hanterade identiteten. För att tilldela roller behöver du bara huvud-ID:t. Du använder dock klient-ID:t för att fylla UAI_CLIENT_ID
platshållarmiljövariabeln innan du skapar distributionen.
uai_identity = msi_client.user_assigned_identities.get(
resource_group_name=resource_group, resource_name=uai_name
)
uai_principal_id = uai_identity.principal_id
uai_client_id = uai_identity.client_id
Tilldela sedan rollen Storage Blob Data Reader till slutpunkten. Rolldefinitionen hämtas med namn och skickas tillsammans med huvud-ID:t för slutpunkten. Rollen används i omfånget för lagringskontot som skapades ovan så att slutpunkten kan läsa filen.
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",
),
)
För de kommande två behörigheterna behöver du arbetsytan och containerregisterobjekten:
workspace = ml_client.workspaces.get(workspace_name)
container_registry = workspace.container_registry
Tilldela sedan rollen AcrPull till den användartilldelade identiteten. Med den här rollen kan avbildningar hämtas från ett Azure Container Registry. Omfånget tillämpas på nivån för det containerregister som är associerat med arbetsytan.
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",
),
)
Tilldela slutligen rollen Storage Blob Data Reader till slutpunkten i arbetsytans lagringskontoomfång. Med den här rolltilldelningen kan slutpunkten läsa blobar i arbetsytans lagringskonto samt det nyligen skapade lagringskontot.
Rollen har samma namn och funktioner som den första rollen som tilldelades ovan, men den tillämpas i ett annat omfång och har ett annat ID.
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",
),
)
Bedömningsskript för åtkomst till Azure-resurs
Se följande skript för att förstå hur du använder din identitetstoken för att komma åt Azure-resurser, i det här scenariot det lagringskonto som skapades i föregående avsnitt.
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()
Skapa en distribution med din konfiguration
Skapa en distribution som är associerad med onlineslutpunkten. Läs mer om att distribuera till onlineslutpunkter.
Varning
Den här distributionen kan ta cirka 8–14 minuter beroende på om den underliggande miljön/avbildningen skapas för första gången. Efterföljande distributioner med samma miljö går snabbare.
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
Kommentar
Argumentets --name
värde kan åsidosätta name
nyckeln i YAML-filen.
Kontrollera distributionens status.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Information om hur du förfinar ovanstående fråga för att endast returnera specifika data finns i Fråga azure CLI-kommandoutdata.
Kommentar
Init-metoden i bedömningsskriptet läser filen från ditt lagringskonto med hjälp av den systemtilldelade hanterade identitetstoken.
Information om hur du kontrollerar init-metodens utdata finns i distributionsloggen med följande kod.
# 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
Kommentar
Argumentets --name
värde kan åsidosätta name
nyckeln i YAML-filen.
När kommandot körs kan du kontrollera distributionens status.
az ml online-endpoint show --name $ENDPOINT_NAME
Information om hur du förfinar ovanstående fråga för att endast returnera specifika data finns i Fråga azure CLI-kommandoutdata.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Kommentar
Init-metoden i bedömningsskriptet läser filen från ditt lagringskonto med hjälp av den användartilldelade hanterade identitetstoken.
Information om hur du kontrollerar init-metodens utdata finns i distributionsloggen med följande kod.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Skapa först distributionen:
ml_client.online_deployments.begin_create_or_update(deployment).result()
När distributionen är klar kontrollerar du dess status och bekräftar dess identitetsinformation:
deployment = ml_client.online_deployments.get(
endpoint_name=endpoint_name, name=deployment.name
)
print(deployment)
Kommentar
Init-metoden i bedömningsskriptet läser filen från ditt lagringskonto med hjälp av den systemtilldelade hanterade identitetstoken.
Information om hur du kontrollerar init-metodens utdata finns i distributionsloggen med följande kod.
ml_client.online_deployments.get_logs(deployment.name, deployment.endpoint_name, 1000)
Nu när distributionen har bekräftats anger du trafiken till 100 %:
endpoint.traffic = {str(deployment.name): 100}
ml_client.begin_create_or_update(endpoint).result()
Innan du distribuerar uppdaterar du platshållaren för UAI_CLIENT_ID
miljövariabeln.
deployment.environment_variables["UAI_CLIENT_ID"] = uai_client_id
Skapa nu distributionen:
ml_client.online_deployments.begin_create_or_update(deployment).result()
När distributionen är klar kontrollerar du dess status och bekräftar dess identitetsinformation:
deployment = ml_client.online_deployments.get(
endpoint_name=endpoint_name, name=deployment.name
)
print(deployment)
Kommentar
Init-metoden i bedömningsskriptet läser filen från ditt lagringskonto med hjälp av den användartilldelade hanterade identitetstoken.
Information om hur du kontrollerar init-metodens utdata finns i distributionsloggen med följande kod.
ml_client.online_deployments.get_logs(deployment.name, deployment.endpoint_name, 1000)
Nu när distributionen har bekräftats anger du trafiken till 100 %:
endpoint.traffic = {str(deployment.name): 100}
ml_client.begin_create_or_update(endpoint).result()
När distributionen är klar registreras modellen, miljön och slutpunkten på din Azure Machine Learning-arbetsyta.
Testa slutpunkten
När din onlineslutpunkt har distribuerats testar och bekräftar du dess åtgärd med en begäran. Information om slutsatsdragning varierar från modell till modell. I den här guiden ser JSON-frågeparametrarna ut så här:
{"data": [
[1,2,3,4,5,6,7,8,9,10],
[10,9,8,7,6,5,4,3,2,1]
]}
Anropa slutpunkten genom att köra:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
sample_data = "../../model-1/sample-request.json"
ml_client.online_endpoints.invoke(endpoint_name=endpoint_name, request_file=sample_data)
sample_data = "../../model-1/sample-request.json"
ml_client.online_endpoints.invoke(endpoint_name=endpoint_name, request_file=sample_data)
Ta bort slutpunkten och lagringskontot
Om du inte planerar att fortsätta använda den distribuerade onlineslutpunkten och lagringen tar du bort dem för att minska kostnaderna. När du tar bort slutpunkten tas även alla dess associerade distributioner bort.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes
az storage account delete --name $STORAGE_ACCOUNT_NAME --yes
az ml online-endpoint delete --name $ENDPOINT_NAME --yes
az storage account delete --name $STORAGE_ACCOUNT_NAME --yes
az identity delete --name $UAI_NAME
Ta bort slutpunkten:
ml_client.online_endpoints.begin_delete(endpoint_name)
Ta bort lagringskontot:
storage_client.storage_accounts.delete(
resource_group_name=resource_group, account_name=storage_account_name
)
Ta bort slutpunkten:
ml_client.online_endpoints.begin_delete(endpoint_name)
Ta bort lagringskontot:
storage_client.storage_accounts.delete(
resource_group_name=resource_group, account_name=storage_account_name
)
Ta bort den användartilldelade hanterade identiteten:
msi_client.user_assigned_identities.delete(
resource_group_name=resource_group, resource_name=uai_name
)
Relaterat innehåll