Saiba como acessar os recursos do Azure do seu script de pontuação com um ponto de extremidade online e uma identidade gerenciada atribuída pelo sistema ou identidade gerenciada atribuída pelo usuário.
Os pontos de extremidade gerenciados e do Kubernetes permitem que o Azure Machine Learning gerencie a carga de provisionamento do recurso de computação e implantação do modelo de machine learning. Normalmente, o modelo precisa acessar os recursos do Azure, como o Registro de Contêiner do Azure ou o armazenamento de blobs para inferência. Com uma identidade gerenciada, é possível acessar esses recursos sem precisar gerenciar credenciais no código. Saiba mais sobre as identidades gerenciadas.
Este guia pressupõe que você não tem uma identidade gerenciada, uma conta de armazenamento ou um ponto de extremidade online. Se já tiver estes componentes, avance para a seção Conceder permissão de acesso à identidade gerenciada.
Para usar o Azure Machine Learning, você precisa ter uma assinatura do Azure. Caso não tenha uma assinatura 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 você usa) precisa ter acesso de Administrador de acesso do usuário e de Colaborador. Você terá esse grupo de recursos se tiver configurado a extensão de ML de acordo com o artigo anterior.
Um Workspace do Azure Machine Learning. Você já terá um workspace se tiver configurado a extensão de ML de acordo com o artigo anterior.
Um modelo de machine learning treinado pronto para pontuação e implantação. Se você estiver utilizando a amostra, um modelo será fornecido.
Se você ainda não definiu os padrões da CLI do Azure, salve as configurações padrão. Para evitar passar os valores para 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 utilizar a amostra, clone o repositório de amostras e 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ê precisa ter uma assinatura do Azure. Caso não tenha uma assinatura 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 você usa) precisa ter acesso de Administrador de acesso do usuário e de Colaborador. Você terá esse grupo de recursos se tiver configurado a extensão de ML de acordo com o artigo anterior.
Um Workspace do Azure Machine Learning. Você terá um workspace se tiver configurado sua extensão de ML de acordo com o artigo acima.
Um modelo de machine learning treinado pronto para pontuação e implantação. Se você estiver utilizando a amostra, um modelo será fornecido.
Se você ainda não definiu os padrões da CLI do Azure, salve as configurações padrão. Para evitar passar os valores para 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 utilizar a amostra, clone o repositório de amostras e 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ê precisa ter uma assinatura do Azure. Caso não tenha uma assinatura 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 do Python para o Azure Machine Learning (v2). Para obter mais informações, confira Instalar e configurar o SDK (v2).
Um grupo de recursos do Azure, no qual você (ou a entidade de serviço que você usa) precisa ter acesso de Administrador de acesso do usuário e de Colaborador. Você terá esse grupo de recursos se tiver configurado a extensão de ML de acordo com o artigo anterior.
Um Workspace do Azure Machine Learning. Você já terá um workspace se tiver configurado a extensão de ML de acordo com o artigo anterior.
Um modelo de machine learning treinado pronto para pontuação e implantação. Se você estiver utilizando a amostra, um modelo será fornecido.
Clone o repositório de amostras e altere o diretório.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Para utilizar este notebook, acesse o notebook 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 do Armazenamento do Microsoft Azure
Cliente de gerenciamento de autorização do Microsoft Azure
Para usar o Azure Machine Learning, você precisa ter uma assinatura do Azure. Caso não tenha uma assinatura 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 a assinatura ou para os recursos do Azure acessados pela identidade atribuída pelo usuário.
Instale e configure o SDK do Python para o Azure Machine Learning (v2). Para obter mais informações, confira Instalar e configurar o SDK (v2).
Um grupo de recursos do Azure, no qual você (ou a entidade de serviço que você usa) precisa ter acesso de Administrador de acesso do usuário e de Colaborador. Você terá esse grupo de recursos se tiver configurado a extensão de ML de acordo com o artigo anterior.
Um Workspace do Azure Machine Learning. Você já terá um workspace se tiver configurado a extensão de ML de acordo com o artigo anterior.
Um modelo de machine learning treinado pronto para pontuação e implantação. Se você estiver utilizando a amostra, um modelo será fornecido.
Clone o repositório de exemplos.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Para utilizar este notebook, acesse o notebook 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 MSI do Microsoft Azure
Cliente do 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 após a criação do ponto de extremidade.
Se o ARC e o armazenamento de blobs estiverem configurados como particulares, ou seja, protegidos por uma rede virtual, o acesso do ponto de extremidade do Kubernetes deverá ser feito por meio do link privado, independentemente do workspace ser público ou particular. Confira mais detalhes sobre a configuração do link privado em Como proteger a VNet do workspace.
Configurar variáveis para implantação
Configurar os nomes de variáveis para o workspace, a localização do workspace e o ponto de extremidade que você deseja criar para usar com sua implantação.
Em seguida, especifique como você deseja nomear a sua conta de armazenamento de blobs, o contêiner de blobs e o arquivo. Esses nomes de variáveis são definidos aqui e são referenciados nos comandos az storage account create e az storage container create na próxima seção.
O seguinte código 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 utilizando a identidade gerenciada atribuída pelo sistema, que é gerada ao criar o ponto de extremidade.
Decida o nome do ponto de extremidade, do workspace e do local do workspace e exporte esse valor como uma variável de ambiente:
Em seguida, especifique como você deseja nomear a sua conta de armazenamento de blobs, o contêiner de blobs e o arquivo. Esses nomes de variáveis são definidos aqui e são referenciados nos comandos az storage account create e az storage container create 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 o arquivo de texto usando a identidade gerenciada atribuída pelo usuário que é 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 workspace e variáveis relacionadas à implantação:
Em seguida, especifique como você deseja nomear a sua conta de armazenamento de blobs, o contêiner de blobs e o arquivo. Esses nomes de variáveis são definidos aqui e referenciados na conta de armazenamento e no código de criação de contêiner por 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 utilizando a identidade gerenciada atribuída pelo sistema, que é gerada ao criar o ponto de extremidade.
Agora, obtenha um identificador para o workspace e recupere a respectiva 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
Utilize este valor para criar uma conta de armazenamento.
Atribua valores para o workspace e variáveis relacionadas à implantação:
Em seguida, especifique como você deseja nomear a sua conta de armazenamento de blobs, o contêiner de blobs e o arquivo. Esses nomes de variáveis são definidos aqui e referenciados na conta de armazenamento e no código de criação de contêiner por 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 utilizando a identidade gerenciada atribuída pelo usuário, que é gerada ao criar o ponto de extremidade.
Decida qual será o nome da sua identidade de usuário:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Agora, obtenha um identificador para o workspace e recupere a respectiva 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
Utilize este valor para criar uma conta de armazenamento.
Para implantar um ponto de extremidade online com a CLI, defina a configuração em um arquivo YAML. Para obter mais informações sobre o esquema YAML, confira o documento de referência YAML do ponto de extremidade online.
Os arquivos YAML são usados para criar pontos de extremidade online nos exemplos a seguir.
O YAML de exemplo a seguir está em endpoints/online/managed/managed-identities/1-sai-create-endpoint. O arquivo,
Define o nome que você deseja atribuir ao ponto de extremidade my-sai-endpoint.
Especifica o tipo de autorização a ser usado para acessar o ponto de extremidade auth-mode: key.
Para implantar um ponto de extremidade online com a CLI, defina a configuração em um arquivo YAML. Para obter mais informações sobre o esquema YAML, confira o documento de referência YAML do ponto de extremidade online.
Os arquivos YAML são usados para criar pontos de extremidade online nos exemplos a seguir.
O YAML de exemplo a seguir está em endpoints/online/managed/managed-identities/1-uai-create-endpoint. O arquivo,
Define o nome que você deseja atribuir ao ponto de extremidade my-uai-endpoint.
Especifica o tipo de autorização a ser usado para acessar o ponto de extremidade auth-mode: key.
Indica o tipo de identidade a ser usado, type: user_assigned
É possível usar objetos para definir a configuração a seguir a fim de implantar um ponto de extremidade online com o SDK do Python (v2). Como alternativa, os arquivos YAML podem ser carregados usando o método .load.
O seguinte objeto de ponto de extremidade Python:
Atribui o nome pelo qual você deseja se referir ao ponto de extremidade para a variável endpoint_name.
Especifica o tipo de autorização a ser usado para acessar o ponto de extremidade auth-mode="key".
É possível usar objetos para definir a configuração a seguir a fim de implantar um ponto de extremidade online com o SDK do Python (v2). Como alternativa, os arquivos YAML podem ser carregados usando o método .load.
Para uma identidade atribuída pelo usuário, você define a configuração do ponto de extremidade após a criação da identidade gerenciada atribuída pelo usuário.
Este objeto de implantação:
Especifica que o tipo de implantação que você quer criar é um ManagedOnlineDeployment por meio da classe.
Indica que o ponto de extremidade tem uma implantação associada chamada blue.
Configura os detalhes da implantação, como name e instance_count
Define mais objetos em linha e os associa à implantação para Model,CodeConfiguration e Environment.
Inclui as 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 variável e antes da implantação efetiva da 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 o ponto de extremidade online.
Quando você cria um ponto de extremidade online, uma identidade gerenciada atribuída pelo sistema é gerada automaticamente para você, portanto, não é necessário criar uma a parte.
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 pelo sistema é gerada automaticamente para você, portanto, não é necessário criar uma a parte.
Para criar uma identidade gerenciada atribuída pelo usuário, primeiro obtenha um identificador para 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,
)
Neste exemplo, crie uma conta de armazenamento de blobs, um contêiner de blob e carregue o arquivo de texto criado anteriormente no contêiner de blobs. Você concede ao ponto de extremidade online e à identidade gerenciada acesso a essa conta de armazenamento e ao contêiner de blobs.
Depois, carregue um blob no contêiner com 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. Após a criação do banco de dados, não é possível alterar a identidade.
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 as etapas a seguir.
Conceder permissão de acesso para a identidade gerenciada
Importante
Os pontos de extremidade online necessitam de permissão de pull do Registro de Contêiner do Azure, permissão de AcrPull, para o registro de contêiner e permissão do Leitor de Dados de Armazenamento de Blobs para o armazenamento de dados padrão do workspace.
Você pode fazer com que a permissão de ponto de extremidade online acesse o seu armazenamento por meio da identidade gerenciada atribuída pelo sistema ou conceder permissão à identidade gerenciada atribuída pelo usuário para acessar a conta de armazenamento criada na seção anterior.
Recuperar a identidade gerenciada atribuída ao sistema que foi criada para o seu ponto de extremidade.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Deste ponto em diante, você pode dar à identidade gerenciada atribuída ao sistema permissão para acessar o seu armazenamento.
az role assignment create --assignee-object-id $system_identity --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Recuperar a ID do cliente de uma identidade gerenciada atribuída 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`
Recuperar a ID da identidade gerenciada atribuída pelo usuário.
uai_id=`az identity list --query "[?name=='$UAI_NAME'].id" -o tsv`
Obter o registro de contêiner associado ao workspace.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Recuperar o armazenamento padrão do workspace.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Conceder 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
Conceder permissão de registro de contêiner à identidade gerenciada atribuída pelo usuário.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Conceder permissão de armazenamento de workspace 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 um AuthorizationManagementClient para listar as 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 uma delas para atribuir funções:
Em seguida, atribua a função de Leitor de dados do blob de armazenamento ao ponto de extremidade. A definição de função é recuperada pelo nome e transmitida com a ID da entidade de segurança 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 um AuthorizationManagementClient para listar as 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 uma delas para atribuir funções:
Em seguida, obtenha a ID da entidade de segurança e a ID do cliente da identidade gerenciada atribuída pelo usuário. Para atribuir funções, somente a ID da entidade de segurança é necessária. No entanto, você usará a ID do cliente para preencher a variável de ambiente de espaço reservado UAI_CLIENT_ID antes de criar a implantação.
Em seguida, atribua a função de Leitor de dados do blob de armazenamento ao ponto de extremidade. A definição de função é recuperada pelo nome e transmitida com a ID da entidade de segurança 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 do workspace e dos objetos do registro de contêiner:
Em seguida, atribua a função AcrPull à identidade atribuída pelo usuário. Essa função permite que as 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 workspace.
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 de Leitor de dados do blob de armazenamento ao ponto de extremidade no escopo da conta de armazenamento do workspace. Essa atribuição de função permitirá que o ponto de extremidade leia blobs na conta de armazenamento do workspace, bem como na conta de armazenamento recém-criada.
A função tem o mesmo nome e as mesmas funcionalidades que a primeira função atribuída acima, mas é aplicada a 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 os recursos do Azure, nesse 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 cerca de 8 a 14 minutos, dependendo se o ambiente ou a imagem subjacente está sendo criada pela primeira vez. As próximas implantações que usarem 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
Observação
O valor do argumento --name pode substituir a chave name dentro do arquivo YAML.
Verifique o status da implantação.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
O método init no script de pontuação lê o arquivo na conta de armazenamento usando o token de identidade gerenciada atribuída pelo sistema.
Para verificar a saída do método init, confira 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
Observação
O valor do argumento --name pode substituir a chave name dentro do arquivo YAML.
Após o comando ser executado, é possível verificar o status da implantação.
Quando a implantação for concluída, o modelo, o ambiente e o ponto de extremidade serão registrados em seu workspace do Azure Machine Learning.
Testar o ponto de extremidade
Depois que o ponto de extremidade online for implantado, teste e confirme sua operação com uma solicitação. Os detalhes de inferência variam de modelo para modelo. Neste guia, os parâmetros de consulta JSON são semelhantes a:
Excluir o ponto de extremidade e a conta de armazenamento
Se você não pretende continuar usando o armazenamento e o ponto de extremidade online implantados, exclua-os para reduzir os custos. Quando você exclui o ponto de extremidade, todas as implantações associadas a ele também são excluídas.