Узнайте, как получить доступ к ресурсам Azure из скрипта оценки, используя сетевую конечную точку и либо управляемое удостоверение, назначаемое системой, либо управляемое удостоверение, назначаемое пользователем.
Управляемые конечные точки и конечные точки Kubernetes позволяют Машинное обучение Azure управлять бременем подготовки вычислительных ресурсов и развертыванием модели машинного обучения. Как правило, модель должна получить доступ к ресурсам Azure, таким как Реестр контейнеров Azure или хранилище BLOB-объектов для вывода; с управляемым удостоверением вы можете получить доступ к этим ресурсам без необходимости управлять учетными данными в коде. Узнайте больше об управляемых удостоверениях.
Для использования машинного обучения Azure необходима подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе. Опробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.
Группа ресурсов Azure, в которой требуется (или субъект-служба), должна иметь доступ администратора доступа пользователей и участника . У вас есть такая группа ресурсов, если вы настроили расширение машинного обучения в соответствии с предыдущей статьей.
Рабочая область Машинного обучения Azure. У вас уже есть рабочая область, если вы настроили расширение машинного обучения в соответствии с предыдущей статьей.
Обученная модель машинного обучения, готовая для оценки и развертывания. Если вы работаете вместе с примером, предоставляется модель.
Если вы еще не задали параметры по умолчанию для Azure CLI, сохраните их. Чтобы не указывать параметры для подписки, рабочей области и группы ресурсов несколько раз, используйте следующий код:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Чтобы следовать примеру, клонируйте репозиторий примеров и измените каталог на cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Для использования машинного обучения Azure необходима подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе. Опробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.
Группа ресурсов Azure, в которой требуется (или субъект-служба), должна иметь доступ администратора доступа пользователей и участника . У вас есть такая группа ресурсов, если вы настроили расширение машинного обучения в соответствии с предыдущей статьей.
Рабочая область Машинного обучения Azure. У вас есть рабочая область, если вы настроили расширение машинного обучения в соответствии с приведенной выше статьей.
Обученная модель машинного обучения, готовая для оценки и развертывания. Если вы работаете вместе с примером, предоставляется модель.
Если вы еще не задали параметры по умолчанию для Azure CLI, сохраните их. Чтобы не указывать параметры для подписки, рабочей области и группы ресурсов несколько раз, используйте следующий код:
az account set --subscription <subscription ID>
az configure --defaults gitworkspace=<Azure Machine Learning workspace name> group=<resource group>
Чтобы следовать примеру, клонируйте репозиторий примеров и измените каталог на cli.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Для использования машинного обучения Azure необходима подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе. Опробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.
Группа ресурсов Azure, в которой требуется (или субъект-служба), должна иметь доступ администратора доступа пользователей и участника . У вас есть такая группа ресурсов, если вы настроили расширение машинного обучения в соответствии с предыдущей статьей.
Рабочая область Машинного обучения Azure. У вас уже есть рабочая область, если вы настроили расширение машинного обучения в соответствии с предыдущей статьей.
Обученная модель машинного обучения, готовая для оценки и развертывания. Если вы работаете вместе с примером, предоставляется модель.
Клонируйте репозиторий примеров, а затем измените каталог.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Чтобы следовать вместе с этой записной книжкой, получите доступ к записной книжке-компаньона в каталоге sdk/endpoints/online/managed-identities.
Для этого примера требуются другие пакеты Python:
Клиент управления служба хранилища Microsoft Azure
Для использования машинного обучения Azure необходима подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе. Опробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.
Разрешения на создание ролей для подписки или ресурсов Azure, к которым обращается назначаемое пользователем удостоверение.
Группа ресурсов Azure, в которой требуется (или субъект-служба), должна иметь доступ администратора доступа пользователей и участника . У вас есть такая группа ресурсов, если вы настроили расширение машинного обучения в соответствии с предыдущей статьей.
Рабочая область Машинного обучения Azure. У вас уже есть рабочая область, если вы настроили расширение машинного обучения в соответствии с предыдущей статьей.
Обученная модель машинного обучения, готовая для оценки и развертывания. Если вы работаете вместе с примером, предоставляется модель.
Клонируйте репозиторий примеров.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/endpoints/online/managed/managed-identities
Чтобы следовать вместе с этой записной книжкой, получите доступ к записной книжке-компаньона в каталоге sdk/endpoints/online/managed-identities.
Удостоверение конечной точки является неизменяемым. Во время создания конечной точки его можно связать с удостоверением, назначенным системой (по умолчанию) или удостоверением, назначенным пользователем. После создания конечной точки невозможно изменить удостоверение.
Если хранилище 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 находится в конечных точках, в сети, в сети, управляемых и управляемых удостоверениях/1-sai-create-endpoint. В файле:
определяется имя для ссылки на конечную точку, my-sai-endpoint.
задается тип авторизации, используемый для доступа к конечной точке, auth-mode: key.
Чтобы развернуть сетевую конечную точку с помощью интерфейса командной строки, необходимо определить конфигурацию в файле YAML. Дополнительные сведения о схеме YAML см. в справочном документе о подключенной конечной точке YAML.
Файлы YAML в следующих примерах используются для создания сетевых конечных точек.
Следующий пример YAML находится в конечных точках,online/managed/managed-удостоверениях/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",
)
Теперь инициализировать один, чтобы сделать назначения ролей:
Затем назначьте роль чтения данных BLOB-объектов хранилища конечной точке. Определение роли извлекается по имени и передается вместе с идентификатором субъекта конечной точки. Роль применяется в области созданной выше учетной записи хранения и позволяет конечной точке читать файл.
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 среды заполнителей перед созданием развертывания.
Затем назначьте роль чтения данных BLOB-объектов хранилища конечной точке. Определение роли извлекается по имени и передается вместе с идентификатором субъекта конечной точки. Роль применяется в области учетной записи хранения, созданной выше, чтобы разрешить конечной точке читать файл.
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",
),
)
Наконец, назначьте роль средства чтения данных BLOB-объектов хранилища конечной точке в области учетной записи хранения рабочей области. Это назначение роли позволяет конечной точке считывать большие двоичные объекты в учетной записи хранения рабочей области, а также только что созданную учетную запись хранения.
Роль имеет то же имя и возможности, что и первая назначенная выше роль, однако она применяется в другой области и имеет другой идентификатор.
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 выглядят следующим образом:
Если вы не планируете продолжать использовать развернутую сетевую конечную точку и хранилище, удалите их, чтобы уменьшить затраты. При удалении конечной точки также удаляются все связанные с ней развертывания.