Saiba como aceder aos recursos do Azure a partir do seu script de pontuação com um ponto de extremidade online e uma identidade gerida atribuída pelo sistema ou uma identidade gerida atribuída pelo utilizador.
Os pontos de extremidade gerenciados e os pontos de extremidade do Kubernetes permitem que o Azure Machine Learning gerencie a carga de provisionar seu recurso de computação e implantar seu modelo de aprendizado de máquina. Normalmente, seu modelo precisa acessar recursos do Azure, como o Registro de Contêiner do Azure ou seu armazenamento de blob para inferência; Com uma identidade gerenciada, você pode acessar esses recursos sem precisar gerenciar credenciais em seu código. Saiba mais sobre identidades gerenciadas.
Este guia pressupõe que você não tenha uma identidade gerenciada, uma conta de armazenamento ou um ponto de extremidade online. Se já tiver estes componentes, avance para a secção Conceder permissão de acesso à identidade gerida.
Para usar o Azure Machine Learning, você deve ter uma assinatura do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente hoje mesmo a versão gratuita ou paga do Azure Machine Learning .
Um grupo de recursos do Azure, no qual você (ou a entidade de serviço usada) precisa ter acesso de Administrador de Acesso de Usuário e de Colaborador . Você tem esse grupo de recursos se configurou sua extensão de ML de acordo com o artigo anterior.
Uma área de trabalho do Azure Machine Learning. Você já tem um espaço de trabalho se configurou sua extensão de ML de acordo com o artigo anterior.
Um modelo de aprendizado de máquina treinado pronto para pontuação e implantação. Se você estiver acompanhando a amostra, um modelo será fornecido.
Se você ainda não definiu os padrões para a CLI do Azure, salve suas configurações padrão. Para evitar passar os valores da sua assinatura, espaço de trabalho e grupo de recursos várias vezes, execute este código:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Para acompanhar o exemplo, clone o repositório de amostras e, em seguida, altere o diretório para cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Para usar o Azure Machine Learning, você deve ter uma assinatura do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente hoje mesmo a versão gratuita ou paga do Azure Machine Learning .
Um grupo de Recursos do Azure, no qual você (ou a entidade de serviço que usa) precisa ter acesso de Administrador de Acesso de Usuário e Colaborador . Você tem esse grupo de recursos se configurou sua extensão de ML de acordo com o artigo anterior.
Uma área de trabalho do Azure Machine Learning. Você tem um espaço de trabalho se configurou sua extensão de ML de acordo com o artigo acima.
Um modelo de aprendizado de máquina treinado pronto para pontuação e implantação. Se você estiver acompanhando a amostra, um modelo será fornecido.
Se você ainda não definiu os padrões para a CLI do Azure, salve suas configurações padrão. Para evitar passar os valores da sua assinatura, espaço de trabalho e grupo de recursos várias vezes, execute este código:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Para acompanhar o exemplo, clone o repositório de amostras e, em seguida, altere o diretório para cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Para usar o Azure Machine Learning, você deve ter uma assinatura do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente hoje mesmo a versão gratuita ou paga do Azure Machine Learning .
Instale e configure o SDK Python do Azure Machine Learning (v2). Para obter mais informações, consulte Instalar e configurar o SDK (v2).
Um grupo de Recursos do Azure, no qual você (ou a entidade de serviço que usa) precisa ter acesso de Administrador de Acesso de Usuário e Colaborador . Você tem esse grupo de recursos se configurou sua extensão de ML de acordo com o artigo anterior.
Uma área de trabalho do Azure Machine Learning. Você já tem um espaço de trabalho se configurou sua extensão de ML de acordo com o artigo anterior.
Um modelo de aprendizado de máquina treinado pronto para pontuação e implantação. Se você estiver acompanhando a amostra, um modelo será fornecido.
Clone o repositório de amostras e, em seguida, altere o diretório.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Para acompanhar este bloco de anotações, acesse o bloco de anotações de exemplo complementar no diretório sdk/endpoints/online/managed/managed-identities.
Outros pacotes Python são necessários para este exemplo:
Cliente de Gerenciamento de Armazenamento do Microsoft Azure
Cliente de Gerenciamento de Autorização do Microsoft Azure
Para usar o Azure Machine Learning, você deve ter uma assinatura do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente hoje mesmo a versão gratuita ou paga do Azure Machine Learning .
Permissões de criação de função para sua assinatura ou os recursos do Azure acessados pela identidade atribuída pelo usuário.
Instale e configure o SDK Python do Azure Machine Learning (v2). Para obter mais informações, consulte Instalar e configurar o SDK (v2).
Um grupo de Recursos do Azure, no qual você (ou a entidade de serviço que usa) precisa ter acesso de Administrador de Acesso de Usuário e Colaborador . Você tem esse grupo de recursos se configurou sua extensão de ML de acordo com o artigo anterior.
Uma área de trabalho do Azure Machine Learning. Você já tem um espaço de trabalho se configurou sua extensão de ML de acordo com o artigo anterior.
Um modelo de aprendizado de máquina treinado pronto para pontuação e implantação. Se você estiver acompanhando a amostra, um modelo será fornecido.
Clone o repositório de amostras.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Para acompanhar este bloco de anotações, acesse o bloco de anotações de exemplo complementar no diretório sdk/endpoints/online/managed/managed-identities.
Outros pacotes Python são necessários para este exemplo:
Cliente de Gerenciamento MSI do Microsoft Azure
Cliente de Armazenamento do Microsoft Azure
Cliente de Gerenciamento de Autorização do Microsoft Azure
A identidade de um ponto de extremidade é imutável. Durante a criação do ponto de extremidade, você pode associá-lo a uma identidade atribuída pelo sistema (padrão) ou a uma identidade atribuída pelo usuário. Não é possível alterar a identidade depois que o ponto de extremidade é criado.
Se o armazenamento ARC e blob estiver configurado como privado, ou seja, atrás de uma rede virtual, o acesso a partir do ponto de extremidade do Kubernetes deverá ser feito pelo link privado, independentemente de seu espaço de trabalho ser público ou privado. Mais detalhes sobre a configuração de link privado, consulte Como proteger a vnet do espaço de trabalho.
Configurar variáveis para implantação
Configure os nomes das variáveis para o espaço de trabalho, o local do espaço de trabalho e o ponto de extremidade que você deseja criar para uso com sua implantação.
Em seguida, especifique o nome que você deseja dar à sua conta de armazenamento de blob, contêiner de blob e arquivo. Esses nomes de variáveis são definidos aqui e são referidos em az storage account create e az storage container create comandos na próxima seção.
O código a seguir exporta esses valores como variáveis de ambiente:
Depois que essas variáveis forem exportadas, crie um arquivo de texto localmente. Quando o ponto de extremidade é implantado, o script de pontuação acessa esse arquivo de texto usando a identidade gerenciada atribuída pelo sistema que é gerada na criação do ponto de extremidade.
Decida o nome do seu ponto de extremidade, espaço de trabalho e local do espaço de trabalho e, em seguida, exporte esse valor como uma variável de ambiente:
Em seguida, especifique o nome que você deseja dar à sua conta de armazenamento de blob, contêiner de blob e arquivo. Esses nomes de variáveis são definidos aqui e são referidos em az storage account create e az storage container create comandos na próxima seção.
Depois que essas variáveis forem exportadas, crie um arquivo de texto localmente. Quando o ponto de extremidade é implantado, o script de pontuação acessa esse arquivo de texto usando a identidade gerenciada atribuída pelo usuário usada no ponto de extremidade.
Decida o nome do seu nome de identidade de usuário e exporte esse valor como uma variável de ambiente:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Atribua valores para o espaço de trabalho e variáveis relacionadas à implantação:
Em seguida, especifique o nome que você deseja dar à sua conta de armazenamento de blob, contêiner de blob e arquivo. Esses nomes de variáveis são definidos aqui e são referidos na conta de armazenamento e no código de criação de contêiner pelo StorageManagementClient e ContainerClient.
Depois que essas variáveis forem atribuídas, crie um arquivo de texto localmente. Quando o ponto de extremidade é implantado, o script de pontuação acessa esse arquivo de texto usando a identidade gerenciada atribuída pelo sistema que é gerada na criação do ponto de extremidade.
Agora, obtenha um identificador para o espaço de trabalho e recupere sua localização:
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
Use esse valor para criar uma conta de armazenamento.
Atribua valores para o espaço de trabalho e variáveis relacionadas à implantação:
Em seguida, especifique o nome que você deseja dar à sua conta de armazenamento de blob, contêiner de blob e arquivo. Esses nomes de variáveis são definidos aqui e são referidos na conta de armazenamento e no código de criação de contêiner pelo StorageManagementClient e ContainerClient.
Depois que essas variáveis forem atribuídas, crie um arquivo de texto localmente. Quando o ponto de extremidade é implantado, o script de pontuação acessa esse arquivo de texto usando a identidade gerenciada atribuída pelo usuário que é gerada na criação do ponto de extremidade.
Decida o nome da sua identidade de utilizador:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Agora, obtenha um identificador para o espaço de trabalho e recupere sua localização:
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
Use esse valor para criar uma conta de armazenamento.
Para implantar um ponto de extremidade online com a CLI, você precisa definir a configuração em um arquivo YAML. Para obter mais informações sobre o esquema YAML, consulte o documento de referência do YAML do ponto de extremidade online.
Os arquivos YAML nos exemplos a seguir são usados para criar pontos de extremidade online.
O exemplo de YAML a seguir está localizado em endpoints/online/managed/managed-identities/1-sai-create-endpoint. O ficheiro,
Define o nome pelo qual você deseja se referir ao ponto de extremidade, my-sai-endpoint.
Especifica o tipo de autorização a ser usada para acessar o ponto de extremidade, auth-mode: key.
Para implantar um ponto de extremidade online com a CLI, você precisa definir a configuração em um arquivo YAML. Para obter mais informações sobre o esquema YAML, consulte o documento de referência do YAML do ponto de extremidade online.
Os arquivos YAML nos exemplos a seguir são usados para criar pontos de extremidade online.
O exemplo de YAML a seguir está localizado em endpoints/online/managed/managed-identities/1-uai-create-endpoint. O ficheiro,
Define o nome pelo qual você deseja se referir ao ponto de extremidade, my-uai-endpoint.
Especifica o tipo de autorização a ser usada para acessar o ponto de extremidade, auth-mode: key.
Indica o tipo de identidade a ser usado, type: user_assigned
Para implantar um ponto de extremidade online com o Python SDK (v2), os objetos podem ser usados para definir a configuração a seguir. Como alternativa, os arquivos YAML podem ser carregados usando o .load método.
O seguinte objeto de ponto de extremidade do Python:
Atribui o nome pelo qual você deseja se referir ao ponto de extremidade à variável endpoint_name.
Especifica o tipo de autorização a ser usada para acessar o ponto de extremidade auth-mode="key".
Para implantar um ponto de extremidade online com o Python SDK (v2), os objetos podem ser usados para definir a configuração a seguir. Como alternativa, os arquivos YAML podem ser carregados usando o .load método.
Para uma identidade atribuída pelo usuário, você define a configuração do ponto de extremidade depois que a identidade gerenciada atribuída pelo usuário é criada.
Este objeto de implantação:
Especifica que o tipo de implantação que você deseja criar é uma ManagedOnlineDeployment via da classe.
Indica que o ponto de extremidade tem uma implantação associada chamada blue.
Configura os detalhes da implantação, como o name e instance_count
Define mais objetos embutidos e os associa à implantação de Model,CodeConfiguration, e Environment.
Inclui variáveis de ambiente necessárias para que a identidade gerenciada atribuída pelo usuário acesse o armazenamento.
Adiciona uma variável de ambiente de espaço reservado para UAI_CLIENT_ID, que é adicionada após a criação de uma e antes de realmente implantar essa configuração.
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",
},
)
Criar a identidade gerenciada
Para acessar os recursos do Azure, crie uma identidade gerenciada atribuída pelo sistema ou pelo usuário para seu ponto de extremidade online.
Quando você cria um ponto de extremidade online, uma identidade gerenciada atribuída ao sistema é gerada automaticamente para você, portanto, não há necessidade de criar uma identidade separada.
Para criar uma identidade gerenciada atribuída pelo usuário, use o seguinte comando:
az identity create --name $UAI_NAME
Quando você cria um ponto de extremidade online, uma identidade gerenciada atribuída ao sistema é gerada automaticamente para você, portanto, não há necessidade de criar uma identidade separada.
Para criar uma identidade gerenciada atribuída pelo usuário, primeiro obtenha um identificador para o 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,
)
Para este exemplo, crie uma conta de armazenamento de blob e um contêiner de blob e, em seguida, carregue o arquivo de texto criado anteriormente para o contêiner de blob. Você concede ao ponto de extremidade online e à identidade gerenciada acesso a essa conta de armazenamento e contêiner de blob.
Em seguida, carregue um blob para o contêiner com o ContainerClient:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Criar um ponto de extremidade online
O código a seguir cria um ponto de extremidade online sem especificar uma implantação.
Aviso
A identidade de um ponto de extremidade é imutável. Durante a criação do ponto de extremidade, você pode associá-lo a uma identidade atribuída pelo sistema (padrão) ou a uma identidade atribuída pelo usuário. Não é possível alterar a identidade após a criação do ponto de extremidade.
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
Verifique o status do ponto de extremidade com o seguinte.
Conceder permissão de acesso à identidade gerenciada
Importante
Os pontos de extremidade online exigem a permissão de pull do Registro de Contêiner do Azure, a permissão AcrPull para o registro de contêiner e a permissão do Leitor de Dados de Blob de Armazenamento para o armazenamento de dados padrão do espaço de trabalho.
Você pode permitir que a permissão de ponto de extremidade online acesse seu armazenamento por meio de sua identidade gerenciada atribuída pelo sistema ou dar permissão à identidade gerenciada atribuída pelo usuário para acessar a conta de armazenamento criada na seção anterior.
Recupere a identidade gerenciada atribuída ao sistema que foi criada para seu ponto de extremidade.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
A partir daqui, você pode conceder permissão de identidade gerenciada atribuída ao sistema para acessar seu armazenamento.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Recupere o ID do cliente de identidade gerenciada atribuído pelo usuário.
uai_clientid=`az identity list --query "[?name=='$UAI_NAME'].clientId" -o tsv`
uai_principalid=`az identity list --query "[?name=='$UAI_NAME'].principalId" -o tsv`
Recupere o ID de identidade gerenciado atribuído pelo usuário.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Obtenha o registro de contêiner associado ao espaço de trabalho.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Recupere o armazenamento padrão do espaço de trabalho.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Dê permissão de conta de armazenamento à identidade gerenciada atribuída pelo usuário.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Dê permissão de registro de contêiner à identidade gerenciada atribuída ao usuário.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Dê permissão de armazenamento de espaço de trabalho padrão à identidade gerenciada atribuída pelo usuário.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Primeiro, faça uma AuthorizationManagementClient lista de definições de função:
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",
)
Agora, inicialize um para fazer atribuições de função:
Em seguida, atribua a função Leitor de Dados de Blob de Armazenamento ao ponto de extremidade. A definição de função é recuperada pelo nome e passada junto com a ID Principal do ponto de extremidade. A função é aplicada no escopo da conta de armazenamento criada acima e permite que o ponto de extremidade leia o arquivo.
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
),
)
Primeiro, faça uma AuthorizationManagementClient lista de definições de função:
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",
)
Agora, inicialize um para fazer atribuições de função:
Em seguida, obtenha o ID principal e o ID do cliente da identidade gerenciada atribuída pelo usuário. Para atribuir funções, você só precisa da ID principal. No entanto, você usa a ID do cliente para preencher a UAI_CLIENT_ID variável de ambiente de espaço reservado antes de criar a implantação.
Em seguida, atribua a função Leitor de Dados de Blob de Armazenamento ao ponto de extremidade. A definição de função é recuperada pelo nome e passada junto com a ID principal do ponto de extremidade. A função é aplicada no escopo da conta de armazenamento criada acima para permitir que o ponto de extremidade leia o arquivo.
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",
),
)
Para as próximas duas permissões, você precisa dos objetos de registro de espaço de trabalho e contêiner:
Em seguida, atribua a função AcrPull à identidade atribuída pelo usuário. Essa função permite que imagens sejam extraídas de um Registro de Contêiner do Azure. O escopo é aplicado no nível do registro de contêiner associado ao espaço de trabalho.
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",
),
)
Por fim, atribua a função Leitor de Dados de Blob de Armazenamento ao ponto de extremidade no escopo da conta de armazenamento do espaço de trabalho. Essa atribuição de função permite que o ponto de extremidade leia blobs na conta de armazenamento do espaço de trabalho, bem como na conta de armazenamento recém-criada.
A função tem o mesmo nome e os mesmos recursos que a primeira função atribuída acima, no entanto, ela é aplicada em um escopo diferente e tem uma ID diferente.
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 pontuação para acessar o recurso do Azure
Consulte o script a seguir para entender como usar seu token de identidade para acessar recursos do Azure, neste cenário, a conta de armazenamento criada nas seções anteriores.
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()
Essa implantação pode levar aproximadamente de 8 a 14 minutos, dependendo se o ambiente/imagem subjacente está sendo criado pela primeira vez. As implantações subsequentes usando o mesmo ambiente serão mais rápidas.
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
O valor do --name argumento pode substituir a name chave dentro do arquivo YAML.
Verifique o estado da implementação.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Para refinar a consulta acima para retornar apenas dados específicos, consulte Consultar saída de comando da CLI do Azure.
Nota
O método init no script de pontuação lê o arquivo da sua conta de armazenamento usando o token de identidade gerenciado atribuído pelo sistema.
Para verificar a saída do método init, consulte o log de implantação com o código a seguir.
# 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
O valor do --name argumento pode substituir a name chave dentro do arquivo YAML.
Depois que o comando for executado, você poderá verificar o status da implantação.
az ml online-endpoint show --name $ENDPOINT_NAME
Para refinar a consulta acima para retornar apenas dados específicos, consulte Consultar saída de comando da CLI do Azure.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Nota
O método init no script de pontuação lê o arquivo de sua conta de armazenamento usando o token de identidade gerenciado atribuído pelo usuário.
Para verificar a saída do método init, consulte o log de implantação com o código a seguir.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Quando a implantação for concluída, o modelo, o ambiente e o ponto de extremidade serão registrados em seu espaço de trabalho do Azure Machine Learning.
Testar o parâmetro de avaliação
Depois que seu endpoint online for implantado, teste e confirme sua operação com uma solicitação. Os detalhes da inferência variam de modelo para modelo. Para este guia, os parâmetros de consulta JSON têm a seguinte aparência:
Excluir o ponto de extremidade e a conta de armazenamento
Se você não planeja continuar usando o endpoint e o armazenamento online implantados, exclua-os para reduzir custos. Quando você exclui o ponto de extremidade, todas as implantações associadas também são excluídas.