Узнайте, как получить доступ к ресурсам Azure из скрипта оценки, используя сетевую конечную точку и либо управляемое удостоверение, назначаемое системой, либо управляемое удостоверение, назначаемое пользователем.
Управляемые конечные точки и конечные точки Kubernetes позволяют Машинное обучение Azure управлять бременем подготовки вычислительных ресурсов и развертыванием модели машинного обучения. Обычно модели требуется доступ к ресурсам Azure, например, реестру контейнеров Azure или хранилищу BLOB-объектов для вывода; управляемое удостоверение позволяет получить доступ к этим ресурсам без необходимости управлять учетными данными в коде. Узнайте больше об управляемых удостоверениях.
В настоящем руководстве информация приводится на основании допущения о том, что у вас нет управляемого удостоверения, учетной записи хранения или сетевой конечной точки. Если эти компоненты уже имеются, перейдите к разделу Предоставление разрешения на доступ к управляемому удостоверению.
Для использования машинного обучения Azure необходима подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе. Опробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.
Группа ресурсов Azure, в которой у вас (или вашего субъекта-службы) должен быть доступ User Access Administrator и Contributor. У вас будет такая группа ресурсов, если вы настроили расширение ML в соответствии с приведенной выше статьей.
Рабочая область Машинного обучения Azure. У вас будет такая рабочая область, если вы настроили расширение ML в соответствии с приведенной выше статьей.
Обученная модель машинного обучения, готовая для оценки и развертывания. Если вы используете этот пример, модель предоставляется.
Если вы еще не задали параметры по умолчанию для Azure CLI, сохраните их. Чтобы не указывать параметры для подписки, рабочей области и группы ресурсов несколько раз, используйте следующий код:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Чтобы использовать пример, клонируйте репозиторий выборок
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Для использования машинного обучения Azure необходима подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе. Опробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.
Группа ресурсов Azure, в которой у вас (или вашего субъекта-службы) должен быть доступ User Access Administrator и Contributor. У вас будет такая группа ресурсов, если вы настроили расширение ML в соответствии с приведенной выше статьей.
Рабочая область Машинного обучения Azure. У вас будет такая рабочая область, если вы настроили расширение ML в соответствии с приведенной выше статьей.
Обученная модель машинного обучения, готовая для оценки и развертывания. Если вы используете этот пример, модель предоставляется.
Если вы еще не задали параметры по умолчанию для Azure CLI, сохраните их. Чтобы не указывать параметры для подписки, рабочей области и группы ресурсов несколько раз, используйте следующий код:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Чтобы использовать пример, клонируйте репозиторий выборок
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Для использования машинного обучения Azure необходима подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе. Опробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.
Группа ресурсов Azure, в которой у вас (или вашего субъекта-службы) должен быть доступ User Access Administrator и Contributor. У вас будет такая группа ресурсов, если вы настроили расширение ML в соответствии с приведенной выше статьей.
Рабочая область Машинного обучения Azure. У вас будет такая рабочая область, если вы настроили расширение ML в соответствии с приведенной выше статьей.
Обученная модель машинного обучения, готовая для оценки и развертывания. Если вы используете этот пример, модель предоставляется.
Клонируйте репозиторий примеров.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Чтобы следовать вместе с этой записной книжкой, перейдите к примеру записной книжки-компаньона в каталогеsdk/endpoints/online/managed/managed-identities.
Для этого примера требуются дополнительные пакеты Python:
Клиент управления служба хранилища Microsoft Azure
Для использования машинного обучения Azure необходима подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе. Опробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.
Разрешения на создание ролей для подписки или ресурсов Azure, к которым обращается удостоверение, назначаемое пользователем.
Группа ресурсов Azure, в которой у вас (или вашего субъекта-службы) должен быть доступ User Access Administrator и Contributor. У вас будет такая группа ресурсов, если вы настроили расширение ML в соответствии с приведенной выше статьей.
Рабочая область Машинного обучения Azure. У вас будет такая рабочая область, если вы настроили расширение ML в соответствии с приведенной выше статьей.
Обученная модель машинного обучения, готовая для оценки и развертывания. Если вы используете этот пример, модель предоставляется.
Клонируйте репозиторий примеров.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Чтобы следовать вместе с этой записной книжкой, перейдите к примеру записной книжки-компаньона в каталогеsdk/endpoints/online/managed/managed-identities.
Для этого примера требуются дополнительные пакеты Python:
Удостоверение конечной точки является неизменяемым. Во время создания конечной точки его можно связать с удостоверением, назначенным системой (по умолчанию) или удостоверением, назначенным пользователем. После создания конечной точки удостоверение нельзя изменить.
Если хранилище ARC и BLOB-объектов настроены как частные, т. е. за виртуальной сетью, то доступ к конечной точке Kubernetes должен находиться по закрытой ссылке независимо от того, является ли ваша рабочая область общедоступной или частной. Дополнительные сведения о настройке приватного канала см. в статье "Как защитить виртуальную сеть рабочей области".
Настройка переменных для развертывания
Задайте имена переменных для рабочей области, расположения рабочей области и конечной точки, которую вы создаете для использования с развертыванием.
Затем укажите имена учетной записи хранения BLOB-объектов, контейнера больших двоичных объектов и файла. Эти имена переменных задаются здесь и используются в командах az storage account create и az storage container create в следующем разделе.
Следующий фрагмент кода экспортирует эти значения как переменные среды:
После экспорта этих переменных создайте текстовый файл локально. При развертывании конечной точки скрипт оценки будет обращаться к этому текстовому файлу с использованием назначаемого системой управляемого удостоверения, сгенерированного при создании конечной точки.
Определите имя конечной точки, рабочей области, расположения рабочей области и экспортируйте это значение в качестве переменной среды:
Затем укажите имена учетной записи хранения BLOB-объектов, контейнера больших двоичных объектов и файла. Эти имена переменных задаются здесь и используются в командах az storage account create и az storage container create в следующем разделе.
После экспорта этих переменных создайте текстовый файл локально. При развертывании конечной точки скрипт оценки будет обращаться к этому текстовому файлу с использованием назначаемого пользователем управляемого удостоверения, используемого в конечной точке.
Определите имя удостоверения пользователя и экспортируйте это значение в качестве переменной среды:
export UAI_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
Назначьте значения переменным, связанным с рабочей областью и развертыванием:
Затем укажите имена учетной записи хранения BLOB-объектов, контейнера больших двоичных объектов и файла. Эти имена переменных определяются здесь и ссылаются на код StorageManagementClientContainerClientсоздания учетной записи хранения и контейнера.
После назначения этих переменных создайте текстовый файл локально. При развертывании конечной точки скрипт оценки будет обращаться к этому текстовому файлу с использованием назначаемого системой управляемого удостоверения, сгенерированного при создании конечной точки.
Теперь получите дескриптор рабочей области и получите его расположение:
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
Мы будем использовать это значение для создания учетной записи хранения.
Назначьте значения переменным, связанным с рабочей областью и развертыванием:
Затем укажите имена учетной записи хранения BLOB-объектов, контейнера больших двоичных объектов и файла. Эти имена переменных определяются здесь и ссылаются на код StorageManagementClientContainerClientсоздания учетной записи хранения и контейнера.
После назначения этих переменных создайте текстовый файл локально. При развертывании конечной точки скрипт оценки получит доступ к этому текстовому файлу с помощью управляемого удостоверения, назначаемого пользователем при создании конечной точки.
Определите имя имени удостоверения пользователя:
uai_name = "<USER_ASSIGNED_IDENTITY_NAME>"
Теперь получите дескриптор рабочей области и получите его расположение:
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
Мы будем использовать это значение для создания учетной записи хранения.
Чтобы развернуть сетевую конечную точку с помощью интерфейса командной строки, необходимо определить конфигурацию в файле YAML. Дополнительные сведения о схеме YAML см. в справочном документе о подключенной конечной точке YAML.
Файлы YAML в следующих примерах используются для создания сетевых конечных точек.
Следующий пример YAML находится в endpoints/online/managed/managed-identities/1-sai-create-endpoint. В файле:
определяется имя для ссылки на конечную точку, my-sai-endpoint.
задается тип авторизации, используемый для доступа к конечной точке, auth-mode: key.
Чтобы развернуть сетевую конечную точку с помощью интерфейса командной строки, необходимо определить конфигурацию в файле YAML. Дополнительные сведения о схеме YAML см. в справочном документе о подключенной конечной точке YAML.
Файлы YAML в следующих примерах используются для создания сетевых конечных точек.
Следующий пример YAML находится в endpoints/online/managed/managed-identities/1-uai-create-endpoint. В файле:
определяется имя для ссылки на конечную точку, my-uai-endpoint.
задается тип авторизации, используемый для доступа к конечной точке, auth-mode: key.
указывается тип используемого удостоверения, type: user_assigned
Для развертывания сетевой конечной точки с помощью пакета SDK для Python версии 2 объекты можно использовать для определения конфигурации, как показано ниже. Кроме того, файлы YAML можно загрузить с помощью .load метода.
Следующий объект конечной точки Python:
Назначает имя, по которому необходимо ссылаться на конечную точку переменной "endpoint_name".
Указывает тип авторизации, используемый для доступа к конечной точке auth-mode="key".
Для развертывания сетевой конечной точки с помощью пакета SDK для Python версии 2 объекты можно использовать для определения конфигурации, как показано ниже. Кроме того, файлы YAML можно загрузить с помощью .load метода.
Для удостоверения, назначаемого пользователем, мы определим конфигурацию конечной точки ниже после создания управляемого удостоверения, назначаемого пользователем.
Этот объект развертывания:
Указывает, что тип развертывания, который требуется создать, является классом ManagedOnlineDeployment .
указывается, что у конечной точки есть связанное развертывание blue;
Настраивает сведения о развертывании, например и nameinstance_count
Определяет дополнительные объекты и связывает их с развертыванием для Model,CodeConfigurationи Environment.
Включает переменные среды, необходимые для управляемого удостоверения, назначаемого пользователем, для доступа к хранилищу.
Добавляет переменную среды заполнителя для UAI_CLIENT_ID, которая будет добавлена после создания и до фактического развертывания этой конфигурации.
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",
},
)
Создание управляемого удостоверения
Чтобы получить доступ к ресурсам Azure, создайте назначаемое системой или назначаемое пользователем управляемое удостоверение для сетевой конечной точки.
При создании сетевой конечной точкиавтоматически создается управляемое удостоверение, назначаемое системой, поэтому вам не нужно создавать его отдельно.
Для создания управляемого удостоверения, назначаемого пользователем, используйте следующее:
az identity create --name $UAI_NAME
При создании сетевой конечной точкиавтоматически создается управляемое удостоверение, назначаемое системой, поэтому вам не нужно создавать его отдельно.
Чтобы создать управляемое удостоверение, назначаемое пользователем, сначала получите дескриптор в 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,
)
В этом примере создается учетная запись хранилища BLOB-объектов и контейнер BLOB-объектов, а затем ранее созданный текстовый файл отправляется в контейнер BLOB-объектов.
Именно этой учетной записи хранения и этому контейнеру BLOB-объектов будет предоставлен доступ к сетевой конечной точке и управляемому удостоверению.
Затем отправьте большой двоичный объект в контейнер с помощью ContainerClient:
with open(file_name, "rb") as f:
container_client.upload_blob(name=file_name, data=f.read())
Создание сетевой конечной точки
Следующий код создает управляемую сетевую конечную точку без указания развертывания.
Предупреждение
Удостоверение конечной точки является неизменяемым. Во время создания конечной точки его можно связать с удостоверением, назначенным системой (по умолчанию) или удостоверением, назначенным пользователем. После создания конечной точки удостоверение нельзя изменить.
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
Чтобы проверить состояние конечной точки, выполните указанные ниже действия.
Предоставление разрешения на доступ к управляемому удостоверению
Важно!
Для сетевых конечных точек требуется разрешение на запрос реестра контейнеров Azure, разрешение AcrPull на доступ к реестру контейнеров и разрешение читателя данных хранилища BLOB-объектов для рабочей области по умолчанию.
Вы можете разрешить сетевой конечной точке получать доступ к хранилищу через назначаемое системой управляемое удостоверение или предоставить разрешение назначаемому пользователем управляемому удостоверению на доступ к учетной записи хранения, созданной в предыдущем разделе.
Получите назначаемое системой управляемое удостоверение, созданное для конечной точки.
system_identity=`az ml online-endpoint show --name $ENDPOINT_NAME --query "identity.principal_id" -o tsv`
Отсюда можно предоставить назначаемому системой управляемому удостоверению разрешение для доступа к хранилищу.
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`
Получите реестр контейнеров, связанный с рабочей областью.
container_registry=`az ml workspace show --name $WORKSPACE --query container_registry -o tsv`
Получите хранилище по умолчанию для рабочей области.
storage_account=`az ml workspace show --name $WORKSPACE --query storage_account -o tsv`
Предоставьте разрешение учетной записи хранения управляемому удостоверению, назначаемому пользователем.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_id
Предоставьте разрешение реестра контейнера управляемому удостоверению, назначаемому пользователем.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "AcrPull" --scope $container_registry
Предоставьте разрешение хранилища рабочей области по умолчанию управляемому удостоверению, назначаемому пользователем.
az role assignment create --assignee-object-id $uai_principalid --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope $storage_account
Сначала сделайте список AuthorizationManagementClient определений ролей:
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",
)
Теперь инициализировать один, чтобы сделать назначения ролей:
Затем назначьте Storage Blob Data Reader роль конечной точке. Определение роли извлекается по имени и передается вместе с идентификатором субъекта конечной точки. Роль применяется в область учетной записи хранения, созданной выше, и позволяет конечной точке читать файл.
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
),
)
Сначала сделайте список AuthorizationManagementClient определений ролей:
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",
)
Теперь инициализировать один, чтобы сделать назначения ролей:
Затем получите идентификатор участника и идентификатор клиента управляемого удостоверения, назначаемого пользователем. Чтобы назначить роли, нам нужен только идентификатор участника. Однако перед созданием развертывания мы будем использовать идентификатор клиента для заполнения UAI_CLIENT_ID переменной среды заполнителей.
Затем назначьте Storage Blob Data Reader роль конечной точке. Определение роли извлекается по имени и передается вместе с идентификатором субъекта конечной точки. Роль применяется в область учетной записи хранения, созданной выше, чтобы разрешить конечной точке читать файл.
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",
),
)
Для следующих двух разрешений нам потребуется объекты рабочей области и реестра контейнеров:
Затем назначьте AcrPull роль удостоверению, назначенному пользователем. Эта роль позволяет извлекать изображения из Реестр контейнеров Azure. Область применяется на уровне реестра контейнеров, связанного с рабочей областью.
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",
),
)
Наконец, назначьте Storage Blob Data Reader роль конечной точке в учетной записи хранения рабочей области область. Это назначение роли позволит конечной точке считывать большие двоичные объекты в учетной записи хранения рабочей области, а также только что созданную учетную запись хранения.
Роль имеет то же имя и возможности, что и первая назначенная выше роль, однако она применяется в другой область и имеет другой идентификатор.
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",
),
)
Скрипт оценки для доступа к ресурсу Azure
Обратитесь к следующему скрипту, чтобы узнать, как использовать маркер удостоверения для доступа к ресурсам Azure в этом сценарии (учетная запись хранения создана в предыдущих разделах).
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()
Создание развертывания с использованием конфигурации
Его создание может занять примерно 8–14 минут в зависимости от того, формируются ли базовая среда и образ впервые. Последующие развертывания в той же среде будут выполняться быстрее.
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
Примечание.
Значение аргумента --name может переопределять ключ name в файле YAML.
Проверьте состояние развертывания.
az ml online-deployment show --endpoint-name $ENDPOINT_NAME --name blue
Сведения о том, как уточнить указанные запросы таким образом, чтобы возвращались только определенные данные, приведены в статье Запросы к выходным данным команд Azure CLI.
Примечание.
Метод init в скрипте оценки считывает файл из учетной записи хранения с помощью маркера управляемого удостоверения, назначаемого системой.
Чтобы проверить выходные данные метода init, см. журнал развертывания с приведенным ниже кодом.
# 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
Примечание.
Значение аргумента --name может переопределять ключ name в файле YAML.
После выполнения команды можно проверить состояние развертывания.
az ml online-endpoint show --name $ENDPOINT_NAME
Сведения о том, как уточнить указанные запросы таким образом, чтобы возвращались только определенные данные, приведены в статье Запросы к выходным данным команд Azure CLI.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
Примечание.
Метод init в скрипте оценки считывает файл из учетной записи хранения с помощью маркера управляемого удостоверения, назначаемого пользователем.
Чтобы проверить выходные данные метода init, см. журнал развертывания с приведенным ниже кодом.
# Check deployment logs to confirm blob storage file contents read operation success.
az ml online-deployment get-logs --endpoint-name $ENDPOINT_NAME --name blue
После завершения развертывания модель, среда и конечная точка регистрируются в рабочей области Машинного обучения Azure.
Тестирование конечной точки
После развертывания виртуальной конечной точки проверьте и подтвердите свою операцию с помощью запроса. Особенности вывода зависят от конкретной модели. В этом руководстве параметры запроса JSON выглядят следующим образом:
Если вы не планируете продолжать использовать развернутую сетевую конечную точку и хранилище, удалите их, чтобы уменьшить затраты. При удалении конечной точки также удаляются все связанные с ней развертывания.