Meer informatie over het openen van Azure-resources vanuit uw scorescript met een online-eindpunt en een door het systeem toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit.
Met zowel beheerde eindpunten als Kubernetes-eindpunten kan Azure Machine Learning de belasting van het inrichten van uw rekenresource en het implementeren van uw machine learning-model beheren. Normaal gesproken moet uw model toegang hebben tot Azure-resources, zoals Azure Container Registry of uw blobopslag voor deductie; met een beheerde identiteit hebt u toegang tot deze resources zonder referenties in uw code te hoeven beheren. Meer informatie over beheerde identiteiten.
In deze handleiding wordt ervan uitgegaan dat u geen beheerde identiteit, een opslagaccount of een online-eindpunt hebt. Als u deze onderdelen al hebt, gaat u verder met de sectie Toegang verlenen tot de sectie Beheerde identiteit .
Als u Azure Machine Learning wilt gebruiken, moet u een Azure-abonnement hebben. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint. Probeer vandaag nog de gratis of betaalde versie van Azure Machine Learning.
Installeer en configureer de Azure CLI- en ML-extensie (v2). Zie 2.0 CLI installeren, instellen en gebruiken voor meer informatie.
Een Azure-resourcegroep waarin u (of de service-principal die u gebruikt) toegangsbeheerder en inzender moet hebben. U hebt een dergelijke resourcegroep als u de ML-extensie hebt geconfigureerd volgens het voorgaande artikel.
Een Azure Machine Learning-werkruimte. U hebt al een werkruimte als u de ML-extensie hebt geconfigureerd volgens het voorgaande artikel.
Een getraind machine learning-model dat klaar is voor scoren en implementatie. Als u het voorbeeld volgt, wordt er een model opgegeven.
Als u de standaardinstellingen voor de Azure CLI nog niet hebt ingesteld, slaat u de standaardinstellingen op. Voer deze code uit om te voorkomen dat de waarden voor uw abonnement, werkruimte en resourcegroep meerdere keren worden doorgegeven:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Als u het voorbeeld wilt volgen, kloont u de opslagplaats met voorbeelden en wijzigt u vervolgens de map in cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Als u Azure Machine Learning wilt gebruiken, moet u een Azure-abonnement hebben. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint. Probeer vandaag nog de gratis of betaalde versie van Azure Machine Learning.
Installeer en configureer de Azure CLI- en ML-extensie (v2). Zie 2.0 CLI installeren, instellen en gebruiken voor meer informatie.
Een Azure-resourcegroep waarin u (of de service-principal die u gebruikt) toegangsbeheerder en inzender moet hebben. U hebt een dergelijke resourcegroep als u de ML-extensie hebt geconfigureerd volgens het voorgaande artikel.
Een Azure Machine Learning-werkruimte. U hebt een werkruimte als u de ML-extensie hebt geconfigureerd volgens het bovenstaande artikel.
Een getraind machine learning-model dat klaar is voor scoren en implementatie. Als u het voorbeeld volgt, wordt er een model opgegeven.
Als u de standaardinstellingen voor de Azure CLI nog niet hebt ingesteld, slaat u de standaardinstellingen op. Voer deze code uit om te voorkomen dat de waarden voor uw abonnement, werkruimte en resourcegroep meerdere keren worden doorgegeven:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Als u het voorbeeld wilt volgen, kloont u de opslagplaats met voorbeelden en wijzigt u vervolgens de map in cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Als u Azure Machine Learning wilt gebruiken, moet u een Azure-abonnement hebben. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint. Probeer vandaag nog de gratis of betaalde versie van Azure Machine Learning.
Installeer en configureer de Azure Machine Learning Python SDK (v2). Zie SDK (v2) installeren en instellen voor meer informatie.
Een Azure-resourcegroep waarin u (of de service-principal die u gebruikt) toegangsbeheerder en inzender moet hebben. U hebt een dergelijke resourcegroep als u de ML-extensie hebt geconfigureerd volgens het voorgaande artikel.
Een Azure Machine Learning-werkruimte. U hebt al een werkruimte als u de ML-extensie hebt geconfigureerd volgens het voorgaande artikel.
Een getraind machine learning-model dat klaar is voor scoren en implementatie. Als u het voorbeeld volgt, wordt er een model opgegeven.
Kloon de opslagplaats met voorbeelden en wijzig vervolgens de map.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Als u dit notebook wilt volgen, opent u het bijbehorende voorbeeldnotitieblok in de map sdk/endpoints/online/managed/managed/managed-identities .
Voor dit voorbeeld zijn andere Python-pakketten vereist:
Als u Azure Machine Learning wilt gebruiken, moet u een Azure-abonnement hebben. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint. Probeer vandaag nog de gratis of betaalde versie van Azure Machine Learning.
Machtigingen voor het maken van rollen voor uw abonnement of de Azure-resources die worden geopend door de door de gebruiker toegewezen identiteit.
Installeer en configureer de Azure Machine Learning Python SDK (v2). Zie SDK (v2) installeren en instellen voor meer informatie.
Een Azure-resourcegroep waarin u (of de service-principal die u gebruikt) toegangsbeheerder en inzender moet hebben. U hebt een dergelijke resourcegroep als u de ML-extensie hebt geconfigureerd volgens het voorgaande artikel.
Een Azure Machine Learning-werkruimte. U hebt al een werkruimte als u de ML-extensie hebt geconfigureerd volgens het voorgaande artikel.
Een getraind machine learning-model dat klaar is voor scoren en implementatie. Als u het voorbeeld volgt, wordt er een model opgegeven.
Kloon de opslagplaats met voorbeelden.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Als u dit notebook wilt volgen, opent u het bijbehorende voorbeeldnotitieblok in de map sdk/endpoints/online/managed/managed/managed-identities .
Voor dit voorbeeld zijn andere Python-pakketten vereist:
De identiteit voor een eindpunt kan onveranderbaar zijn. Tijdens het maken van een eindpunt kunt u het koppelen aan een door het systeem toegewezen identiteit (standaard) of een door de gebruiker toegewezen identiteit. U kunt de identiteit niet wijzigen nadat het eindpunt is gemaakt.
Als uw ARC- en blobopslag zijn geconfigureerd als privé, dat wil gezegd achter een virtueel netwerk, moet toegang vanaf het Kubernetes-eindpunt via de privékoppeling zijn, ongeacht of uw werkruimte openbaar of privé is. Zie Het vnet van de werkruimte beveiligen voor meer informatie over de instelling private link.
Variabelen configureren voor implementatie
Configureer de variabelenamen voor de werkruimte, werkruimtelocatie en het eindpunt dat u wilt maken voor gebruik met uw implementatie.
Geef vervolgens op wat u de naam van uw blob-opslagaccount, blobcontainer en bestand wilt geven. Deze namen van variabelen worden hier gedefinieerd en worden genoemd in az storage account create en az storage container create opdrachten in de volgende sectie.
Met de volgende code worden deze waarden geëxporteerd als omgevingsvariabelen:
Nadat deze variabelen zijn geëxporteerd, maakt u lokaal een tekstbestand. Wanneer het eindpunt wordt geïmplementeerd, opent het scorescript dit tekstbestand met behulp van de door het systeem toegewezen beheerde identiteit die wordt gegenereerd bij het maken van het eindpunt.
Bepaal de naam van uw eindpunt, werkruimte en werkruimtelocatie en exporteer die waarde vervolgens als een omgevingsvariabele:
Geef vervolgens op wat u de naam van uw blob-opslagaccount, blobcontainer en bestand wilt geven. Deze namen van variabelen worden hier gedefinieerd en worden genoemd in az storage account create en az storage container create opdrachten in de volgende sectie.
Nadat deze variabelen zijn geëxporteerd, maakt u lokaal een tekstbestand. Wanneer het eindpunt is geïmplementeerd, opent het scorescript dit tekstbestand met behulp van de door de gebruiker toegewezen beheerde identiteit die in het eindpunt wordt gebruikt.
Bepaal de naam van uw gebruikersnaam en exporteer deze waarde als een omgevingsvariabele:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Waarden toewijzen voor de werkruimte- en implementatiegerelateerde variabelen:
Geef vervolgens op wat u de naam van uw blob-opslagaccount, blobcontainer en bestand wilt geven. Deze namen van variabelen worden hier gedefinieerd en worden aangeduid in het opslagaccount en de code voor het maken van containers door de StorageManagementClient en ContainerClient.
Nadat deze variabelen zijn toegewezen, maakt u lokaal een tekstbestand. Wanneer het eindpunt wordt geïmplementeerd, opent het scorescript dit tekstbestand met behulp van de door het systeem toegewezen beheerde identiteit die wordt gegenereerd bij het maken van het eindpunt.
Haal nu een ingang op voor de werkruimte en haal de locatie op:
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
Gebruik deze waarde om een opslagaccount te maken.
Waarden toewijzen voor de werkruimte- en implementatiegerelateerde variabelen:
Geef vervolgens op wat u de naam van uw blob-opslagaccount, blobcontainer en bestand wilt geven. Deze namen van variabelen worden hier gedefinieerd en worden aangeduid in het opslagaccount en de code voor het maken van containers door de StorageManagementClient en ContainerClient.
Nadat deze variabelen zijn toegewezen, maakt u lokaal een tekstbestand. Wanneer het eindpunt wordt geïmplementeerd, opent het scorescript dit tekstbestand met behulp van de door de gebruiker toegewezen beheerde identiteit die wordt gegenereerd bij het maken van het eindpunt.
Bepaal de naam van uw gebruikersnaam:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Haal nu een ingang op voor de werkruimte en haal de locatie op:
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
Gebruik deze waarde om een opslagaccount te maken.
Als u een online-eindpunt wilt implementeren met de CLI, moet u de configuratie definiëren in een YAML-bestand. Zie voor meer informatie over het YAML-schema online eindpunt YAML-referentiedocument .
De YAML-bestanden in de volgende voorbeelden worden gebruikt om online-eindpunten te maken.
Het volgende YAML-voorbeeld bevindt zich op eindpunten/online/beheerd/managed/managed-identities/1-sai-create-endpoint. Het bestand,
Definieert de naam waarmee u naar het eindpunt wilt verwijzen. my-sai-endpoint
Hiermee geeft u het type autorisatie dat moet worden gebruikt voor toegang tot het eindpunt, auth-mode: key.
Hiermee geeft u op dat het type eindpunt dat u wilt maken een online eindpunt is.
Geeft aan dat het eindpunt een gekoppelde implementatie heeft met de naam blue.
Hiermee configureert u de details van de implementatie, zoals welk model moet worden geïmplementeerd en welke omgeving en scorescript moet worden gebruikt.
Als u een online-eindpunt wilt implementeren met de CLI, moet u de configuratie definiëren in een YAML-bestand. Zie voor meer informatie over het YAML-schema online eindpunt YAML-referentiedocument .
De YAML-bestanden in de volgende voorbeelden worden gebruikt om online-eindpunten te maken.
Het volgende YAML-voorbeeld bevindt zich op eindpunten/online/managed/managed-identities/1-uai-create-endpoint. Het bestand,
Definieert de naam waarmee u naar het eindpunt wilt verwijzen. my-uai-endpoint
Hiermee geeft u het type autorisatie dat moet worden gebruikt voor toegang tot het eindpunt, auth-mode: key.
Geeft het te gebruiken identiteitstype aan, type: user_assigned
Hiermee geeft u op dat het type eindpunt dat u wilt maken een online eindpunt is.
Geeft aan dat het eindpunt een gekoppelde implementatie heeft met de naam blue.
Hiermee configureert u de details van de implementatie, zoals welk model moet worden geïmplementeerd en welke omgeving en scorescript moet worden gebruikt.
Als u een online-eindpunt wilt implementeren met de Python SDK (v2), kunnen objecten worden gebruikt om de volgende configuratie te definiëren. U kunt YAML-bestanden ook laden met behulp van de .load methode.
Het volgende Python-eindpuntobject:
Hiermee wijst u de naam toe waarmee u naar het eindpunt wilt verwijzen naar de variabele endpoint_name.
Hiermee geeft u het type autorisatie dat moet worden gebruikt voor toegang tot het eindpunt auth-mode="key".
Als u een online-eindpunt wilt implementeren met de Python SDK (v2), kunnen objecten worden gebruikt om de volgende configuratie te definiëren. U kunt YAML-bestanden ook laden met behulp van de .load methode.
Voor een door de gebruiker toegewezen identiteit definieert u de eindpuntconfiguratie nadat de door de gebruiker toegewezen beheerde identiteit is gemaakt.
Dit implementatieobject:
Hiermee geeft u op dat het type implementatie dat u wilt maken een ManagedOnlineDeployment via de klasse is.
Geeft aan dat het eindpunt een gekoppelde implementatie heeft met de naam blue.
Hiermee configureert u de details van de implementatie, zoals de name en instance_count
Definieert meer objecten inline en koppelt deze aan de implementatie voor Model,CodeConfiguration en Environment.
Bevat omgevingsvariabelen die nodig zijn voor de door de gebruiker toegewezen beheerde identiteit voor toegang tot opslag.
Hiermee voegt u een omgevingsvariabele UAI_CLIENT_IDvoor een tijdelijke aanduiding toe, die wordt toegevoegd nadat u er een hebt gemaakt en voordat u deze configuratie daadwerkelijk implementeert.
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",
},
)
De beheerde identiteit maken
Als u toegang wilt krijgen tot Azure-resources, maakt u een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit voor uw online-eindpunt.
Wanneer u een online-eindpunt maakt, wordt automatisch een door het systeem toegewezen beheerde identiteit voor u gegenereerd. U hoeft dus geen afzonderlijke identiteit te maken.
Gebruik de volgende opdracht om een door de gebruiker toegewezen beheerde identiteit te maken:
az identity create --name $UAI_NAME
Wanneer u een online-eindpunt maakt, wordt automatisch een door het systeem toegewezen beheerde identiteit voor u gegenereerd. U hoeft dus geen afzonderlijke identiteit te maken.
Als u een door de gebruiker toegewezen beheerde identiteit wilt maken, moet u eerst een ingang krijgen voor het ManagedServiceIdentityClientvolgende:
from azure.mgmt.msi import ManagedServiceIdentityClient
from azure.mgmt.msi.models import Identity
credential = AzureCliCredential()
msi_client = ManagedServiceIdentityClient(
subscription_id=subscription_id,
credential=credential,
)
In dit voorbeeld maakt u een blob-opslagaccount en blobcontainer en uploadt u vervolgens het eerder gemaakte tekstbestand naar de blobcontainer. U geeft het online-eindpunt en de beheerde identiteit toegang tot dit opslagaccount en de blobcontainer.
Upload vervolgens een blob naar de container met het ContainerClientvolgende:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Een online-eindpunt maken
Met de volgende code wordt een online-eindpunt gemaakt zonder een implementatie op te geven.
Waarschuwing
De identiteit voor een eindpunt kan onveranderbaar zijn. Tijdens het maken van een eindpunt kunt u het koppelen aan een door het systeem toegewezen identiteit (standaard) of een door de gebruiker toegewezen identiteit. U kunt de identiteit niet wijzigen nadat het eindpunt is gemaakt.
Wanneer u een online-eindpunt maakt, wordt standaard een door het systeem toegewezen beheerde identiteit gemaakt voor het eindpunt.
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/managed-identities/1-sai-create-endpoint.yml
Controleer de status van het eindpunt met het volgende.
az ml online-endpoint show --name $ENDPOINT_NAME
Zie Problemen met de implementatie en score van online-eindpunten oplossen als u problemen ondervindt.
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
Controleer de status van het eindpunt met het volgende.
az ml online-endpoint show --name $ENDPOINT_NAME
Zie Problemen met de implementatie en score van online-eindpunten oplossen als u problemen ondervindt.
Wanneer u een online-eindpunt maakt, wordt standaard een door het systeem toegewezen beheerde identiteit gemaakt voor het eindpunt.
Zie Problemen met de implementatie en score van online-eindpunten oplossen als u problemen ondervindt.
Toegangsmachtigingen verlenen voor de beheerde identiteit
Belangrijk
Voor online-eindpunten is een azure Container Registry-pull-machtiging, AcrPull-machtiging, vereist voor het containerregister en de machtiging Opslagblobgegevenslezer voor het standaardgegevensarchief van de werkruimte.
U kunt het online-eindpunt machtigen om toegang te krijgen tot uw opslag via de door het systeem toegewezen beheerde identiteit of toestemming geven aan de door de gebruiker toegewezen beheerde identiteit voor toegang tot het opslagaccount dat in de vorige sectie is gemaakt.
Haal de door het systeem toegewezen beheerde identiteit op die is gemaakt voor uw eindpunt.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Hier kunt u de door het systeem toegewezen beheerde identiteit machtigen voor toegang tot uw opslag.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Client-id van door de gebruiker toegewezen beheerde identiteit ophalen.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Haal de door de gebruiker toegewezen beheerde identiteit-id op.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Haal het containerregister op dat is gekoppeld aan de werkruimte.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Haal de standaardopslag van de werkruimte op.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Geef een machtiging voor het opslagaccount aan de door de gebruiker toegewezen beheerde identiteit.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Geef een machtiging van het containerregister aan de door de gebruiker toegewezen beheerde identiteit.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Geef toestemming voor standaardwerkruimteopslag voor door de gebruiker toegewezen beheerde identiteit.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Maak eerst een AuthorizationManagementClient lijst met roldefinities:
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",
)
Initialiseer er nu een om roltoewijzingen te maken:
Wijs vervolgens de rol Opslagblobgegevenslezer toe aan het eindpunt. De roldefinitie wordt opgehaald op naam en wordt samen met de principal-id van het eindpunt doorgegeven. De rol wordt toegepast op het bereik van het hierboven gemaakte opslagaccount en stelt het eindpunt in staat het bestand te lezen.
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
),
)
Maak eerst een AuthorizationManagementClient lijst met roldefinities:
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",
)
Initialiseer er nu een om roltoewijzingen te maken:
Haal vervolgens de principal-id en client-id op van de door de gebruiker toegewezen beheerde identiteit. Als u rollen wilt toewijzen, hebt u alleen de principal-id nodig. U gebruikt echter de client-id om de omgevingsvariabele van de UAI_CLIENT_ID tijdelijke aanduiding te vullen voordat u de implementatie maakt.
Wijs vervolgens de rol Opslagblobgegevenslezer toe aan het eindpunt. De roldefinitie wordt opgehaald op naam en wordt samen met de principal-id van het eindpunt doorgegeven. De rol wordt toegepast op het bereik van het hierboven gemaakte opslagaccount, zodat het eindpunt het bestand kan lezen.
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",
),
)
Voor de volgende twee machtigingen hebt u de werkruimte- en containerregisterobjecten nodig:
Wijs vervolgens de AcrPull-rol toe aan de door de gebruiker toegewezen identiteit. Met deze rol kunnen installatiekopieën worden opgehaald uit een Azure Container Registry. Het bereik wordt toegepast op het niveau van het containerregister dat is gekoppeld aan de werkruimte.
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",
),
)
Wijs ten slotte de rol Opslagblobgegevenslezer toe aan het eindpunt op het bereik van het opslagaccount van de werkruimte. Met deze roltoewijzing kan het eindpunt blobs lezen in het opslagaccount van de werkruimte en het zojuist gemaakte opslagaccount.
De rol heeft dezelfde naam en mogelijkheden als de eerste rol die hierboven is toegewezen, maar deze wordt toegepast op een ander bereik en heeft een andere 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",
),
)
Scorescript voor toegang tot Azure-resource
Raadpleeg het volgende script voor informatie over het gebruik van uw identiteitstoken voor toegang tot Azure-resources, in dit scenario, het opslagaccount dat in de vorige secties is gemaakt.
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()
Deze implementatie kan ongeveer 8-14 minuten duren, afhankelijk van of de onderliggende omgeving/installatiekopie voor het eerst wordt gebouwd. Volgende implementaties die dezelfde omgeving gebruiken, gaan sneller.
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
Notitie
De waarde van het --name argument kan de name sleutel in het YAML-bestand overschrijven.
Controleer de status van de implementatie.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Als u de bovenstaande query wilt verfijnen om alleen specifieke gegevens te retourneren, raadpleegt u De uitvoer van de Azure CLI-opdracht opvragen.
Notitie
De init-methode in het scorescript leest het bestand uit uw opslagaccount met behulp van het door het systeem toegewezen beheerde identiteitstoken.
Als u de uitvoer van de init-methode wilt controleren, raadpleegt u het implementatielogboek met de volgende code.
# 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
Notitie
De waarde van het --name argument kan de name sleutel in het YAML-bestand overschrijven.
Zodra de opdracht is uitgevoerd, kunt u de status van de implementatie controleren.
az ml online-endpoint show --name $ENDPOINT_NAME
Als u de bovenstaande query wilt verfijnen om alleen specifieke gegevens te retourneren, raadpleegt u De uitvoer van de Azure CLI-opdracht opvragen.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Notitie
De init-methode in het scorescript leest het bestand uit uw opslagaccount met behulp van het door de gebruiker toegewezen beheerde identiteitstoken.
Als u de uitvoer van de init-methode wilt controleren, raadpleegt u het implementatielogboek met de volgende code.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Wanneer uw implementatie is voltooid, worden het model, de omgeving en het eindpunt geregistreerd bij uw Azure Machine Learning-werkruimte.
Het eindpunt testen
Zodra uw online-eindpunt is geïmplementeerd, test en bevestigt u de bewerking ervan met een aanvraag. Details van de deductie variëren van model tot model. Voor deze handleiding zien de JSON-queryparameters er als volgt uit:
Als u niet van plan bent om het geïmplementeerde online-eindpunt en de geïmplementeerde onlineopslag te blijven gebruiken, verwijdert u deze om de kosten te verlagen. Wanneer u het eindpunt verwijdert, worden ook alle bijbehorende implementaties verwijderd.