Dowiedz się, jak uzyskać dostęp do zasobów platformy Azure ze skryptu oceniania za pomocą punktu końcowego online i tożsamości zarządzanej przypisanej przez system lub tożsamości zarządzanej przypisanej przez użytkownika.
Zarówno zarządzane punkty końcowe, jak i punkty końcowe kubernetes umożliwiają usłudze Azure Machine Learning zarządzanie obciążeniem aprowizowaniem zasobu obliczeniowego i wdrażaniem modelu uczenia maszynowego. Zazwyczaj model musi uzyskiwać dostęp do zasobów platformy Azure, takich jak usługa Azure Container Registry lub magazyn obiektów blob na potrzeby wnioskowania; przy użyciu tożsamości zarządzanej można uzyskać dostęp do tych zasobów bez konieczności zarządzania poświadczeniami w kodzie. Dowiedz się więcej o tożsamościach zarządzanych.
W tym przewodniku założono, że nie masz tożsamości zarządzanej, konta magazynu ani punktu końcowego online. Jeśli masz już te składniki, przejdź do sekcji Przyznawanie uprawnień dostępu do tożsamości zarządzanej.
Aby korzystać z usługi Azure Machine Learning, musisz mieć subskrypcję platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning już dziś.
Grupa zasobów platformy Azure, w której (lub używana jednostka usługi) musi mieć dostęp administratora dostępu użytkowników i współautora . Istnieje taka grupa zasobów, jeśli skonfigurowano rozszerzenie uczenia maszynowego zgodnie z poprzednim artykułem.
Obszar roboczy usługi Azure Machine Learning. Masz już obszar roboczy, jeśli skonfigurowano rozszerzenie uczenia maszynowego zgodnie z poprzednim artykułem.
Wytrenowany model uczenia maszynowego jest gotowy do oceniania i wdrażania. Jeśli korzystasz z przykładu, zostanie udostępniony model.
Jeśli nie ustawiono jeszcze ustawień domyślnych dla interfejsu wiersza polecenia platformy Azure, zapisz ustawienia domyślne. Aby uniknąć wielokrotnego przekazywania wartości dla subskrypcji, obszaru roboczego i grupy zasobów, uruchom następujący kod:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Aby wykonać czynności opisane w przykładzie, sklonuj repozytorium przykładów, a następnie zmień katalog na interfejs wiersza polecenia.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Aby korzystać z usługi Azure Machine Learning, musisz mieć subskrypcję platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning już dziś.
Grupa zasobów platformy Azure, w której (lub używana jednostka usługi) musi mieć dostęp administratora dostępu użytkowników i współautora . Istnieje taka grupa zasobów, jeśli skonfigurowano rozszerzenie uczenia maszynowego zgodnie z poprzednim artykułem.
Obszar roboczy usługi Azure Machine Learning. Jeśli skonfigurowano rozszerzenie uczenia maszynowego zgodnie z powyższym artykułem, masz obszar roboczy.
Wytrenowany model uczenia maszynowego jest gotowy do oceniania i wdrażania. Jeśli korzystasz z przykładu, zostanie udostępniony model.
Jeśli nie ustawiono jeszcze ustawień domyślnych dla interfejsu wiersza polecenia platformy Azure, zapisz ustawienia domyślne. Aby uniknąć wielokrotnego przekazywania wartości dla subskrypcji, obszaru roboczego i grupy zasobów, uruchom następujący kod:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Aby wykonać czynności opisane w przykładzie, sklonuj repozytorium przykładów, a następnie zmień katalog na interfejs wiersza polecenia.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Aby korzystać z usługi Azure Machine Learning, musisz mieć subskrypcję platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning już dziś.
Grupa zasobów platformy Azure, w której (lub używana jednostka usługi) musi mieć dostęp administratora dostępu użytkowników i współautora . Istnieje taka grupa zasobów, jeśli skonfigurowano rozszerzenie uczenia maszynowego zgodnie z poprzednim artykułem.
Obszar roboczy usługi Azure Machine Learning. Masz już obszar roboczy, jeśli skonfigurowano rozszerzenie uczenia maszynowego zgodnie z poprzednim artykułem.
Wytrenowany model uczenia maszynowego jest gotowy do oceniania i wdrażania. Jeśli korzystasz z przykładu, zostanie udostępniony model.
Sklonuj repozytorium przykładów, a następnie zmień katalog.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Aby kontynuować pracę z tym notesem, uzyskaj dostęp do przykładowego notesu towarzyszącego w katalogu sdk/endpoints/online/managed/managed-identities.
W tym przykładzie są wymagane inne pakiety języka Python:
Klient zarządzania usługą Microsoft Azure Storage
Klient zarządzania autoryzacją platformy Microsoft Azure
Aby korzystać z usługi Azure Machine Learning, musisz mieć subskrypcję platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning już dziś.
Uprawnienia do tworzenia ról dla subskrypcji lub zasobów platformy Azure, do których uzyskuje dostęp tożsamość przypisana przez użytkownika.
Grupa zasobów platformy Azure, w której (lub używana jednostka usługi) musi mieć dostęp administratora dostępu użytkowników i współautora . Istnieje taka grupa zasobów, jeśli skonfigurowano rozszerzenie uczenia maszynowego zgodnie z poprzednim artykułem.
Obszar roboczy usługi Azure Machine Learning. Masz już obszar roboczy, jeśli skonfigurowano rozszerzenie uczenia maszynowego zgodnie z poprzednim artykułem.
Wytrenowany model uczenia maszynowego jest gotowy do oceniania i wdrażania. Jeśli korzystasz z przykładu, zostanie udostępniony model.
Sklonuj repozytorium przykładów.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Aby kontynuować pracę z tym notesem, uzyskaj dostęp do przykładowego notesu towarzyszącego w katalogu sdk/endpoints/online/managed/managed-identities.
W tym przykładzie są wymagane inne pakiety języka Python:
Klient zarządzania tożsamościami usługi zarządzanej platformy Microsoft Azure
Klient usługi Microsoft Azure Storage
Klient zarządzania autoryzacją platformy Microsoft Azure
Tożsamość punktu końcowego jest niezmienna. Podczas tworzenia punktu końcowego można skojarzyć ją z tożsamością przypisaną przez system (domyślną) lub tożsamością przypisaną przez użytkownika. Nie można zmienić tożsamości po utworzeniu punktu końcowego.
Jeśli magazyn ARC i blob są skonfigurowane jako prywatne, oznacza to, że za siecią wirtualną dostęp z punktu końcowego Kubernetes powinien być za pośrednictwem łącza prywatnego niezależnie od tego, czy obszar roboczy jest publiczny, czy prywatny. Więcej informacji na temat ustawienia łącza prywatnego można znaleźć w temacie How to secure workspace vnet (Jak zabezpieczyć sieć wirtualną obszaru roboczego).
Konfigurowanie zmiennych dla wdrożenia
Skonfiguruj nazwy zmiennych dla obszaru roboczego, lokalizacji obszaru roboczego i punktu końcowego, który chcesz utworzyć do użycia z wdrożeniem.
Następnie określ, co chcesz nazwać kontem magazynu obiektów blob, kontenerem obiektów blob i plikiem. Te nazwy zmiennych są zdefiniowane w tym miejscu i są określane w az storage account create poleceniach i az storage container create w następnej sekcji.
Poniższy kod eksportuje te wartości jako zmienne środowiskowe:
Po wyeksportowaniu tych zmiennych utwórz lokalnie plik tekstowy. Po wdrożeniu punktu końcowego skrypt oceniania uzyskuje dostęp do tego pliku tekstowego przy użyciu przypisanej przez system tożsamości zarządzanej wygenerowanej podczas tworzenia punktu końcowego.
Wybierz nazwę punktu końcowego, obszaru roboczego i lokalizacji obszaru roboczego, a następnie wyeksportuj tę wartość jako zmienną środowiskową:
Następnie określ, co chcesz nazwać kontem magazynu obiektów blob, kontenerem obiektów blob i plikiem. Te nazwy zmiennych są zdefiniowane w tym miejscu i są określane w az storage account create poleceniach i az storage container create w następnej sekcji.
Po wyeksportowaniu tych zmiennych utwórz lokalnie plik tekstowy. Po wdrożeniu punktu końcowego skrypt oceniania uzyskuje dostęp do tego pliku tekstowego przy użyciu tożsamości zarządzanej przypisanej przez użytkownika używanej w punkcie końcowym.
Zdecyduj o nazwie tożsamości użytkownika i wyeksportuj tę wartość jako zmienną środowiskową:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Przypisz wartości dla zmiennych związanych z obszarem roboczym i wdrożeniem:
Następnie określ, co chcesz nazwać kontem magazynu obiektów blob, kontenerem obiektów blob i plikiem. Te nazwy zmiennych są zdefiniowane w tym miejscu i są określane w ramach konta magazynu i kodu tworzenia kontenera za pomocą elementów StorageManagementClient i ContainerClient.
Po przypisaniu tych zmiennych utwórz plik tekstowy lokalnie. Po wdrożeniu punktu końcowego skrypt oceniania uzyskuje dostęp do tego pliku tekstowego przy użyciu przypisanej przez system tożsamości zarządzanej wygenerowanej podczas tworzenia punktu końcowego.
Teraz pobierz dojście do obszaru roboczego i pobierz jego lokalizację:
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
Użyj tej wartości, aby utworzyć konto magazynu.
Przypisz wartości dla zmiennych związanych z obszarem roboczym i wdrożeniem:
Następnie określ, co chcesz nazwać kontem magazynu obiektów blob, kontenerem obiektów blob i plikiem. Te nazwy zmiennych są zdefiniowane w tym miejscu i są określane w ramach konta magazynu i kodu tworzenia kontenera za pomocą elementów StorageManagementClient i ContainerClient.
Po przypisaniu tych zmiennych utwórz plik tekstowy lokalnie. Po wdrożeniu punktu końcowego skrypt oceniania uzyskuje dostęp do tego pliku tekstowego przy użyciu tożsamości zarządzanej przypisanej przez użytkownika wygenerowanej podczas tworzenia punktu końcowego.
Zdecyduj o nazwie swojej tożsamości użytkownika:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Teraz pobierz dojście do obszaru roboczego i pobierz jego lokalizację:
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
Aby wdrożyć punkt końcowy online przy użyciu interfejsu wiersza polecenia, należy zdefiniować konfigurację w pliku YAML. Aby uzyskać więcej informacji na temat schematu YAML, zobacz dokument referencyjny YAML dotyczący punktu końcowego online.
Pliki YAML w poniższych przykładach służą do tworzenia punktów końcowych online.
Poniższy przykład YAML znajduje się w punktach końcowych/online/zarządzanych/zarządzanych-tożsamościach/1-sai-create-endpoint. Plik,
Definiuje nazwę, za pomocą której chcesz odwoływać się do punktu końcowego, my-sai-endpoint.
Określa typ autoryzacji, który ma być używany do uzyskiwania dostępu do punktu końcowego, auth-mode: key.
Aby wdrożyć punkt końcowy online przy użyciu interfejsu wiersza polecenia, należy zdefiniować konfigurację w pliku YAML. Aby uzyskać więcej informacji na temat schematu YAML, zobacz dokument referencyjny YAML dotyczący punktu końcowego online.
Pliki YAML w poniższych przykładach służą do tworzenia punktów końcowych online.
Poniższy przykład YAML znajduje się w lokalizacji endpoints/online/managed/managed-identities/1-uai-create-endpoint. Plik,
Definiuje nazwę, za pomocą której chcesz odwoływać się do punktu końcowego, my-uai-endpoint.
Określa typ autoryzacji, który ma być używany do uzyskiwania dostępu do punktu końcowego, auth-mode: key.
Wskazuje typ tożsamości do użycia, type: user_assigned
Aby wdrożyć punkt końcowy online przy użyciu zestawu SDK języka Python (wersja 2), można użyć obiektów do zdefiniowania następującej konfiguracji. Alternatywnie można załadować pliki YAML przy użyciu .load metody .
Następujący obiekt punktu końcowego języka Python:
Przypisuje nazwę, za pomocą której chcesz odwoływać się do punktu końcowego do zmiennej endpoint_name.
Określa typ autoryzacji, który ma być używany do uzyskiwania dostępu do punktu końcowego auth-mode="key".
Aby wdrożyć punkt końcowy online przy użyciu zestawu SDK języka Python (wersja 2), można użyć obiektów do zdefiniowania następującej konfiguracji. Alternatywnie można załadować pliki YAML przy użyciu .load metody .
W przypadku tożsamości przypisanej przez użytkownika należy zdefiniować konfigurację punktu końcowego po utworzeniu tożsamości zarządzanej przypisanej przez użytkownika.
Ten obiekt wdrożenia:
Określa, że typ wdrożenia, który chcesz utworzyć, jest ManagedOnlineDeployment za pośrednictwem klasy.
Wskazuje, że punkt końcowy ma skojarzone wdrożenie o nazwie blue.
Konfiguruje szczegóły wdrożenia, takie jak i nameinstance_count
Definiuje więcej obiektów wbudowanych i kojarzy je z wdrożeniem dla , ModelCodeConfigurationi Environment.
Obejmuje zmienne środowiskowe wymagane do uzyskania dostępu do magazynu przez przypisanego przez użytkownika tożsamości zarządzanej.
Dodaje zmienną środowiskową symbolu zastępczego dla UAI_CLIENT_IDelementu , która jest dodawana po utworzeniu jednej i przed wdrożeniem tej konfiguracji.
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",
},
)
Tworzenie tożsamości zarządzanej
Aby uzyskać dostęp do zasobów platformy Azure, utwórz tożsamość zarządzaną przypisaną przez system lub przypisaną przez użytkownika dla punktu końcowego online.
Podczas tworzenia punktu końcowego online tożsamość zarządzana przypisana przez system jest automatycznie generowana, więc nie trzeba tworzyć oddzielnej tożsamości.
Aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika, użyj następującego polecenia:
az identity create --name $UAI_NAME
Podczas tworzenia punktu końcowego online tożsamość zarządzana przypisana przez system jest automatycznie generowana, więc nie trzeba tworzyć oddzielnej tożsamości.
Aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika, najpierw uzyskaj dojście do elementu 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,
)
W tym przykładzie utwórz konto magazynu obiektów blob i kontener obiektów blob, a następnie przekaż wcześniej utworzony plik tekstowy do kontenera obiektów blob. Dostęp do tego konta magazynu i kontenera obiektów blob zapewnia punkt końcowy online i tożsamość zarządzaną.
Następnie przekaż obiekt blob do kontenera za pomocą polecenia ContainerClient:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Tworzenie punktu końcowego online
Poniższy kod tworzy punkt końcowy online bez określania wdrożenia.
Ostrzeżenie
Tożsamość punktu końcowego jest niezmienna. Podczas tworzenia punktu końcowego można skojarzyć ją z tożsamością przypisaną przez system (domyślną) lub tożsamością przypisaną przez użytkownika. Nie można zmienić tożsamości po utworzeniu punktu końcowego.
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
Sprawdź stan punktu końcowego, wykonując następujące czynności.
Przyznawanie uprawnień dostępu do tożsamości zarządzanej
Ważne
Punkty końcowe online wymagają uprawnienia ściągnięcia usługi Azure Container Registry, uprawnienia AcrPull do rejestru kontenerów i czytelnika danych obiektu blob usługi Storage do domyślnego magazynu danych obszaru roboczego.
Możesz zezwolić na uprawnienie punktu końcowego online w celu uzyskania dostępu do magazynu za pośrednictwem przypisanej przez system tożsamości zarządzanej lub udzielenia uprawnień do tożsamości zarządzanej przypisanej przez użytkownika w celu uzyskania dostępu do konta magazynu utworzonego w poprzedniej sekcji.
Pobierz tożsamość zarządzaną przypisaną przez system, która została utworzona dla punktu końcowego.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
W tym miejscu możesz udzielić przypisanej przez system tożsamości zarządzanej uprawnień dostępu do magazynu.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Pobierz identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Pobierz identyfikator tożsamości zarządzanej przypisanej przez użytkownika.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Pobierz rejestr kontenerów skojarzony z obszarem roboczym.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Pobierz domyślny magazyn obszaru roboczego.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Nadaj uprawnienia do konta magazynu tożsamości zarządzanej przypisanej przez użytkownika.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Nadaj uprawnienia rejestru kontenerów tożsamości zarządzanej przypisanej przez użytkownika.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Nadaj uprawnienia domyślnemu magazynowi obszaru roboczego tożsamości zarządzanej przypisanej przez użytkownika.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Najpierw utwórz jako listę AuthorizationManagementClient definicji ró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",
)
Teraz zainicjuj jedno, aby utworzyć przypisania ról:
Następnie przypisz rolę Czytelnik danych obiektu blob usługi Storage do punktu końcowego. Definicja roli jest pobierana według nazwy i przekazywana wraz z identyfikatorem głównym punktu końcowego. Rola jest stosowana w zakresie utworzonego powyżej konta magazynu i umożliwia punktowi końcowemu odczytywanie pliku.
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
),
)
Najpierw utwórz jako listę AuthorizationManagementClient definicji ró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",
)
Teraz zainicjuj jedno, aby utworzyć przypisania ról:
Następnie pobierz identyfikator podmiotu zabezpieczeń i identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika. Aby przypisać role, wystarczy tylko identyfikator podmiotu zabezpieczeń. Jednak identyfikator klienta służy do wypełniania zmiennej środowiskowej symbolu zastępczego UAI_CLIENT_ID przed utworzeniem wdrożenia.
Następnie przypisz rolę Czytelnik danych obiektu blob usługi Storage do punktu końcowego. Definicja roli jest pobierana według nazwy i przekazywana wraz z identyfikatorem podmiotu końcowego. Rola jest stosowana w zakresie utworzonego powyżej konta magazynu, aby umożliwić punktowi końcowemu odczytywanie pliku.
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",
),
)
W przypadku dwóch następnych uprawnień potrzebne są obiekty obszaru roboczego i rejestru kontenerów:
Następnie przypisz rolę AcrPull do tożsamości przypisanej przez użytkownika. Ta rola umożliwia ściąganie obrazów z usługi Azure Container Registry. Zakres jest stosowany na poziomie rejestru kontenerów skojarzonego z obszarem roboczym.
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",
),
)
Na koniec przypisz rolę Czytelnik danych obiektu blob usługi Storage do punktu końcowego w zakresie konta magazynu obszaru roboczego. To przypisanie roli umożliwia punktowi końcowemu odczytywanie obiektów blob na koncie magazynu obszaru roboczego oraz nowo utworzone konto magazynu.
Rola ma taką samą nazwę i możliwości jak pierwsza przypisana powyżej rola, jednak jest stosowana w innym zakresie i ma inny identyfikator.
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",
),
)
Skrypt oceniania w celu uzyskania dostępu do zasobu platformy Azure
Zapoznaj się z poniższym skryptem, aby dowiedzieć się, jak używać tokenu tożsamości do uzyskiwania dostępu do zasobów platformy Azure. W tym scenariuszu konto magazynu utworzone w poprzednich sekcjach.
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()
To wdrożenie może potrwać około 8–14 minut, w zależności od tego, czy bazowe środowisko/obraz jest kompilowany po raz pierwszy. Kolejne wdrożenia korzystające z tego samego środowiska będą szybsze.
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
Uwaga
Wartość argumentu --name może zastąpić name klucz wewnątrz pliku YAML.
Sprawdź stan wdrożenia.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Aby uściślić powyższe zapytanie w celu zwrócenia tylko określonych danych, zobacz Zapytanie o dane wyjściowe polecenia interfejsu wiersza polecenia platformy Azure.
Uwaga
Metoda init w skrypcie oceniania odczytuje plik z konta magazynu przy użyciu przypisanego przez system tokenu tożsamości zarządzanej.
Aby sprawdzić dane wyjściowe metody init, zobacz dziennik wdrażania z następującym kodem.
# 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
Uwaga
Wartość argumentu --name może zastąpić name klucz wewnątrz pliku YAML.
Po wykonaniu polecenia można sprawdzić stan wdrożenia.
az ml online-endpoint show --name $ENDPOINT_NAME
Aby uściślić powyższe zapytanie w celu zwrócenia tylko określonych danych, zobacz Zapytanie o dane wyjściowe polecenia interfejsu wiersza polecenia platformy Azure.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Uwaga
Metoda init w skrypcie oceniania odczytuje plik z konta magazynu przy użyciu tokenu tożsamości zarządzanej przypisanej przez użytkownika.
Aby sprawdzić dane wyjściowe metody init, zobacz dziennik wdrażania z następującym kodem.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Po zakończeniu wdrażania model, środowisko i punkt końcowy są rejestrowane w obszarze roboczym usługi Azure Machine Learning.
Testowanie punktu końcowego
Po wdrożeniu punktu końcowego online przetestuj i potwierdź jego operację za pomocą żądania. Szczegóły wnioskowania różnią się w zależności od modelu do modelu. W tym przewodniku parametry zapytania JSON wyglądają następująco:
Jeśli nie planujesz nadal korzystać z wdrożonego punktu końcowego i magazynu online, usuń je, aby zmniejszyć koszty. Usunięcie punktu końcowego spowoduje również usunięcie wszystkich skojarzonych z nim wdrożeń.
Aby uzyskać informacje o ograniczeniach zarządzanych punktów końcowych online i punktów końcowych online platformy Kubernetes, zobacz limity punktów końcowych online