Découvrez comment accéder aux ressources Azure à partir de votre script de scoring avec un point de terminaison en ligne, ainsi qu’avec une identité managée affectée par le système ou une identité managée affectée par l’utilisateur.
Les points de terminaison gérés et les points de terminaison Kubernetes permettent à Azure Machine Learning de gérer le travail d’approvisionnement de votre ressource de calcul et le déploiement de votre modèle Machine Learning. En général, votre modèle doit accéder aux ressources Azure, comme Azure Container Registry ou votre stockage blob pour l’inférence ; avec une identité managée, vous pouvez accéder à ces ressources sans avoir à gérer les informations d’identification dans votre code. En savoir plus sur les Identités managées.
Ce guide part du principe que vous ne disposez pas d’une identité managée, d’un compte de stockage, ni d’un point de terminaison en ligne. Si vous disposez déjà de ces composants, passez à la section Accorder l’autorisation d’accès à l’identité managée.
Pour utiliser Azure Machine Learning, vous devez disposer d’un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer. Essayez la version gratuite ou payante d’Azure Machine Learning dès aujourd’hui.
Un groupe de ressources Azure, où vous (ou le principal de service que vous utilisez) devez avoir l’Administrateur de l’accès utilisateur et l’accès contributeur. Vous disposez d’un tel groupe de ressources si vous avez configuré votre extension ML conformément à l’article précédent.
Un espace de travail Azure Machine Learning. Vous disposez déjà d’un espace de travail si vous avez configuré votre extension ML conformément à l’article précédent.
Un modèle Machine Learning entraîné prêt pour le scoring et le déploiement. Si vous suivez la procédure décrite dans l’échantillon, un modèle est fourni.
Si vous n’avez pas encore défini les paramètres par défaut pour l’interface CLI Azure, enregistrez vos paramètres par défaut. Pour éviter de transmettre plusieurs fois les valeurs de votre abonnement, de votre espace de travail et de votre groupe de ressources, exécutez le code suivant :
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Pour suivre l’échantillon, clonez le référentiel d’échantillons, puis remplacez le répertoire pour cliquer.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Pour utiliser Azure Machine Learning, vous devez disposer d’un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer. Essayez la version gratuite ou payante d’Azure Machine Learning dès aujourd’hui.
Un Groupe de ressources Azure, où vous (ou le principal de service que vous utilisez) devez avoir l’Administrateur de l’accès utilisateur et l’accès contributeur. Vous disposez d’un tel groupe de ressources si vous avez configuré votre extension ML conformément à l’article précédent.
Un espace de travail Azure Machine Learning. Vous disposez d’un espace de travail si vous avez configuré votre extension ML conformément à l’article ci-dessus.
Un modèle Machine Learning entraîné prêt pour le scoring et le déploiement. Si vous suivez la procédure décrite dans l’échantillon, un modèle est fourni.
Si vous n’avez pas encore défini les paramètres par défaut pour l’interface CLI Azure, enregistrez vos paramètres par défaut. Pour éviter de transmettre plusieurs fois les valeurs de votre abonnement, de votre espace de travail et de votre groupe de ressources, exécutez le code suivant :
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Pour suivre l’échantillon, clonez le référentiel d’échantillons, puis remplacez le répertoire pour cliquer.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Pour utiliser Azure Machine Learning, vous devez disposer d’un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer. Essayez la version gratuite ou payante d’Azure Machine Learning dès aujourd’hui.
Un Groupe de ressources Azure, où vous (ou le principal de service que vous utilisez) devez avoir l’Administrateur de l’accès utilisateur et l’accès contributeur. Vous disposez d’un tel groupe de ressources si vous avez configuré votre extension ML conformément à l’article précédent.
Un espace de travail Azure Machine Learning. Vous disposez déjà d’un espace de travail si vous avez configuré votre extension ML conformément à l’article précédent.
Un modèle Machine Learning entraîné prêt pour le scoring et le déploiement. Si vous suivez la procédure décrite dans l’échantillon, un modèle est fourni.
Clonez le référentiel d’échantillons, puis modifiez le répertoire.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Pour utiliser Azure Machine Learning, vous devez disposer d’un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer. Essayez la version gratuite ou payante d’Azure Machine Learning dès aujourd’hui.
Autorisations de création de rôle pour votre abonnement ou les ressources Azure auxquelles accède l’identité attribuée par l’utilisateur.
Un Groupe de ressources Azure, où vous (ou le principal de service que vous utilisez) devez avoir l’Administrateur de l’accès utilisateur et l’accès contributeur. Vous disposez d’un tel groupe de ressources si vous avez configuré votre extension ML conformément à l’article précédent.
Un espace de travail Azure Machine Learning. Vous disposez déjà d’un espace de travail si vous avez configuré votre extension ML conformément à l’article précédent.
Un modèle Machine Learning entraîné prêt pour le scoring et le déploiement. Si vous suivez la procédure décrite dans l’échantillon, un modèle est fourni.
Clonez les exemples de référentiels.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
L’identité d’un point de terminaison est immuable. Durant la création du point de terminaison, vous pouvez l’associer à une identité affectée par le système (par défaut) ou par l’utilisateur. Vous ne pouvez pas modifier l’identité une fois que le point de terminaison a été créé.
Si votre Consommation réelle des ressources (ARC) et votre stockage d’objets blob sont configurés comme privés, c’est-à-dire derrière un réseau virtuel, l’accès à partir du point de terminaison Kubernetes doit se faire via la liaison privée, que votre espace de travail soit public ou privé. Pour plus d’informations sur le paramètre de liaison privée, veuillez consulter Comment sécuriser un réseau virtuel d’espace de travail.
Configurer des variables pour le déploiement
Configurez les noms de variables pour l’espace de travail, l’emplacement de l’espace de travail et le point de terminaison que vous souhaitez créer pour les utiliser dans votre déploiement.
Ensuite, spécifiez les noms que vous voulez donner à vos compte Stockage Blob, conteneur d’objets blob et fichier. Ces noms de variables sont définis ici et sont référencés dans les commandes az storage account create et az storage container create dans la section suivante.
Le code suivant exporte ces valeurs en tant que variables d’environnement :
Une fois ces variables exportées, créez un fichier texte localement. Lorsque le point de terminaison est déployé, le script de scoring accède à ce fichier texte à l’aide de l’identité managée affectée par le système qui est générée lors de la création du point de terminaison.
Choisissez le nom de votre point de terminaison, de votre espace de travail, de l’emplacement de l’espace de travail puis exportez cette valeur en tant que variable d’environnement :
Ensuite, spécifiez les noms que vous voulez donner à vos compte Stockage Blob, conteneur d’objets blob et fichier. Ces noms de variables sont définis ici et sont référencés dans les commandes az storage account create et az storage container create dans la section suivante.
Une fois ces variables exportées, créez un fichier texte localement. Lorsque le point de terminaison est déployé, le script de scoring accède à ce fichier texte à l’aide de l’identité managée affectée par l’utilisateur utilisée dans le point de terminaison.
Choisissez le nom de l’identité de l’utilisateur et exportez cette valeur en tant que variable d’environnement :
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Attribuez des valeurs pour les variables liées à l’espace de travail et au déploiement :
Ensuite, spécifiez les noms que vous voulez donner à vos compte Stockage Blob, conteneur d’objets blob et fichier. Ces noms de variables sont définis ici. Ils sont référencés dans le code de création de compte de stockage et de conteneur par StorageManagementClient et ContainerClient.
Une fois ces variables attribuées, créez un fichier texte localement. Lorsque le point de terminaison est déployé, le script de scoring accède à ce fichier texte à l’aide de l’identité managée affectée par le système qui est générée lors de la création du point de terminaison.
Maintenant, obtenez un descripteur pour l’espace de travail et récupérez son emplacement :
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
Utilisez cette valeur pour créer un compte de stockage.
Attribuez des valeurs pour les variables liées à l’espace de travail et au déploiement :
Ensuite, spécifiez les noms que vous voulez donner à vos compte Stockage Blob, conteneur d’objets blob et fichier. Ces noms de variables sont définis ici. Ils sont référencés dans le code de création de compte de stockage et de conteneur par StorageManagementClient et ContainerClient.
Une fois ces variables attribuées, créez un fichier texte localement. Lorsque le point de terminaison est déployé, le script de scoring accède à ce fichier texte à l’aide de l’identité managée affectée par l’utilisateur, qui est générée lors de la création du point de terminaison.
Choisissez le nom de votre identité d’utilisateur :
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Maintenant, obtenez un descripteur pour l’espace de travail et récupérez son emplacement :
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
Utilisez cette valeur pour créer un compte de stockage.
Pour déployer un point de terminaison en ligne avec l’interface CLI, vous devez définir la configuration dans un fichier YAML. Pour plus d’informations sur le schéma YAML, consultez le document Référence YAML sur les points de terminaison en ligne.
Les fichiers YAML dans les exemples suivants sont utilisés pour créer des points de terminaison en ligne.
L’exemple YAML suivant se trouve à endpoints/online/managed/managed-identities/1-sai-create-endpoint. Le fichier,
Définit le nom par lequel vous souhaitez faire référence au point de terminaison, my-sai-endpoint.
Spécifie le type d’autorisation à utiliser pour accéder au point de terminaison, auth-mode: key.
Pour déployer un point de terminaison en ligne avec l’interface CLI, vous devez définir la configuration dans un fichier YAML. Pour plus d’informations sur le schéma YAML, consultez le document Référence YAML sur les points de terminaison en ligne.
Les fichiers YAML dans les exemples suivants sont utilisés pour créer des points de terminaison en ligne.
L’exemple YAML suivant se trouve à endpoints/online/managed/managed-identities/1-uai-create-endpoint. Le fichier,
Définit le nom par lequel vous souhaitez faire référence au point de terminaison, my-uai-endpoint.
Spécifie le type d’autorisation à utiliser pour accéder au point de terminaison, auth-mode: key.
Indique le type d’identité à utiliser, type: user_assigned
Pour déployer un point de terminaison en ligne avec le Kit de développement logiciel (SDK) Python (v2), des objets peuvent être utilisés pour définir la configuration suivante. Vous pouvez également charger des fichiers YAML à l’aide de la méthode .load.
L’objet de point de terminaison Python suivant :
Attribue le nom par lequel vous souhaitez faire référence au point de terminaison à la variable endpoint_name.
Spécifie le type d’autorisation à utiliser pour accéder au point de terminaison auth-mode="key".
Pour déployer un point de terminaison en ligne avec le Kit de développement logiciel (SDK) Python (v2), des objets peuvent être utilisés pour définir la configuration suivante. Vous pouvez également charger des fichiers YAML à l’aide de la méthode .load.
Pour une identité affectée par l’utilisateur, vous définissez la configuration du point de terminaison après la création de l’identité managée affectée par l’utilisateur.
Cet objet de déploiement :
Spécifie que le type de déploiement que vous souhaitez créer est un ManagedOnlineDeployment via la classe.
Indique que le point de terminaison est associé à un déploiement nommé blue.
Configure les détails du déploiement tel que le name et le instance_count.
Définit des objets supplémentaires inclus et les associe au déploiement pour Model, CodeConfiguration et Environment.
Inclut les variables d’environnement nécessaires pour permettre à l’identité managée affectée par l’utilisateur d’accéder au stockage.
Ajoute une variable d’environnement d’espace réservé pour UAI_CLIENT_ID, qui est ajoutée après la création d’une configuration et avant de déployer réellement celle-ci.
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",
},
)
Créer l’identité managée
Pour accéder aux ressources Azure, créez une identité managée affectée par l’utilisateur ou affectée par le système pour votre point de terminaison en ligne.
Quand vous créez un point de terminaison en ligne, une identité managée affectée par le système est générée automatiquement pour vous, il n’est donc pas nécessaire d’en créer une distincte.
Pour créer une identité managée affectée par l’utilisateur, utilisez la commande suivante :
az identity create --name $UAI_NAME
Quand vous créez un point de terminaison en ligne, une identité managée affectée par le système est générée automatiquement pour vous, il n’est donc pas nécessaire d’en créer une distincte.
Pour créer une identité managée affectée par l’utilisateur, commencez par obtenir un descripteur pour le 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,
)
Pour cet exemple, créez un compte Stockage Blob et un conteneur d’objets blob, puis charger le fichier texte créé auparavant dans le conteneur d’objets blob. Vous donnez au point de terminaison en ligne et à l’identité managée l’accès à ce compte de stockage et à ce conteneur blob.
Ensuite, chargez un blob dans le conteneur avec le ContainerClient :
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Créez un point de terminaison en ligne
Le code suivant crée un point de terminaison en ligne sans spécifier de déploiement.
Avertissement
L’identité d’un point de terminaison est immuable. Durant la création du point de terminaison, vous pouvez l’associer à une identité affectée par le système (par défaut) ou par l’utilisateur. Vous ne pouvez pas modifier l’identité après la création du point de terminaison.
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
Vérifiez l’état du point de terminaison avec les éléments suivants.
Accorder l’autorisation d’accès à l’identité managée
Important
Les points de terminaison en ligne nécessitent l’autorisation de tirage (pull) Azure Container Registry, l’autorisation AcrPull, sur le registre de conteneurs et l’autorisation Lecteur des données Storage Blob sur le magasin de données par défaut de l’espace de travail.
Vous pouvez permettre au point de terminaison en ligne d’accéder à votre stockage via son identité managée affectée par le système ou permettre à l’identité managée affectée par l’utilisateur d’accéder au compte de stockage créé dans la section précédente.
Récupérez l’identité managée affectée par le système qui a été créée pour votre point de terminaison.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
À partir de là, vous pouvez accorder à l’identité managée affectée par le système l’autorisation d’accéder à votre stockage.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Récupérez l’ID client de l’identité managée affectée par l’utilisateur.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Récupérez l’ID de l’identité managée affectée par l’utilisateur.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Obtient le registre de conteneurs associé à l’espace de travail.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Récupérez le stockage par défaut de l’espace de travail.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Accordez l’autorisation de compte de stockage à identité gérée affectée à l’utilisateur.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Accordez au registre de conteneurs l’autorisation d’identité managée affectée par l’utilisateur.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Accordez au stockage d’espace de travail par défaut l’autorisation d’identité managée affectée par l’utilisateur.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Commencez par créer un AuthorizationManagementClient pour lister les définitions de rôle :
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",
)
À présent, initialisez-en un pour effectuer des attributions de rôles :
Ensuite, attribuez le rôle de Lecteur de données blob de stockage au point de terminaison. La définition de rôle est récupérée par nom, et transmise avec l’ID de principal du point de terminaison. Le rôle est appliqué à l’étendue du compte de stockage créé ci-dessus, et permet au point de terminaison de lire le fichier.
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
),
)
Commencez par créer un AuthorizationManagementClient pour lister les définitions de rôle :
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",
)
À présent, initialisez-en un pour effectuer des attributions de rôles :
Ensuite, obtenez l’ID de principal et l’ID de client de l’identité managée affectée par l’utilisateur. Pour attribuer des rôles, vous avez uniquement besoin de l’ID de principal. Toutefois, nous utilisez l’ID de client pour remplir la UAI_CLIENT_ID variable d’environnement d’espace réservé avant de créer le déploiement.
Ensuite, attribuez le rôle de Lecteur de données blob de stockage au point de terminaison. La définition de rôle est récupérée par nom, et transmise avec l’ID de principal du point de terminaison. Le rôle est appliqué à l’étendue du compte de stockage créé ci-dessus pour permettre au point de terminaison de lire le fichier.
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",
),
)
Pour les deux autorisations suivantes, vous avez besoin des objets « espace de travail » et « registre de conteneurs » :
Ensuite, attribuez le rôle AcrPull à l’identité affectée par l’utilisateur. Ce rôle permet l’extraction d’images d’un Azure Container Registry. L’étendue est appliquée au niveau du registre de conteneurs associé à l’espace de travail.
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",
),
)
Enfin, attribuez le rôle Lecteur de données blob du stockage au point de terminaison dans l’étendue du compte de stockage de l’espace de travail. Cette attribution de rôle permet au point de terminaison de lire les blobs dans le compte de stockage de l’espace de travail, ainsi que le compte de stockage nouvellement créé.
Le rôle a les mêmes nom et fonctionnalités que le premier rôle attribué ci-dessus, mais il est appliqué à une autre étendue et a un ID différent.
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 de scoring pour accéder à la ressource Azure
Reportez-vous au script suivant pour comprendre comment utiliser votre jeton d’identité pour accéder aux ressources Azure. Dans ce scénario, il s’agit du compte de stockage créé dans les sections précédentes.
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()
Ce déploiement peut prendre approximativement entre 8 et 14 minutes selon que l’environnement/l’image sous-jacent est généré pour la première fois ou non. Les déploiements ultérieurs avec le même environnement seront plus rapides.
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
Notes
La valeur de l’argument --name peut écraser la clé name dans le fichier YAML.
Vérifiez l’état du déploiement.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
La méthode init du script de scoring lit le fichier à partir de votre compte de stockage à l’aide du jeton d’identité managée affectée par le système.
Pour vérifier la sortie de la méthode init, consultez le journal de déploiement avec le code suivant.
# 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
Notes
La valeur de l’argument --name peut écraser la clé name dans le fichier YAML.
Une fois que la commande s’exécute, vous pouvez vérifier l’état du déploiement.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Notes
La méthode init du script de scoring lit le fichier à partir de votre compte de stockage à l’aide du jeton d’identité managée affectée par l’utilisateur.
Pour vérifier la sortie de la méthode init, consultez le journal de déploiement avec le code suivant.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
La méthode init du script de scoring lit le fichier à partir de votre compte de stockage à l’aide du jeton d’identité managée affectée par l’utilisateur.
Pour vérifier la sortie de la méthode init, consultez le journal de déploiement avec le code suivant.
Une fois votre déploiement effectué, le modèle, l’environnement et le point de terminaison sont inscrits auprès de votre espace de travail Azure Machine Learning.
Tester le point de terminaison
Une fois votre point de terminaison en ligne déployé, testez et confirmez son fonctionnement avec une demande. Les détails de l’inférence varient d’un modèle à l’autre. Pour ce guide, les paramètres de requête JSON se présentent comme suit :
Supprimer le point de terminaison et le compte de stockage
Si vous n’envisagez pas de continuer à utiliser le point de terminaison en ligne déployé et le stockage, supprimez-les pour réduire les coûts. Lorsque vous supprimez le point de terminaison, tous ses déploiements associés sont également supprimés.
Pour connaître les limitations relatives au point de terminaison en ligne managé et au point de terminaison en ligne Kubernetes, consultez les limites des points de terminaison en ligne