Informazioni su come accedere alle risorse di Azure dallo script di assegnazione dei punteggi con un endpoint online e un'identità gestita assegnata dal sistema o un'identità gestita assegnata dall'utente.
Sia gli endpoint gestiti sia gli endpoint Kubernetes consentono ad Azure Machine Learning di gestire il carico di provisioning della risorsa di calcolo e della distribuzione del modello di Machine Learning. In genere, il modello deve accedere alle risorse di Azure, ad esempio Registro Azure Container o l'Archiviazione BLOB, per l'inferenza. Con un'identità gestita è possibile accedere a queste risorse senza dover gestire le credenziali nel codice. Altre informazioni sulle identità gestite.
Questa guida presuppone che non si disponga di un'identità gestita, un account di archiviazione o un endpoint online. Se si dispone già di questi componenti, passare alla sezione Concedere l'autorizzazione di accesso all'identità gestita.
Per usare Azure Machine Learning, è necessario avere una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.
Un gruppo di risorse di Azure in cui l'utente (o l'entità servizio in uso) necessita di accesso Amministratore accesso utenti e Contributore. Questo gruppo di risorse sarà disponibile se l'estensione di Machine Learning è stata configurata in base all'articolo precedente.
Un'area di lavoro di Azure Machine Learning. Se l'estensione ML è stata configurata come illustrato nell'articolo precedente, si dispone già di un'area di lavoro.
Modello di Machine Learning con training pronto per l'assegnazione di punteggi e la distribuzione. Se si sta seguendo il campione, viene fornito un modello.
Se le impostazioni predefinite per l'interfaccia della riga di comando di Azure non sono già state impostate, salvare le proprie impostazioni predefinite. Per evitare di passare più volte i valori per la sottoscrizione, l'area di lavoro e il gruppo di risorse, eseguire questo codice:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Per seguire il campione, clonare il repository dei campioni e quindi modificare la directory all’interfaccia della riga di comando.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Per usare Azure Machine Learning, è necessario avere una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.
Un gruppo di risorse di Azure in cui l'utente (o l'entità servizio in uso) necessita di accesso Amministratore accesso utenti e Contributore. Questo gruppo di risorse sarà disponibile se l'estensione di Machine Learning è stata configurata in base all'articolo precedente.
Un'area di lavoro di Azure Machine Learning. Un'area di lavoro sarà disponibile se l'estensione di Machine Learning è stata configurata come illustrato nell'articolo precedente.
Modello di Machine Learning con training pronto per l'assegnazione di punteggi e la distribuzione. Se si sta seguendo il campione, viene fornito un modello.
Se le impostazioni predefinite per l'interfaccia della riga di comando di Azure non sono già state impostate, salvare le proprie impostazioni predefinite. Per evitare di passare più volte i valori per la sottoscrizione, l'area di lavoro e il gruppo di risorse, eseguire questo codice:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Per seguire il campione, clonare il repository dei campioni e quindi modificare la directory all’interfaccia della riga di comando.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Per usare Azure Machine Learning, è necessario avere una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.
Un gruppo di risorse di Azure in cui l'utente (o l'entità servizio in uso) necessita di accesso Amministratore accesso utenti e Contributore. Questo gruppo di risorse sarà disponibile se l'estensione di Machine Learning è stata configurata in base all'articolo precedente.
Un'area di lavoro di Azure Machine Learning. Se l'estensione ML è stata configurata come illustrato nell'articolo precedente, si dispone già di un'area di lavoro.
Modello di Machine Learning con training pronto per l'assegnazione di punteggi e la distribuzione. Se si sta seguendo il campione, viene fornito un modello.
Clonare il repository dei campioni, quindi modificare la directory.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Per seguire questo notebook, accedere al notebook di esempio complementare all'interno della directory sdk/endpoints/online/managed/managed-identities.
Per questo esempio sono necessari pacchetti Python aggiuntivi:
Per usare Azure Machine Learning, è necessario avere una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.
Autorizzazioni di creazione dei ruoli per la sottoscrizione o le risorse di Azure a cui accede l'identità assegnata dall'utente.
Un gruppo di risorse di Azure in cui l'utente (o l'entità servizio in uso) necessita di accesso Amministratore accesso utenti e Contributore. Questo gruppo di risorse sarà disponibile se l'estensione di Machine Learning è stata configurata in base all'articolo precedente.
Un'area di lavoro di Azure Machine Learning. Se l'estensione ML è stata configurata come illustrato nell'articolo precedente, si dispone già di un'area di lavoro.
Modello di Machine Learning con training pronto per l'assegnazione di punteggi e la distribuzione. Se si sta seguendo il campione, viene fornito un modello.
Clonare il repository di esempi.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Per seguire questo notebook, accedere al notebook di esempio complementare all'interno della directory sdk/endpoints/online/managed/managed-identities.
Per questo esempio sono necessari pacchetti Python aggiuntivi:
L'identità per un endpoint non è modificabile. Durante la creazione dell'endpoint, è possibile associarlo a un'identità assegnata dal sistema (impostazione predefinita) o a un'identità assegnata dall'utente. Non è possibile modificare l'identità dopo la creazione dell'endpoint.
Se ARC e l'Archiviazione BLOB sono configurati come privati (ovvero si trovano dietro una rete virtuale), l'accesso dall'endpoint Kubernetes deve essere eseguito tramite il collegamento privato, indipendentemente dal fatto che l'area di lavoro sia pubblica o privata. Per altre informazioni sull'impostazione del collegamento privato, vedere Come proteggere la rete virtuale dell'area di lavoro.
Configurare le variabili per la distribuzione
Configurare i nomi delle variabili per l'area di lavoro, la posizione dell'area di lavoro e l'endpoint da creare per l'uso con la distribuzione.
Specificare quindi il nome dell'account di Archiviazione BLOB, del contenitore BLOB e del file. Questi nomi di variabile sono definiti qui e vi si fa riferimento nei comandi az storage account create e az storage container create nella sezione successiva.
Il codice seguente esporta tali valori come variabili di ambiente:
Dopo l'esportazione di queste variabili, creare un file di testo in locale. Quando l'endpoint viene distribuito, lo script di assegnazione dei punteggi accederà a questo file di testo usando l'identità gestita assegnata dal sistema generata al momento della creazione dell'endpoint.
Decidere il nome dell'endpoint, dell'area di lavoro e della posizione dell'area di lavoro, quindi esportare tale valore come variabile di ambiente:
Specificare quindi il nome dell'account di Archiviazione BLOB, del contenitore BLOB e del file. Questi nomi di variabile sono definiti qui e vi si fa riferimento nei comandi az storage account create e az storage container create nella sezione successiva.
Dopo l'esportazione di queste variabili, creare un file di testo in locale. Quando l'endpoint viene distribuito, lo script di assegnazione dei punteggi accederà a questo file di testo usando l'identità gestita assegnata dall'utente usata nell'endpoint.
Decidere il nome dell'identità utente ed esportare tale valore come variabile di ambiente:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Assegnare valori per le variabili correlate all'area di lavoro e alla distribuzione:
Specificare quindi il nome dell'account di Archiviazione BLOB, del contenitore BLOB e del file. Questi nomi di variabile sono definiti qui e vi si fa riferimento nel codice di creazione dell'account di archiviazione e del contenitore con StorageManagementClient e ContainerClient.
Dopo aver assegnato queste variabili, creare un file di testo in locale. Quando l'endpoint viene distribuito, lo script di assegnazione dei punteggi accederà a questo file di testo usando l'identità gestita assegnata dal sistema generata al momento della creazione dell'endpoint.
A questo punto, ottenere un handle per l'area di lavoro e recuperarne la posizione:
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
Usare questo valore per creare un account di archiviazione.
Assegnare valori per le variabili correlate all'area di lavoro e alla distribuzione:
Specificare quindi il nome dell'account di Archiviazione BLOB, del contenitore BLOB e del file. Questi nomi di variabile sono definiti qui e vi si fa riferimento nel codice di creazione dell'account di archiviazione e del contenitore con StorageManagementClient e ContainerClient.
Dopo aver assegnato queste variabili, creare un file di testo in locale. Quando l'endpoint viene distribuito, lo script di assegnazione dei punteggi accederà a questo file di testo usando l'identità gestita assegnata dall'utente generata al momento della creazione dell'endpoint.
Scegliere il nome dell'identità utente:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
A questo punto, ottenere un handle per l'area di lavoro e recuperarne la posizione:
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
Usare questo valore per creare un account di archiviazione.
Per distribuire un endpoint online con l'interfaccia della riga di comando, è necessario definire la configurazione in un file YAML. Per altre informazioni sullo schema YAML, vedere il documento di riferimento sull'endpoint YAML online.
I file YAML negli esempi seguenti vengono usati per creare endpoint online.
L'esempio YAML seguente si trova in endpoints/online/managed/managed-identities/1-sai-create-endpoint. Il file
Definisce il nome in base al quale si vuole fare riferimento all'endpoint, my-sai-endpoint.
Specifica il tipo di autorizzazione da usare per accedere all'endpoint, auth-mode: key.
Per distribuire un endpoint online con l'interfaccia della riga di comando, è necessario definire la configurazione in un file YAML. Per altre informazioni sullo schema YAML, vedere il documento di riferimento sull'endpoint YAML online.
I file YAML negli esempi seguenti vengono usati per creare endpoint online.
L'esempio YAML seguente si trova in endpoints/online/managed/managed-identities/1-uai-create-endpoint. Il file
Definisce il nome in base al quale si vuole fare riferimento all'endpoint, my-uai-endpoint.
Specifica il tipo di autorizzazione da usare per accedere all'endpoint, auth-mode: key.
Indica il tipo di identità da usare, type: user_assigned
Per distribuire un endpoint online con Python SDK (v2), è possibile usare gli oggetti per definire la seguente configurazione. In alternativa, è possibile caricare file YAML usando il metodo .load.
L'oggetto endpoint Python seguente:
Assegna alla variabile endpoint_name il nome in base al quale si vuole fare riferimento all'endpoint.
Specifica il tipo di autorizzazione da usare per accedere all'endpoint auth-mode="key".
Per distribuire un endpoint online con Python SDK (v2), è possibile usare gli oggetti per definire la seguente configurazione. In alternativa, è possibile caricare file YAML usando il metodo .load.
Per un'identità assegnata dall'utente, definire la configurazione dell'endpoint dopo aver creato l’identità gestita assegnata dall'utente.
Questo oggetto di distribuzione:
Specifica tramite la classe che il tipo di distribuzione che si vuole creare è ManagedOnlineDeployment.
Indica che l'endpoint ha una distribuzione associata denominata blue.
Configura i dettagli della distribuzione, ad esempio name e instance_count
Definisce ulteriori oggetti inline e li associa alla distribuzione per Model,CodeConfiguration e Environment.
Include le variabili di ambiente necessarie per l'identità gestita assegnata dall'utente per accedere all'archiviazione.
Aggiunge una variabile di ambiente segnaposto per UAI_CLIENT_ID, che verrà aggiunta dopo che ne è stata creata una e prima di distribuire effettivamente questa configurazione.
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",
},
)
Creare l'identità gestita
Per accedere alle risorse di Azure, creare un'identità gestita assegnata dal sistema o assegnata dall'utente per l'endpoint online.
Quando si crea un endpoint online, viene generata automaticamente un'identità gestita assegnata dal sistema, quindi non è necessario crearne una separata.
Per creare un'identità gestita assegnata dall'utente, usare il comando seguente:
az identity create --name $UAI_NAME
Quando si crea un endpoint online, viene generata automaticamente un'identità gestita assegnata dal sistema, quindi non è necessario crearne una separata.
Per creare un'identità gestita assegnata dall'utente, ottenere prima di tutto un handle per 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,
)
Creare un account di archiviazione e un contenitore
Per questo esempio, creare un account di archiviazione BLOB e un contenitore BLOB e quindi caricare il file di testo creato in precedenza nel contenitore BLOB. Si concede all'endpoint online e all'identità gestita l'accesso a questo account di archiviazione e al contenitore BLOB.
Caricare quindi un BLOB nel contenitore con ContainerClient:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Creare un endpoint online
Il codice seguente crea un endpoint online senza specificare una distribuzione.
Avviso
L'identità per un endpoint non è modificabile. Durante la creazione dell'endpoint, è possibile associarlo a un'identità assegnata dal sistema (impostazione predefinita) o a un'identità assegnata dall'utente. Non è possibile modificare l'identità dopo la creazione dell'endpoint.
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
Controllare lo stato dell'endpoint con quanto segue.
Concedere l'autorizzazione di accesso all'identità gestita
Importante
Gli endpoint online richiedono l'autorizzazione pull di Registro Azure Container, l'autorizzazione AcrPull, per il registro contenitori e l'autorizzazione Lettore dei dati dei BLOB di archiviazione per l'archivio dati predefinito dell'area di lavoro.
È possibile consentire all'endpoint online di accedere all'archiviazione tramite la rispettiva identità gestita assegnata dal sistema o concedere l'autorizzazione all'identità gestita assegnata dall'utente per accedere all'account di archiviazione creato nella sezione precedente.
Recuperare l'identità gestita assegnata dal sistema creata per l'endpoint.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Da qui è possibile concedere all'identità gestita assegnata dal sistema l'autorizzazione per accedere all'archiviazione.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Ottenere il registro contenitori associato all'area di lavoro.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Recuperare la risorsa di archiviazione predefinita dell'area di lavoro.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Concedere l'autorizzazione dell'account di archiviazione all'identità gestita assegnata dall'utente.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Concedere l'autorizzazione del registro contenitori all'identità gestita assegnata dall'utente.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Concedere l'autorizzazione della risorsa di archiviazione dell'area di lavoro predefinita all'identità gestita assegnata dall'utente.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Creare prima di tutto un AuthorizationManagementClient per elencare le definizioni dei ruoli:
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",
)
A questo punto, inizializzarne uno per creare assegnazioni di ruolo:
Assegnare quindi il ruolo Lettore dati BLOB di archiviazione all'endpoint. La definizione del ruolo viene recuperata in base al nome e passata insieme all'ID entità dell'endpoint. Il ruolo viene applicato all'ambito dell'account di archiviazione creato in precedenza e consente all'endpoint di leggere il file.
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
),
)
Creare prima di tutto un AuthorizationManagementClient per elencare le definizioni dei ruoli:
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",
)
A questo punto, inizializzarne uno per creare assegnazioni di ruolo:
Ottenere quindi l'ID entità e l'ID client dell'identità gestita assegnata dall'utente. Per assegnare ruoli, è necessario solo l'ID entità. Si userà tuttavia l'ID client per riempire la variabile di ambiente segnaposto UAI_CLIENT_ID prima di creare la distribuzione.
Assegnare quindi il ruolo Lettore dati BLOB di archiviazione all'endpoint. La definizione del ruolo viene recuperata in base al nome e passata insieme all'ID entità dell'endpoint. Il ruolo viene applicato all'ambito dell'account di archiviazione creato in precedenza per consentire all'endpoint di leggere il file.
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",
),
)
Per le due autorizzazioni successive, sono necessari gli oggetti area di lavoro e registro contenitori:
Assegnare quindi il ruolo AcrPull all'identità assegnata dall'utente. Questo ruolo consente il pull delle immagini da un Registro Azure Container. L'ambito viene applicato al livello del registro contenitori associato all'area di lavoro.
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",
),
)
Infine, assegnare il ruolo Lettore dati BLOB di archiviazione all'endpoint nell'ambito dell'account di archiviazione dell'area di lavoro. Questa assegnazione di ruolo consentirà all'endpoint di leggere BLOB nell'account di archiviazione dell'area di lavoro, oltre che nell'account di archiviazione appena creato.
Il ruolo ha lo stesso nome e le stesse funzionalità del primo ruolo assegnato in precedenza, ma viene applicato a un ambito diverso e ha un ID diverso.
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",
),
)
Script di assegnazione dei punteggi per accedere alla risorsa di Azure
Fare riferimento allo script seguente per comprendere come usare il token di identità per accedere alle risorse di Azure, ovvero, in questo scenario, l'account di archiviazione creato nelle sezioni precedenti.
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()
Questa distribuzione può richiedere circa 8-14 minuti a seconda che l'ambiente o l'immagine sottostante venga compilata per la prima volta. Le distribuzioni successive che usano lo stesso ambiente saranno più rapide.
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
Nota
Il valore dell'argomento --name può eseguire l'override della chiave name all'interno del file YAML.
Controllare lo stato della distribuzione.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Il metodo init nello script di assegnazione dei punteggi legge il file dall'account di archiviazione usando il token dell'identità gestita assegnata dal sistema.
Per controllare l'output del metodo init, vedere il log di distribuzione con il codice seguente.
# 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
Nota
Il valore dell'argomento --name può eseguire l'override della chiave name all'interno del file YAML.
Dopo l'esecuzione del comando, è possibile controllare lo stato della distribuzione.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Nota
Il metodo init nello script di assegnazione dei punteggi legge il file dall'account di archiviazione usando il token dell'identità gestita assegnata dall'utente.
Per controllare l'output del metodo init, vedere il log di distribuzione con il codice seguente.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Il metodo init nello script di assegnazione dei punteggi legge il file dall'account di archiviazione usando il token dell'identità gestita assegnata dal sistema.
Per controllare l'output del metodo init, vedere il log di distribuzione con il codice seguente.
Il metodo init nello script di assegnazione dei punteggi legge il file dall'account di archiviazione usando il token dell'identità gestita assegnata dall'utente.
Per controllare l'output del metodo init, vedere il log di distribuzione con il codice seguente.
Al termine della distribuzione, il modello, l'ambiente e l'endpoint vengono registrati nell'area di lavoro di Azure Machine Learning.
Testare l'endpoint
Dopo aver distribuito l'endpoint online, testare e confermare l'operazione con una richiesta. I dettagli dell'inferenza variano da modello a modello. Per questa guida, i parametri di query JSON sono simili ai seguenti:
Se non si prevede di continuare a usare l'endpoint online e la risorsa di archiviazione distribuiti, eliminarli per ridurre i costi. Quando si elimina l'endpoint, vengono eliminate anche tutte le distribuzioni associate.