Поделиться через


Развертывание потока в онлайн-конечной точке для вывода в режиме реального времени с помощью CLI

В этой статье вы узнаете, как развернуть поток в управляемой сетевой конечной точке или в веб-конечной точке Kubernetes для использования в режиме реального времени для вывода с Машинное обучение Azure версии 2 CLI.

Прежде чем приступить к тестированию потока, убедитесь, что он готов к развертыванию в рабочей среде. Дополнительные сведения о тестировании потока см. в статье "Тестирование потока". После тестирования потока вы узнаете, как создать управляемую конечную точку и развертывание в Сети, а также как использовать конечную точку для вывода в режиме реального времени.

  • В данном разделе описано, как использовать интерфейс командной строки.
  • Пакет SDK для Python не рассматривается в этой статье. Вместо этого см. пример записной книжки GitHub. Чтобы использовать пакет SDK для Python, необходимо использовать пакет SDK Python версии 2 для Машинное обучение Azure. Дополнительные сведения см. в статье "Установка пакета SDK для Python версии 2 для Машинное обучение Azure".

Внимание

Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендована для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Необходимые компоненты

  • Azure CLI и расширение Машинное обучение Azure в Azure CLI. Дополнительные сведения см. в разделе Установка, настройка и использование CLI (версия 2).
  • Рабочая область Машинного обучения Azure. Если у вас ее нет, создайте ее по инструкциям, приведенным в кратком руководстве по созданию ресурсов рабочей области.
  • Управление доступом на основе ролей Azure (Azure RBAC) используется для предоставления доступа к операциям в Машинном обучении Azure. Чтобы выполнить действия, описанные в этой статье, учетная запись пользователя должна быть назначена роль владельца или участника для рабочей области Машинное обучение Azure или настраиваемую роль, разрешающую "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/". Если вы используете студию для создания и управления сетевыми конечными точками и развертываниями, вам потребуется дополнительное разрешение "Microsoft.Resources/deployments/write" от владельца группы ресурсов. Дополнительные сведения см. в статье Управление доступом к рабочей области Машинного обучения Azure.

Примечание.

Управляемая конечная точка в Сети поддерживает только управляемую виртуальную сеть. Если рабочая область находится в пользовательской виртуальной сети, можно развернуть в веб-конечной точке Kubernetes или развернуть на других платформах, таких как Docker.

Выделение квот виртуальной машины для развертывания

Для управляемых сетевых конечных точек Машинное обучение Azure резервирует 20 % вычислительных ресурсов для выполнения обновлений. Таким образом, если запрашивается заданное количество экземпляров в развертывании, необходимо иметь квоту, чтобы ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU избежать возникновения ошибки. Например, если вы запрашиваете 10 экземпляров виртуальной машины Standard_DS3_v2 (которая поставляется с четырьмя ядрами) в развертывании, у вас должна быть квота на 48 ядер (12 экземпляров четырех ядер). Чтобы просмотреть увеличение квоты на использование и запрос, ознакомьтесь с разделом "Просмотр использования и квот" в портал Azure.

Подготовка потока к развертыванию

Каждый поток будет иметь папку, содержащую коды и запросы, определение и другие артефакты потока. Если вы разработали поток с помощью пользовательского интерфейса, вы можете скачать папку потока на странице сведений о потоке. Если вы разработали поток с помощью ИНТЕРФЕЙСА командной строки или пакета SDK, у вас уже должна быть папка потока.

В этой статье будет использоваться пример потока "basic-chat" в качестве примера для развертывания в Машинное обучение Azure управляемой конечной точке в Интернете.

Внимание

Если вы использовали additional_includes в потоке, сначала необходимо использовать pf flow build --source <path-to-flow> --output <output-path> --format docker для получения разрешенной версии папки потока.

Настройка рабочей области по умолчанию

Используйте следующие команды, чтобы задать рабочую область по умолчанию и группу ресурсов для интерфейса командной строки.

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

Регистрация потока в качестве модели (необязательно)

В интерактивном развертывании можно либо ссылаться на зарегистрированную модель, либо указать путь модели (где отправлять файлы модели из) встраивание. Рекомендуется зарегистрировать модель и указать имя и версию модели в определении развертывания. Используйте форму model:<model_name>:<version>.

Ниже приведен пример определения модели для потока чата.

Примечание.

Если поток не является потоком чата, вам не нужно добавлять их properties.

$schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
name: basic-chat-model
path: ../../../../examples/flows/chat/basic-chat
description: register basic chat flow folder as a custom model
properties:
  # In AuzreML studio UI, endpoint detail UI Test tab needs this property to know it's from prompt flow
  azureml.promptflow.source_flow_id: basic-chat
  
  # Following are properties only for chat flow 
  # endpoint detail UI Test tab needs this property to know it's a chat flow
  azureml.promptflow.mode: chat
  # endpoint detail UI Test tab needs this property to know which is the input column for chat flow
  azureml.promptflow.chat_input: question
  # endpoint detail UI Test tab needs this property to know which is the output column for chat flow
  azureml.promptflow.chat_output: answer

Используется az ml model create --file model.yaml для регистрации модели в рабочей области.

Определение конечной точки

Чтобы определить конечную точку, необходимо указать следующее:

  • Имя конечной точки: имя конечной точки. Оно должно быть уникальным в рамках региона Azure. Дополнительные сведения о правилах именования см. в разделе "Ограничения конечной точки".
  • Режим проверки подлинности: метод проверки подлинности для конечной точки. Выберите проверку подлинности на основе ключей и Машинное обучение Azure проверку подлинности на основе маркеров. Срок действия ключа не истекает, но срок действия маркера истекает. Дополнительные сведения о проверке подлинности см. в статье Проверка подлинности подключенной конечной точки. При необходимости можно добавить описание и теги в конечную точку.
  • При необходимости можно добавить описание и теги в конечную точку.
  • Если вы хотите развернуть в кластере Kubernetes (кластер с поддержкой AKS или Arc), который подключается к рабочей области, можно развернуть поток, чтобы быть конечной точкой Kubernetes online.

Ниже приведен пример определения конечной точки, который по умолчанию использует назначаемое системой удостоверение.

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: basic-chat-endpoint
auth_mode: key
properties:
# this property only works for system-assigned identity.
# if the deploy user has access to connection secrets, 
# the endpoint system-assigned identity will be auto-assigned connection secrets reader role as well
  enforce_access_to_default_secret_stores: enabled
Ключ. Description
$schema (Необязательно) Схема YAML. Чтобы просмотреть все доступные параметры в ФАЙЛЕ YAML, можно просмотреть схему в предыдущем фрагменте кода в браузере.
name Имя конечной точки.
auth_mode Используйте key для аутентификации на основе ключей. Используйте aml_token для проверки подлинности в службе "Машинное обучение Azure" на основе маркеров. Чтобы получить последний маркер, используйте az ml online-endpoint get-credentials команду.
property: enforce_access_to_default_secret_stores (предварительная версия) — По умолчанию конечная точка будет использовать системное удостоверение. Это свойство работает только для удостоверения, назначаемого системой.
— Это свойство означает, что если у вас есть разрешение средства чтения секретов подключений, удостоверение, назначаемое системой конечной точки, будет автоматически назначено Машинное обучение Azure роль средства чтения секретов подключения к рабочей области, чтобы конечная точка могло правильно получать доступ к подключениям при выполнении вывода.
— По умолчанию это свойство "отключено".

Если вы создаете конечную точку Kubernetes online, необходимо указать следующие дополнительные атрибуты:

Ключ. Description
compute Целевой объект вычислений Kubernetes для развертывания конечной точки в.

Дополнительные конфигурации конечной точки см. в схеме управляемых сетевых конечных точек.

Внимание

Если в потоке используются подключения проверки подлинности на основе идентификатора Microsoft Entra, независимо от того, используется назначаемое системой удостоверение или удостоверение, назначаемое пользователем, всегда необходимо предоставить управляемому удостоверению соответствующие роли соответствующих ресурсов, чтобы он смог выполнять вызовы API к этому ресурсу. Например, если подключение Azure OpenAI использует проверку подлинности на основе идентификатора Microsoft Entra, необходимо предоставить конечную точку управляемому удостоверению Cognitive Services OpenAI User или Cognitive Services Участника OpenAI соответствующих ресурсов Azure OpenAI .

Использование назначаемого пользователем удостоверения

По умолчанию при создании сетевой конечной точки автоматически создается управляемое удостоверение, назначаемое системой. Вы также можете указать существующее управляемое удостоверение, назначаемое пользователем для конечной точки.

Если вы хотите использовать удостоверение, назначаемое пользователем, можно указать в следующих endpoint.yamlдополнительных атрибутах:

identity:
  type: user_assigned
  user_assigned_identities:
    - resource_id: user_identity_ARM_id_place_holder

Кроме того, необходимо также указать Client ID удостоверение environment_variables deployment.yaml , назначаемое пользователем, как показано ниже. Вы можете найти Client ID в Overview управляемом удостоверении в портал Azure.

environment_variables:
  AZURE_CLIENT_ID: <client_id_of_your_user_assigned_identity>

Внимание

Перед созданием конечной точки необходимо предоставить следующие разрешения на удостоверение, назначаемое пользователем, чтобы получить доступ к ресурсам Azure для выполнения вывода. Узнайте больше о том, как предоставить разрешения для удостоверения конечной точки.

Область Роль Роль
Рабочая область машинного обучения Azure Роль чтения секретов при подключении рабочей области машинного обучения Azure role ИЛИ настраиваемая роль с Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action Получение подключений к рабочей области
Реестр контейнеров рабочей области Извлечение ACR Извлечение образа контейнера
Хранилище рабочей области по умолчанию Читатель данных больших двоичных объектов хранилища Загрузка модели из хранилища
(Дополнительно) Рабочая область машинного обучения Azure Средство записи метрик рабочей области После развертывания конечной точки, если вы хотите отслеживать связанные с конечной точкой метрики, такие как загруженность ЦП, графического процессора, диска или памяти, необходимо предоставить данное разрешение удостоверению.

Определение развертывания

Развертывание представляет собой набор ресурсов, необходимых для размещения модели, которая выполняет процесс вывода.

Ниже приведен пример определения развертывания, в котором model раздел ссылается на зарегистрированную модель потока. Можно также указать путь модели потока в строке.

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: basic-chat-endpoint
model: azureml:basic-chat-model:1
  # You can also specify model files path inline
  # path: examples/flows/chat/basic-chat
environment: 
  image: mcr.microsoft.com/azureml/promptflow/promptflow-runtime:latest
  # inference config is used to build a serving container for online deployments
  inference_config:
    liveness_route:
      path: /health
      port: 8080
    readiness_route:
      path: /health
      port: 8080
    scoring_route:
      path: /score
      port: 8080
instance_type: Standard_E16s_v3
instance_count: 1
environment_variables:
  # for pulling connections from workspace
  PRT_CONFIG_OVERRIDE: deployment.subscription_id=<subscription_id>,deployment.resource_group=<resource_group>,deployment.workspace_name=<workspace_name>,deployment.endpoint_name=<endpoint_name>,deployment.deployment_name=<deployment_name>

  # (Optional) When there are multiple fields in the response, using this env variable will filter the fields to expose in the response.
  # For example, if there are 2 flow outputs: "answer", "context", and I only want to have "answer" in the endpoint response, I can set this env variable to '["answer"]'.
  # If you don't set this environment, by default all flow outputs will be included in the endpoint response.
  # PROMPTFLOW_RESPONSE_INCLUDED_FIELDS: '["category", "evidence"]'
Атрибут Описание
Имя. Имя развертывания.
Имя конечной точки Имя конечной точки для создания развертывания.
Модель Модель, которая будет использоваться для развертывания. Это значение может быть ссылкой на существующую модель с управлением версиями в рабочей области или спецификацией встроенной модели.
Среда Среда для размещения модели и кода. Он содержит следующее:
- image
- inference_config: используется для создания контейнера обслуживания для сетевых развертываний, включая liveness routereadiness_routeи scoring_route .
Тип экземпляра Размер виртуальной машины, используемый для развертывания. Список поддерживаемых размеров см. в списке SKU управляемых сетевых конечных точек.
Число экземпляров Число экземпляров, которые будут использоваться для развертывания. Это значение должно быть основано на предполагаемой рабочей нагрузке. Для обеспечения высокой доступности рекомендуется задать значение по крайней мере 3. Мы резервируем дополнительные 20 % для выполнения обновлений. Дополнительные сведения см. в разделе об ограничениях для сетевых конечных точек.
Переменные среды Для конечных точек, развернутых из потока, необходимо задать следующие переменные среды:
— (обязательно) PRT_CONFIG_OVERRIDE— для извлечения подключений из рабочей области
— (необязательно) PROMPTFLOW_RESPONSE_INCLUDED_FIELDS:— если в ответе несколько полей, используя эту переменную env, будут фильтровать поля для предоставления в ответе.
Например, если в ответе конечной точки есть два выходных данных потока: "ответ", "context", а если в ответе конечной точки есть только ответ, можно задать для этой переменной env значение ["ответ"].

Внимание

Если в папке потока есть requirements.txt файл, содержащий зависимости, необходимые для выполнения потока, необходимо выполнить развертывание с помощью действий пользовательской среды , чтобы создать настраиваемую среду, включая зависимости.

При создании сетевого развертывания Kubernetes необходимо указать следующие дополнительные атрибуты:

Атрибут Описание
Тип Тип развертывания. Присвойте ему значение kubernetes.
Тип экземпляра Тип экземпляра, созданный в кластере Kubernetes для развертывания, представляет вычислительный ресурс запроса или ограничения для развертывания. Дополнительные сведения см. в разделе "Создание и управление типом экземпляра".

Развертывание сетевой конечной точки в Azure

Чтобы создать конечную точку в облаке, выполните следующий код:

az ml online-endpoint create --file endpoint.yml

Чтобы создать развертывание с именем blue в конечной точке, выполните следующий код:

az ml online-deployment create --file blue-deployment.yml --all-traffic

Примечание.

Это развертывание может занять более 15 минут.

Совет

Если вы предпочитаете не блокировать консоль CLI, можно добавить флаг --no-wait в команду. Однако так вы не сможете отслеживать состояние развертывания в интерактивном режиме.

Внимание

Флаг --all-traffic в приведенном выше az ml online-deployment create разделе выделяет 100 % трафика конечной точки только что созданному синему развертыванию. Хотя это полезно для целей разработки и тестирования, для рабочей среды может потребоваться открыть трафик в новое развертывание с помощью явной команды. Например, az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

Проверка состояния конечной точки и развертывания

Чтобы проверить состояние конечной точки, выполните следующий код:

az ml online-endpoint show -n basic-chat-endpoint

Чтобы проверить состояние развертывания, выполните следующий код:

az ml online-deployment get-logs --name blue --endpoint basic-chat-endpoint

Вызов конечной точки для оценки данных с помощью модели

Вы можете создать файл sample-request.json следующим образом:

{
  "question": "What is Azure Machine Learning?",
  "chat_history":  []
}
az ml online-endpoint invoke --name basic-chat-endpoint --request-file sample-request.json

Можно также вызвать его с помощью HTTP-клиента, например с помощью curl:

ENDPOINT_KEY=<your-endpoint-key>
ENDPOINT_URI=<your-endpoint-uri>

curl --request POST "$ENDPOINT_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data '{"question": "What is Azure Machine Learning?", "chat_history":  []}'

Ключ конечной точки и универсальный код ресурса (URI) конечной точки можно получить из рабочей области Машинное обучение Azure в конечных точках>использовать>основные сведения о потреблении.

Расширенные конфигурации

Развертывание с различными подключениями от разработки потока

Во время развертывания может потребоваться переопределить подключения потока.

Например, если файл flow.dag.yaml использует соединение с именем my_connection, его можно переопределить, добавив переменные среды для yaml развертывания следующим образом:

Вариант 1. Переопределение имени подключения

environment_variables:
  my_connection: <override_connection_name>

Если вы хотите переопределить определенное поле подключения, можно переопределить, добавив переменные среды с шаблоном <connection_name>_<field_name>именования. Например, если поток использует соединение my_connection с ключом конфигурации, вызываемым chat_deployment_name, серверная часть службы попытается получить chat_deployment_name из переменной среды "MY_CONNECTION_CHAT_DEPLOYMENT_NAME" по умолчанию. Если переменная среды не задана, она будет использовать исходное значение из определения потока.

Вариант 2. Переопределение путем ссылки на ресурс

environment_variables:
  my_connection: ${{azureml://connections/<override_connection_name>}}

Примечание.

Вы можете ссылаться только на подключение в той же рабочей области.

Развертывание с помощью пользовательской среды

В этом разделе показано, как использовать контекст сборки Docker для указания среды для развертывания, если у вас есть знания о Docker и средах Машинное обучение Azure.

  1. В локальной среде создайте папку с именем image_build_with_reqirements , содержащую следующие файлы:

    |--image_build_with_reqirements
    |  |--requirements.txt
    |  |--Dockerfile
    
    • Наследуется requirements.txt от папки потока, которая использовалась для отслеживания зависимостей потока.

    • Содержимое Dockerfile выполняется следующим образом:

      FROM mcr.microsoft.com/azureml/promptflow/promptflow-runtime:latest
      COPY ./requirements.txt .
      RUN pip install -r requirements.txt
      
  2. Замените раздел среды в файле yaml определения развертывания следующим содержимым:

    environment: 
      build:
        path: image_build_with_reqirements
        dockerfile_path: Dockerfile
      # deploy prompt flow is BYOC, so we need to specify the inference config
      inference_config:
        liveness_route:
          path: /health
          port: 8080
        readiness_route:
          path: /health
          port: 8080
        scoring_route:
          path: /score
          port: 8080
    

Использование обработчика обслуживания FastAPI (предварительная версия)

По умолчанию в потоке запросов используется обработчик обслуживания FLASK. Начиная с пакета SDK потока запросов версии 1.10.0, поддерживается подсистема обслуживания на основе FastAPI. Обработчик обслуживания можно использовать fastapi , указав переменную PROMPTFLOW_SERVING_ENGINEсреды.

environment_variables:
  PROMPTFLOW_SERVING_ENGINE=fastapi

Настройка параллелизма для развертывания

При развертывании потока в интерактивном развертывании существует два переменных среды, которые настраиваются для параллелизма: PROMPTFLOW_WORKER_NUM и PROMPTFLOW_WORKER_THREADS. Кроме того, необходимо также задать max_concurrent_requests_per_instance параметр.

Ниже приведен пример настройки в deployment.yaml файле.

request_settings:
  max_concurrent_requests_per_instance: 10
environment_variables:
  PROMPTFLOW_WORKER_NUM: 4
  PROMPTFLOW_WORKER_THREADS: 1
  • PROMPTFLOW_WORKER_NUM. Этот параметр определяет количество рабочих (процессов), которые будут запущены в одном контейнере. Значение по умолчанию равно числу ядер ЦП, а максимальное значение — в два раза больше ядер ЦП.

  • PROMPTFLOW_WORKER_THREADS. Этот параметр определяет количество потоков, которые будут запущены в одной рабочей роли. Значение по умолчанию равно 1.

    Примечание.

    Если задано PROMPTFLOW_WORKER_THREADS значение больше 1, убедитесь, что код потока является потокобезопасной.

  • max_concurrent_requests_per_instance. Максимальное количество одновременных запросов на экземпляр, разрешенных для развертывания. Значение по умолчанию — 10.

    Рекомендуемое значение max_concurrent_requests_per_instance зависит от времени запроса:

    • Если время запроса больше 200 мс, установите значение max_concurrent_requests_per_instance PROMPTFLOW_WORKER_NUM * PROMPTFLOW_WORKER_THREADS.
    • Если время запроса меньше или равно 200 мс, установите значение max_concurrent_requests_per_instance (1.5-2) * PROMPTFLOW_WORKER_NUM * PROMPTFLOW_WORKER_THREADS. Это может повысить общую пропускную способность, позволяя некоторым запросам быть в очереди на стороне сервера.
    • Если вы отправляете запросы между регионами, можно изменить пороговое значение с 200 мс на 1.

При настройке указанных выше параметров необходимо отслеживать следующие метрики, чтобы обеспечить оптимальную производительность и стабильность.

  • Использование ЦП и памяти экземпляра для этого развертывания
  • Ответы, отличные от 200 (4xx, 5xx)
    • Если вы получите ответ 429, обычно это означает, что необходимо повторно настроить параметры параллелизма после приведенного выше руководства или масштабирования развертывания.
  • Состояние регулирования Azure OpenAI

Мониторинг конечных точек

Сбор общих метрик

Общие метрики онлайн-развертывания (номера запросов, задержка запросов, сетевые байты, загрузка ЦП/GPU/диск/память и многое другое).

Сбор данных трассировки и системных метрик во время вывода

Вы также можете собирать данные трассировки и метрики развертывания потока запроса (использование маркеров, задержку потока и т. д.) во время вывода в связанную рабочую область Application Insights, добавив свойство app_insights_enabled: true в файл yaml развертывания. Узнайте больше о трассировках и метриках развертывания потока запросов.

Метрики и трассировки потока запросов можно указать в других Application Insights, отличных от связанной рабочей области. Вы можете указать переменную среды в файле yaml развертывания, как показано ниже. Строка подключения Application Insights можно найти на странице обзора портал Azure.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Примечание.

Если задано только app_insights_enabled: true вашей рабочей области, но у рабочей области нет связанной службы Application Insights, развертывание не завершится ошибкой, но сбор данных не будет. Если в одно и то же время указана app_insights_enabled: true и указанная выше переменная среды, данные трассировки и метрики будут отправляться в связанную рабочую область Application Insights. Таким образом, если вы хотите указать другую среду Application Insights, необходимо сохранить только переменную среды.

Распространенные ошибки

Проблема времени ожидания вышестоящего запроса при использовании конечной точки

Такая ошибка обычно вызвана временем ожидания. По умолчанию request_timeout_ms значение равно 5000. Можно указать не более 5 минут, что составляет 300 000 мс. Ниже показано, как указать время ожидания запроса в yaml-файле развертывания. Дополнительные сведения о схеме развертывания см. здесь.

request_settings:
  request_timeout_ms: 300000

Примечание.

Время ожидания 300 000 мс работает только для сопоставленных сетевых развертываний из потока запросов. Необходимо убедиться, что вы добавили свойства для модели, как показано ниже (встроенная спецификация модели в yaml или автономной спецификации модели развертывания yaml), чтобы указать, что это развертывание из потока запросов.

properties:
  # indicate a deployment from prompt flow
  azureml.promptflow.source_flow_id: <value>

Следующие шаги