PLATÍ PRO:
Rozšíření Azure CLI ml v2 (aktuální)
Python SDK azure-ai-ml v2 (aktuální)
Zjistěte, jak získat přístup k prostředkům Azure z hodnoticího skriptu pomocí online koncového bodu a spravované identity přiřazené systémem nebo spravované identity přiřazené uživatelem.
Spravované koncové body i koncové body Kubernetes umožňují službě Azure Machine Learning spravovat zatížení zřizování výpočetního prostředku a nasazení modelu strojového učení. Váš model obvykle potřebuje přístup k prostředkům Azure, jako je Azure Container Registry nebo úložiště objektů blob pro odvozování. se spravovanou identitou můžete k těmto prostředkům přistupovat bez nutnosti spravovat přihlašovací údaje ve vašem kódu.
Přečtěte si další informace o spravovaných identitách.
V této příručce se předpokládá, že nemáte spravovanou identitu, účet úložiště ani online koncový bod. Pokud už tyto komponenty máte, přejděte do části Udělení oprávnění pro přístup ke spravované identitě .
Požadavky
Pokud chcete používat Azure Machine Learning, musíte mít předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte si bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes.
Nainstalujte a nakonfigurujte rozšíření Azure CLI a ML (v2). Další informace najdete v tématu Instalace, nastavení a použití rozhraní příkazového řádku 2.0.
Skupina prostředků Azure, ve které vy (nebo instanční objekt, který používáte), musí mít přístup správce uživatelských přístupů a přispěvatel. Takovou skupinu prostředků máte, pokud jste nakonfigurovali rozšíření ML podle předchozího článku.
Pracovní prostor služby Azure Machine Learning. Pokud jste nakonfigurovali rozšíření ML podle předchozího článku, už máte pracovní prostor.
Trénovaný model strojového učení připravený k bodování a nasazení Pokud sledujete společně s ukázkou, je k dispozici model.
Pokud jste ještě nenastavili výchozí hodnoty pro Azure CLI, uložte výchozí nastavení. Pokud se chcete vyhnout předávání hodnot pro vaše předplatné, pracovní prostor a skupinu prostředků několikrát, spusťte tento kód:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Pokud chcete postupovat podle ukázky, naklonujte úložiště ukázek a pak změňte adresář na cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Pokud chcete používat Azure Machine Learning, musíte mít předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte si bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes.
Nainstalujte a nakonfigurujte rozšíření Azure CLI a ML (v2). Další informace najdete v tématu Instalace, nastavení a použití rozhraní příkazového řádku 2.0.
Skupina prostředků Azure, ve které vy (nebo instanční objekt, který používáte), potřebujete mít přístup správce uživatelských přístupů a přispěvatel. Takovou skupinu prostředků máte, pokud jste nakonfigurovali rozšíření ML podle předchozího článku.
Pracovní prostor služby Azure Machine Learning. Pokud jste nakonfigurovali rozšíření ML podle výše uvedeného článku, máte pracovní prostor.
Trénovaný model strojového učení připravený k bodování a nasazení Pokud sledujete společně s ukázkou, je k dispozici model.
Pokud jste ještě nenastavili výchozí hodnoty pro Azure CLI, uložte výchozí nastavení. Pokud se chcete vyhnout předávání hodnot pro vaše předplatné, pracovní prostor a skupinu prostředků několikrát, spusťte tento kód:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Pokud chcete postupovat podle ukázky, naklonujte úložiště ukázek a pak změňte adresář na cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Pokud chcete používat Azure Machine Learning, musíte mít předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte si bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes.
Nainstalujte a nakonfigurujte sadu Azure Machine Learning Python SDK (v2). Další informace najdete v tématu Instalace a nastavení sady SDK (v2).
Skupina prostředků Azure, ve které vy (nebo instanční objekt, který používáte), potřebujete mít přístup správce uživatelských přístupů a přispěvatel. Takovou skupinu prostředků máte, pokud jste nakonfigurovali rozšíření ML podle předchozího článku.
Pracovní prostor služby Azure Machine Learning. Pokud jste nakonfigurovali rozšíření ML podle předchozího článku, už máte pracovní prostor.
Trénovaný model strojového učení připravený k bodování a nasazení Pokud sledujete společně s ukázkou, je k dispozici model.
Naklonujte úložiště ukázek a pak změňte adresář.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Pokud chcete postupovat podle tohoto poznámkového bloku, přejděte k doprovodným ukázkovým poznámkovému bloku v adresáři sdk/endpoints/online/managed/managed-identityies .
V tomto příkladu jsou vyžadovány další balíčky Pythonu:
- Klient pro správu služby Microsoft Azure Storage
- Klient správy autorizace Microsoft Azure
Nainstalujte je pomocí následujícího kódu:
%pip install --pre azure-mgmt-storage
%pip install --pre azure-mgmt-authorization
Pokud chcete používat Azure Machine Learning, musíte mít předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte si bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes.
Oprávnění k vytvoření role pro vaše předplatné nebo prostředky Azure, ke kterým přistupuje identita přiřazená uživatelem.
Nainstalujte a nakonfigurujte sadu Azure Machine Learning Python SDK (v2). Další informace najdete v tématu Instalace a nastavení sady SDK (v2).
Skupina prostředků Azure, ve které vy (nebo instanční objekt, který používáte), potřebujete mít přístup správce uživatelských přístupů a přispěvatel. Takovou skupinu prostředků máte, pokud jste nakonfigurovali rozšíření ML podle předchozího článku.
Pracovní prostor služby Azure Machine Learning. Pokud jste nakonfigurovali rozšíření ML podle předchozího článku, už máte pracovní prostor.
Trénovaný model strojového učení připravený k bodování a nasazení Pokud sledujete společně s ukázkou, je k dispozici model.
Naklonujte úložiště ukázek.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Pokud chcete postupovat podle tohoto poznámkového bloku, přejděte k doprovodným ukázkovým poznámkovému bloku v adresáři sdk/endpoints/online/managed/managed-identityies .
V tomto příkladu jsou vyžadovány další balíčky Pythonu:
- Klient pro správu MSI Microsoft Azure
- Klient Microsoft Azure Storage
- Klient správy autorizace Microsoft Azure
Nainstalujte je pomocí následujícího kódu:
%pip install --pre azure-mgmt-msi
%pip install --pre azure-mgmt-storage
%pip install --pre azure-mgmt-authorization
Omezení
- Identita koncového bodu je neměnná. Během vytváření koncového bodu ho můžete přidružit k identitě přiřazené systémem (výchozí) nebo k identitě přiřazené uživatelem. Identitu po vytvoření koncového bodu nemůžete změnit.
- Pokud je vaše úložiště ARC a objektů blob nakonfigurované jako privátní, to znamená za virtuální sítí, měl by být přístup z koncového bodu Kubernetes přes privátní propojení bez ohledu na to, jestli je váš pracovní prostor veřejný nebo privátní. Další podrobnosti o nastavení privátního propojení najdete v tématu Postup zabezpečení virtuální sítě pracovního prostoru.
Nakonfigurujte názvy proměnných pro pracovní prostor, umístění pracovního prostoru a koncový bod, který chcete vytvořit pro použití s vaším nasazením.
Následující kód exportuje tyto hodnoty jako proměnné prostředí ve vašem koncovém bodu:
export WORKSPACE="<WORKSPACE_NAME>"
export LOCATION="<WORKSPACE_LOCATION>"
export ENDPOINT_NAME="<ENDPOINT_NAME>"
Dále určete, co chcete pojmenovat účet úložiště objektů blob, kontejner objektů blob a soubor. Tyto názvy proměnných jsou zde definovány a v další části jsou odkazované az storage account createaz storage container create na příkazy.
Následující kód tyto hodnoty exportuje jako proměnné prostředí:
export STORAGE_ACCOUNT_NAME="<BLOB_STORAGE_TO_ACCESS>"
export STORAGE_CONTAINER_NAME="<CONTAINER_TO_ACCESS>"
export FILE_NAME="<FILE_TO_ACCESS>"
Po exportu těchto proměnných vytvořte textový soubor místně. Po nasazení koncového bodu skript bodování přistupuje k tomuto textovému souboru pomocí spravované identity přiřazené systémem, která se vygeneruje při vytváření koncového bodu.
Rozhodněte se o názvu koncového bodu, pracovního prostoru a umístění pracovního prostoru a pak ji vyexportujte jako proměnnou prostředí:
export WORKSPACE="<WORKSPACE_NAME>"
export LOCATION="<WORKSPACE_LOCATION>"
export ENDPOINT_NAME="<ENDPOINT_NAME>"
Dále určete, co chcete pojmenovat účet úložiště objektů blob, kontejner objektů blob a soubor. Tyto názvy proměnných jsou zde definovány a v další části jsou odkazované az storage account createaz storage container create na příkazy.
export STORAGE_ACCOUNT_NAME="<BLOB_STORAGE_TO_ACCESS>"
export STORAGE_CONTAINER_NAME="<CONTAINER_TO_ACCESS>"
export FILE_NAME="<FILE_TO_ACCESS>"
Po exportu těchto proměnných vytvořte textový soubor místně. Po nasazení koncového bodu skript bodování přistupuje k tomuto textovému souboru pomocí spravované identity přiřazené uživatelem, která se používá v koncovém bodu.
Rozhodněte se o názvu vaší identity uživatele a exportujte ji jako proměnnou prostředí:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Přiřaďte hodnoty pro proměnné související s pracovním prostorem a nasazením:
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace_name = "<AML_WORKSPACE_NAME>"
endpoint_name = "<ENDPOINT_NAME>"
Dále určete, co chcete pojmenovat účet úložiště objektů blob, kontejner objektů blob a soubor. Tyto názvy proměnných jsou zde definovány a jsou uvedeny v účtu úložiště a vytváření kontejneru kódem StorageManagementClient a ContainerClient.
storage_account_name = "<STORAGE_ACCOUNT_NAME>"
storage_container_name = "<CONTAINER_TO_ACCESS>"
file_name = "<FILE_TO_ACCESS>"
Po přiřazení těchto proměnných vytvořte textový soubor místně. Po nasazení koncového bodu skript bodování přistupuje k tomuto textovému souboru pomocí spravované identity přiřazené systémem, která se vygeneruje při vytváření koncového bodu.
Teď získejte popisovač pracovního prostoru a načtěte jeho umístění:
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
Tuto hodnotu použijte k vytvoření účtu úložiště.
Přiřaďte hodnoty pro proměnné související s pracovním prostorem a nasazením:
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace_name = "<AML_WORKSPACE_NAME>"
endpoint_name = "<ENDPOINT_NAME>"
Dále určete, co chcete pojmenovat účet úložiště objektů blob, kontejner objektů blob a soubor. Tyto názvy proměnných jsou zde definovány a jsou uvedeny v účtu úložiště a vytváření kontejneru kódem StorageManagementClient a ContainerClient.
storage_account_name = "<STORAGE_ACCOUNT_NAME>"
storage_container_name = "<CONTAINER_TO_ACCESS>"
file_name = "<FILE_TO_ACCESS>"
Po přiřazení těchto proměnných vytvořte textový soubor místně. Po nasazení koncového bodu skript bodování přistupuje k tomuto textovému souboru pomocí spravované identity přiřazené uživatelem, která se vygeneruje při vytváření koncového bodu.
Rozhodněte se o názvu vaší identity uživatele:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Teď získejte popisovač pracovního prostoru a načtěte jeho umístění:
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
Tuto hodnotu použijte k vytvoření účtu úložiště.
Definování konfigurace nasazení
Pokud chcete nasadit online koncový bod pomocí rozhraní příkazového řádku, musíte definovat konfiguraci v souboru YAML. Další informace o schématu YAML najdete v referenčním dokumentu YAML o online koncovém bodu.
Soubory YAML v následujících příkladech slouží k vytváření online koncových bodů.
Následující příklad YAML se nachází na koncových bodech, online, managed/managed-identities/1-sai-create-endpoint. Soubor,
- Definuje název, kterým chcete odkazovat na koncový bod.
my-sai-endpoint
- Určuje typ autorizace, který se má použít pro přístup ke koncovému bodu.
auth-mode: key
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-sai-endpoint
auth_mode: key
Tento příklad YAML, 2-sai-deployment.yml,
- Určuje, že typ koncového bodu, který chcete vytvořit, je
online koncový bod.
- Označuje, že koncový bod má přidružené nasazení s názvem
blue.
- Konfiguruje podrobnosti o nasazení, například který model se má nasadit a které prostředí a bodovací skript použít.
$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-ubuntu22.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"
Pokud chcete nasadit online koncový bod pomocí rozhraní příkazového řádku, musíte definovat konfiguraci v souboru YAML. Další informace o schématu YAML najdete v referenčním dokumentu YAML o online koncovém bodu.
Soubory YAML v následujících příkladech slouží k vytváření online koncových bodů.
Následující příklad YAML se nachází v koncových bodech, online, managed/managed-identities/1-uai-create-endpoint. Soubor,
- Definuje název, kterým chcete odkazovat na koncový bod.
my-uai-endpoint
- Určuje typ autorizace, který se má použít pro přístup ke koncovému bodu.
auth-mode: key
- Označuje typ identity, který se má použít.
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
Tento příklad YAML, 2-sai-deployment.yml,
- Určuje, že typ koncového bodu, který chcete vytvořit, je
online koncový bod.
- Označuje, že koncový bod má přidružené nasazení s názvem
blue.
- Konfiguruje podrobnosti o nasazení, například který model se má nasadit a které prostředí a bodovací skript použít.
$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-ubuntu22.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"
K nasazení online koncového bodu pomocí sady Python SDK (v2) je možné použít objekty k definování následující konfigurace. Alternativně lze soubory YAML načíst pomocí .load metody.
Následující objekt koncového bodu Pythonu:
- Přiřadí název, kterým chcete odkazovat na koncový bod proměnné
endpoint_name.
- Určuje typ autorizace, který se má použít pro přístup ke koncovému bodu
auth-mode="key".
endpoint = ManagedOnlineEndpoint(name=endpoint_name, auth_mode="key")
Tento objekt nasazení:
- Určuje, že typ nasazení, které chcete vytvořit, je prostřednictvím
ManagedOnlineDeployment třídy.
- Označuje, že koncový bod má přidružené nasazení s názvem
blue.
- Konfiguruje podrobnosti o nasazení, jako je například
nameinstance_count
- Definuje další vložené objekty a přidruží je k nasazení pro
Model,CodeConfiguration a Environment.
- Zahrnuje proměnné prostředí potřebné pro spravovanou identitu přiřazenou systémem pro přístup k úložišti.
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-ubuntu22.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,
},
)
K nasazení online koncového bodu pomocí sady Python SDK (v2) je možné použít objekty k definování následující konfigurace. Alternativně lze soubory YAML načíst pomocí .load metody.
Pro identitu přiřazenou uživatelem definujete konfiguraci koncového bodu po vytvoření spravované identity přiřazené uživatelem.
Tento objekt nasazení:
- Určuje, že typ nasazení, které chcete vytvořit, je prostřednictvím
ManagedOnlineDeployment třídy.
- Označuje, že koncový bod má přidružené nasazení s názvem
blue.
- Konfiguruje podrobnosti o nasazení, jako je například
nameinstance_count
- Definuje více objektů vložených a přidruží je k nasazení pro
Model,CodeConfiguration a Environment.
- Zahrnuje proměnné prostředí potřebné pro přístup k úložišti spravovanou identitou přiřazenou uživatelem.
- Přidá zástupnou proměnnou prostředí pro
UAI_CLIENT_ID, která se přidá po vytvoření jedné a před skutečně nasazením této konfigurace.
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-ubuntu22.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",
},
)
Vytvoření spravované identity
Pokud chcete získat přístup k prostředkům Azure, vytvořte spravovanou identitu přiřazenou systémem nebo přiřazenou uživatelem pro váš online koncový bod.
Pokud chcete vytvořit spravovanou identitu přiřazenou uživatelem, použijte následující příkaz:
az identity create --name $UAI_NAME
Pokud chcete vytvořit spravovanou identitu přiřazenou uživatelem, nejprve získejte popisovač 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,
)
Pak vytvořte identitu:
msi_client.user_assigned_identities.create_or_update(
resource_group_name=resource_group,
resource_name=uai_name,
parameters=Identity(location=workspace_location),
)
Teď načtěte objekt identity, který obsahuje podrobnosti, které používáte:
uai_identity = msi_client.user_assigned_identities.get(
resource_group_name=resource_group,
resource_name=uai_name,
)
uai_identity.as_dict()
Vytvoření účtu úložiště a kontejneru
V tomto příkladu vytvořte účet úložiště objektů blob a kontejner objektů blob a potom nahrajte dříve vytvořený textový soubor do kontejneru objektů blob. Udělíte online koncovému bodu a spravované identitě přístup k tomuto účtu úložiště a kontejneru objektů blob.
Nejprve vytvořte účet úložiště.
az storage account create --name $STORAGE_ACCOUNT_NAME --location $LOCATION
Dále vytvořte kontejner objektů blob v účtu úložiště.
az storage container create --account-name $STORAGE_ACCOUNT_NAME --name $STORAGE_CONTAINER_NAME
Pak nahrajte textový soubor do kontejneru objektů blob.
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
Nejprve vytvořte účet úložiště.
az storage account create --name $STORAGE_ACCOUNT_NAME --location $LOCATION
Můžete také načíst id existujícího účtu úložiště s následujícím kódem.
storage_id=`az storage account show --name $STORAGE_ACCOUNT_NAME --query "id" -o tsv`
Dále vytvořte kontejner objektů blob v účtu úložiště.
az storage container create --account-name $STORAGE_ACCOUNT_NAME --name $STORAGE_CONTAINER_NAME
Pak nahrajte soubor v kontejneru.
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
Nejprve získejte popisovač: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
)
Pak vytvořte účet úložiště:
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()
Dále vytvořte kontejner objektů blob v účtu úložiště:
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(),
)
Načtěte klíč účtu úložiště a vytvořte popisovač kontejneru pomocí ContainerClient:
res = storage_client.storage_accounts.list_keys(
resource_group_name=resource_group,
account_name=storage_account_name,
)
keys = res.keys if hasattr(res, "keys") and not callable(res.keys) else res["keys"]
# Handle SDK compatibility where `list_keys` may return SDK models or mappings
key_entry = keys[0]
key = key_entry.value if hasattr(key_entry, "value") else key_entry["value"]
container_client = ContainerClient(
account_url=storage_account.primary_endpoints.blob,
container_name=storage_container_name,
credential=key,
)
Pak nahrajte objekt blob do kontejneru pomocí :ContainerClient
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Nejprve získejte popisovač: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
)
Pak vytvořte účet úložiště:
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()
Dále vytvořte kontejner objektů blob v účtu úložiště:
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(),
)
Načtěte klíč účtu úložiště a vytvořte popisovač kontejneru pomocí ContainerClient:
res = storage_client.storage_accounts.list_keys(
resource_group_name=resource_group,
account_name=storage_account_name,
)
keys = res.keys if hasattr(res, "keys") and not callable(res.keys) else res["keys"]
# Handle SDK compatibility where `list_keys` may return SDK models or mappings
key_entry = keys[0]
key = key_entry.value if hasattr(key_entry, "value") else key_entry["value"]
container_client = ContainerClient(
account_url=storage_account.primary_endpoints.blob,
container_name=storage_container_name,
credential=key,
)
Pak nahrajte objekt blob do kontejneru pomocí :ContainerClient
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Vytvoření online koncového bodu
Následující kód vytvoří online koncový bod bez zadání nasazení.
Upozorňující
Identita koncového bodu je neměnná. Během vytváření koncového bodu ho můžete přidružit k identitě přiřazené systémem (výchozí) nebo k identitě přiřazené uživatelem. Identitu po vytvoření koncového bodu nemůžete změnit.
Když vytvoříte online koncový bod, pro koncový bod se ve výchozím nastavení vytvoří spravovaná identita přiřazená systémem.
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-sai-create-endpoint.yml
Pomocí následujícího příkazu zkontrolujte stav koncového bodu.
az ml online-endpoint show --name $ENDPOINT_NAME
Pokud narazíte na nějaké problémy, přečtěte si téma Řešení potíží s nasazením a vyhodnocováním online koncových bodů.
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
Pomocí následujícího příkazu zkontrolujte stav koncového bodu.
az ml online-endpoint show --name $ENDPOINT_NAME
Pokud narazíte na nějaké problémy, přečtěte si téma Řešení potíží s nasazením a vyhodnocováním online koncových bodů.
Když vytvoříte online koncový bod, pro koncový bod se ve výchozím nastavení vytvoří spravovaná identita přiřazená systémem.
ml_client.online_endpoints.begin_create_or_update(endpoint).result()
Pomocí podrobností o nasazeného objektu koncového bodu zkontrolujte stav koncového bodu pomocí následujícího kódu:
endpoint = ml_client.online_endpoints.get(endpoint_name)
print(endpoint.identity.type)
print(endpoint.identity.principal_id)
Pokud narazíte na nějaké problémy, přečtěte si téma Řešení potíží s nasazením a vyhodnocováním online koncových bodů.
Následující objekt koncového bodu Pythonu:
- Přiřadí název, kterým chcete odkazovat na koncový bod proměnné
endpoint_name.
- Určuje typ autorizace, který se má použít pro přístup ke koncovému bodu
auth-mode="key".
- Definuje jeho identitu jako spravovanou
ManagedServiceIdentity identitu a určuje ji jako přiřazenou uživatelem.
Definujte a nasaďte koncový bod:
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()
Pomocí podrobností o nasazeného objektu koncového bodu zkontrolujte stav koncového bodu pomocí následujícího kódu:
endpoint = ml_client.online_endpoints.get(endpoint_name)
print(endpoint.identity.type)
print(endpoint.identity.user_assigned_identities)
Pokud narazíte na nějaké problémy, přečtěte si téma Řešení potíží s nasazením a vyhodnocováním online koncových bodů.
Udělení oprávnění k přístupu spravované identitě
Důležité
Online koncové body vyžadují oprávnění služby Azure Container Registry k vyžádání obsahu, oprávnění AcrPull k registru kontejneru a oprávnění čtenáře dat objektů blob služby Storage k výchozímu úložišti dat pracovního prostoru.
Můžete povolit online koncovému bodu přístup k vašemu úložišti prostřednictvím spravované identity přiřazené systémem nebo udělit oprávnění spravované identitě přiřazené uživatelem pro přístup k účtu úložiště vytvořenému v předchozí části.
Načtěte spravovanou identitu přiřazenou systémem, která byla vytvořena pro váš koncový bod.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Odtud můžete udělit spravované identitě přiřazené systémem oprávnění pro přístup k úložišti.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Načtěte ID klienta spravované identity přiřazené uživatelem.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Načtěte ID spravované identity přiřazené uživatelem.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Získejte registr kontejneru přidružený k pracovnímu prostoru.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Načtěte výchozí úložiště pracovního prostoru.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Udělte oprávnění účtu úložiště spravované identitě přiřazené uživatelem.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Udělení oprávnění registru kontejneru spravované identitě přiřazené uživatelem
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Udělte oprávnění výchozího úložiště pracovního prostoru spravované identitě přiřazené uživatelem.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Nejprve vytvořte AuthorizationManagementClient definici rolí seznamu:
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.models import RoleDefinition
import uuid
role_definition_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2018-01-01-preview",
)
Teď inicializujte jedno, aby bylo přiřazení rolí:
from azure.mgmt.authorization.models import (
RoleAssignment,
RoleAssignmentCreateParameters,
)
role_assignment_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2020-10-01-preview",
)
Pak získejte ID objektu zabezpečení spravované identity přiřazené systémem:
endpoint = ml_client.online_endpoints.get(endpoint_name)
system_principal_id = endpoint.identity.principal_id
Dále přiřaďte ke koncovému bodu roli Čtenář dat objektů blob služby Storage. Definice role se načte podle názvu a předá spolu s ID objektu zabezpečení koncového bodu. Role se použije v oboru účtu úložiště vytvořeného výše a umožní koncovému bodu číst soubor.
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
),
)
Nejprve vytvořte AuthorizationManagementClient definici rolí seznamu:
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.models import RoleDefinition
import uuid
role_definition_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2018-01-01-preview",
)
Teď inicializujte jedno, aby bylo přiřazení rolí:
from azure.mgmt.authorization.models import (
RoleAssignment,
RoleAssignmentCreateParameters,
)
role_assignment_client = AuthorizationManagementClient(
credential=credential,
subscription_id=subscription_id,
api_version="2020-10-01-preview",
)
Pak získejte ID objektu zabezpečení a ID klienta spravované identity přiřazené uživatelem. K přiřazení rolí potřebujete pouze ID objektu zabezpečení. ID klienta však použijete k vyplnění UAI_CLIENT_ID zástupné proměnné prostředí před vytvořením nasazení.
uai_identity = msi_client.user_assigned_identities.get(
resource_group_name=resource_group, resource_name=uai_name
)
_uai = uai_identity.as_dict()
_uai = _uai.get("properties", _uai)
uai_principal_id = _uai.get("principalId") or _uai.get("principal_id")
uai_client_id = _uai.get("clientId") or _uai.get("client_id")
Dále přiřaďte ke koncovému bodu roli Čtenář dat objektů blob služby Storage. Definice role se načte podle názvu a předá spolu s ID objektu zabezpečení koncového bodu. Role se použije v oboru účtu úložiště vytvořeného výše, aby koncový bod mohl soubor číst.
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",
),
)
Pro další dvě oprávnění potřebujete pracovní prostor a objekty registru kontejneru:
workspace = ml_client.workspaces.get(workspace_name)
container_registry = workspace.container_registry
Dále přiřaďte roli AcrPull identitě přiřazené uživatelem. Tato role umožňuje načíst image ze služby Azure Container Registry. Obor se použije na úrovni registru kontejneru přidruženého k pracovnímu prostoru.
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",
),
)
Nakonec přiřaďte roli Čtenář dat objektů blob služby Storage ke koncovému bodu v oboru účtu úložiště pracovního prostoru. Toto přiřazení role umožňuje koncovému bodu číst objekty blob v účtu úložiště pracovního prostoru i nově vytvořený účet úložiště.
Role má stejný název a možnosti jako první přiřazená role výše, ale používá se v jiném oboru a má jiné 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",
),
)
Bodovací skript pro přístup k prostředku Azure
V následujícím skriptu se dozvíte, jak používat token identity pro přístup k prostředkům Azure, v tomto scénáři účet úložiště vytvořený v předchozích částech.
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()
Vytvoření nasazení s konfigurací
Vytvořte nasazení, které je přidružené k online koncovému bodu.
Přečtěte si další informace o nasazení do online koncových bodů.
Upozorňující
Toto nasazení může trvat přibližně 8 až 14 minut v závislosti na tom, jestli se podkladové prostředí nebo image sestavují poprvé. Další nasazení používající stejné prostředí budou rychlejší.
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
Poznámka:
Hodnota argumentu --name může přepsat name klíč uvnitř souboru YAML.
Zkontrolujte stav nasazení.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Pokud chcete výše uvedený dotaz upřesnit tak, aby vracel jenom konkrétní data, přečtěte si téma Dotazování výstupu příkazu Azure CLI.
Poznámka:
Inicializační metoda ve skriptu bodování načte soubor z vašeho účtu úložiště pomocí tokenu spravované identity přiřazeného systémem.
Pokud chcete zkontrolovat výstup inicializační metody, projděte si protokol nasazení s následujícím kódem.
# 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
Poznámka:
Hodnota argumentu --name může přepsat name klíč uvnitř souboru YAML.
Po spuštění příkazu můžete zkontrolovat stav nasazení.
az ml online-endpoint show --name $ENDPOINT_NAME
Pokud chcete výše uvedený dotaz upřesnit tak, aby vracel jenom konkrétní data, přečtěte si téma Dotazování výstupu příkazu Azure CLI.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Poznámka:
Inicializační metoda ve skriptu bodování načte soubor z vašeho účtu úložiště pomocí tokenu spravované identity přiřazeného uživatelem.
Pokud chcete zkontrolovat výstup inicializační metody, projděte si protokol nasazení s následujícím kódem.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Nejprve vytvořte nasazení:
ml_client.online_deployments.begin_create_or_update(deployment).result()
Po dokončení nasazení zkontrolujte jeho stav a potvrďte jeho podrobnosti o identitě:
deployment = ml_client.online_deployments.get(
endpoint_name=endpoint_name, name=deployment.name
)
print(deployment)
Poznámka:
Inicializační metoda ve skriptu bodování načte soubor z vašeho účtu úložiště pomocí tokenu spravované identity přiřazeného systémem.
Pokud chcete zkontrolovat výstup inicializační metody, projděte si protokol nasazení s následujícím kódem.
ml_client.online_deployments.get_logs(deployment.name, deployment.endpoint_name, 1000)
Po potvrzení nasazení nastavte provoz na 100 %:
endpoint.traffic = {str(deployment.name): 100}
ml_client.begin_create_or_update(endpoint).result()
Před nasazením UAI_CLIENT_ID aktualizujte zástupný symbol proměnné prostředí.
deployment.environment_variables["UAI_CLIENT_ID"] = uai_client_id
Teď vytvořte nasazení:
ml_client.online_deployments.begin_create_or_update(deployment).result()
Po dokončení nasazení zkontrolujte jeho stav a potvrďte jeho podrobnosti o identitě:
deployment = ml_client.online_deployments.get(
endpoint_name=endpoint_name, name=deployment.name
)
print(deployment)
Poznámka:
Inicializační metoda ve skriptu bodování načte soubor z vašeho účtu úložiště pomocí tokenu spravované identity přiřazeného uživatelem.
Pokud chcete zkontrolovat výstup inicializační metody, projděte si protokol nasazení s následujícím kódem.
ml_client.online_deployments.get_logs(deployment.name, deployment.endpoint_name, 1000)
Po potvrzení nasazení nastavte provoz na 100 %:
endpoint.traffic = {str(deployment.name): 100}
ml_client.begin_create_or_update(endpoint).result()
Po dokončení nasazení se model, prostředí a koncový bod zaregistrují do vašeho pracovního prostoru Azure Machine Learning.
Testování koncového bodu
Po nasazení online koncového bodu otestujte a potvrďte její operaci pomocí požadavku. Podrobnosti odvozování se liší od modelu po model. V tomto průvodci vypadají parametry dotazu JSON takto:
{"data": [
[1,2,3,4,5,6,7,8,9,10],
[10,9,8,7,6,5,4,3,2,1]
]}
Pokud chcete volat koncový bod, spusťte:
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)
Odstranění koncového bodu a účtu úložiště
Pokud nechcete dál používat nasazený online koncový bod a úložiště, odstraňte je, abyste snížili náklady. Když koncový bod odstraníte, odstraní se také všechna jeho přidružená nasazení.
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
Odstraňte koncový bod:
ml_client.online_endpoints.begin_delete(endpoint_name)
Odstraňte účet úložiště:
storage_client.storage_accounts.delete(
resource_group_name=resource_group, account_name=storage_account_name
)
Odstraňte koncový bod:
ml_client.online_endpoints.begin_delete(endpoint_name)
Odstraňte účet úložiště:
storage_client.storage_accounts.delete(
resource_group_name=resource_group, account_name=storage_account_name
)
Odstraňte spravovanou identitu přiřazenou uživatelem:
msi_client.user_assigned_identities.delete(
resource_group_name=resource_group, resource_name=uai_name
)
Související obsah