Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
Разработка функций потока запросов закончилась 20 апреля 2026 г. Функция будет полностью прекращена 20 апреля 2027 г. В дату выхода на пенсию, Prompt Flow переходит в режим только для чтения. Существующие потоки будут продолжать работать до этой даты.
Рекомендуемое действие: Перенесите рабочие нагрузки Prompt Flow на Microsoft Agent Framework до 20 апреля 2027 г.
В этой статье вы узнаете, как развернуть ваш поток в управляемой веб-конечной точке или онлайн-конечной точке Kubernetes для вывода в режиме реального времени с помощью CLI версии 2 Машинное обучение Azure.
Прежде чем начать, убедитесь, что вы тщательно протестировали свой поток и уверены, что он готов к развертыванию в рабочей среде. Дополнительные сведения о тестировании потока см. в статье "Тестирование потока". После тестирования потока вы узнаете, как создать управляемую конечную точку и развертывание в сети, а также как использовать конечную точку для вывода в режиме реального времени.
- В этой статье описывается использование интерфейса командной строки.
- Пакет SDK Python не рассматривается в этой статье. Вместо этого см. пример записной книжки GitHub. Чтобы использовать пакет SDK Python, необходимо использовать пакет SDK Python версии 2 для Машинное обучение Azure. Дополнительные сведения см. в статье Установка пакета SDK Python версии 2 для Машинное обучение Azure.
Важно
Элементы, помеченные (предварительная версия) в этой статье, в настоящее время находятся в общедоступной предварительной версии. Предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендуется для рабочих нагрузок. Некоторые функции могут не поддерживаться или могут иметь ограниченные возможности. Дополнительные сведения см. в разделе Supplemental Terms of Use for Microsoft Azure Previews.
Необходимые условия
- CLI Azure и расширение Машинное обучение Azure для CLI Azure. Дополнительные сведения см. в разделе "Установка,настройка" и использование интерфейса командной строки (версия 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, чтобы зарегистрировать модель в рабочей области.
Определение конечной точки
Чтобы определить конечную точку, необходимо указать следующее:
- Endpoint name: название конечной точки. Он должен быть уникальным в регионе Azure. Дополнительные сведения о правилах именования см. в разделе "Ограничения конечной точки".
- Режим проверки подлинности: метод проверки подлинности для конечной точки. Выберите аутентификацию на основе ключей или аутентификацию Машинное обучение Azure на основе токенов. Срок действия ключа не истекает, но срок действия маркера истекает. Дополнительные сведения о проверке подлинности см. в статье "Аутентификация в сети". При необходимости можно добавить описание и теги в конечную точку.
- При необходимости можно добавить описание и теги в конечную точку.
- Если вы хотите развертывать в кластере Kubernetes (кластер с поддержкой AKS или Arc), который подключается к рабочей области, можно развернуть поток как конечную точку онлайн Kubernetes.
Ниже приведен пример определения конечной точки, который по умолчанию использует назначаемое системой удостоверение.
$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
| Ключ | Описание |
|---|---|
$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, необходимо указать следующие атрибуты:
| Ключ | Описание |
|---|---|
compute |
Цель вычислений Kubernetes для развертывания конечной точки. |
Дополнительные конфигурации конечной точки см. в схеме управляемых сетевых конечных точек.
Важно
Если в вашем потоке используются подключения проверки подлинности на базе Microsoft Entra ID, независимо от того, используется ли назначаемое системой удостоверение или назначаемое пользователем, необходимо всегда предоставлять управляемому удостоверению соответствующие роли соответствующих ресурсов, чтобы оно могло совершать вызовы API к этому ресурсу. Например, если подключение Azure OpenAI использует проверку подлинности на основе Microsoft Entra ID, необходимо предоставить управляемое удостоверение конечной точки роль Cognitive Services OpenAI User или Cognitive Services OpenAI Contributor для соответствующих ресурсов Azure OpenAI.
Использование назначаемого пользователем удостоверения
По умолчанию при создании онлайн-конечной точки для вас автоматически создается управляемое удостоверение, назначаемое системой. Вы также можете указать существующее управляемое удостоверение, назначаемое пользователем для конечной точки.
Если вы хотите использовать пользовательскую назначаемую идентичность, можно указать следующие атрибуты в endpoint.yaml:
identity:
type: user_assigned
user_assigned_identities:
- resource_id: user_identity_ARM_id_place_holder
Кроме того, необходимо также указать Client ID идентификатор, назначаемый пользователем, под environment_variablesdeployment.yaml, как показано ниже. Вы можете найти Client ID в Overview управляемого удостоверения на портале Azure.
environment_variables:
AZURE_CLIENT_ID: <client_id_of_your_user_assigned_identity>
Важно
Чтобы удостоверение, назначаемое пользователем, могло получить доступ к ресурсам Azure для выполнения вычислительных задач, необходимо перед созданием конечной точки предоставить следующие разрешения
| Область применения | Роль | Почему это необходимо |
|---|---|---|
| Рабочая область Машинное обучение Azure | Роль чтения секретов подключения в рабочей области Машинное обучение AzureИЛИ настраиваемую роль с правами организации Microsoft "MachineLearningServices/workspaces/connections/listsecrets/action" | Получите подключения к рабочей среде |
| Реестр контейнеров рабочей области | Извлечение данных через ACR | Извлечение образа контейнера |
| Хранилище рабочей области по умолчанию | Читатель данных хранилища BLOB | Загрузка модели из хранилища |
| (Необязательно) Рабочая область Машинное обучение Azure | Модуль записи метрик рабочей области | После развертывания конечной точки, если вы хотите отслеживать связанные с конечной точкой метрики, такие как ЦП, GPU, диск или память, необходимо предоставить это разрешение идентичности. |
Определение развертывания
Развертывание — это набор ресурсов, необходимых для размещения модели, которая выполняет фактическое инференсирование.
Ниже приведен пример определения развертывания, в котором 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", и если вы хотите, чтобы в ответе конечной точки был только "ответ", вы можете задать для переменной окружения значение '["ответ"]'. |
Важно
Если в папке вашего потока есть файл 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 в Endpoints>Потребление>Основная информация о потреблении.
Дополнительные конфигурации
Развертывание с различными подключениями от разработки потока
Во время развертывания может потребоваться переопределить подключения потока.
Например, если файл 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.
В локальной среде создайте папку с именем
image_build_with_reqirements, содержащую следующие файлы:|--image_build_with_reqirements | |--requirements.txt | |--Dockerfilerequirements.txtдолжны наследоваться из папки потока, которая использовалась для отслеживания зависимостей потока.Содержимое
Dockerfileпохоже на следующий текст:FROM mcr.microsoft.com/azureml/promptflow/promptflow-runtime:latest COPY ./requirements.txt . RUN pip install -r requirements.txt
Замените раздел среды в файле 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_instancePROMPTFLOW_WORKER_NUM * PROMPTFLOW_WORKER_THREADS. - Если время запроса меньше или равно 200 мс, установите значение
max_concurrent_requests_per_instance(1.5-2) * PROMPTFLOW_WORKER_NUM * PROMPTFLOW_WORKER_THREADS. Это может повысить общую пропускную способность, позволяя некоторым запросам быть в очереди на стороне сервера. - Если вы отправляете запросы между регионами, можно изменить пороговое значение с 200 мс на 1.
- Если время запроса больше 200 мс, установите значение
При настройке указанных выше параметров необходимо отслеживать следующие метрики, чтобы обеспечить оптимальную производительность и стабильность.
- Использование ЦП и памяти экземпляра для этого развертывания
- Ответы, отличные от 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 мс работает только для управляемых онлайн-развертываний из потока Prompt Flow. Максимально допустимое время для управляемой сетевой конечной точки в режиме non-prompt flow составляет 180 секунд.
Необходимо убедиться, что вы добавили свойства для своей модели следующим образом (либо встроенная спецификация модели в yaml для развертывания, либо автономная спецификация модели в yaml), чтобы указать, что это развертывание из потока подсказок.
properties:
# indicate a deployment from prompt flow
azureml.promptflow.source_flow_id: <value>
Дальнейшие действия
- Дополнительные сведения о схеме управляемой конечной точки в Интернете и схеме управляемого сетевого развертывания.
- Узнайте больше о том, как протестировать конечную точку в пользовательском интерфейсе и отслеживать конечную точку.
- Узнайте больше об устранении неполадок с управляемыми сетевыми конечными точками.
- Устранение неполадок при развертывании потока запросов.
- После улучшения потока и развертывания улучшенной версии с помощью стратегии безопасного развертывания см. раздел "Безопасный выпуск" для сетевых конечных точек.
- Узнайте больше о развёртывании потоков на другие платформы, такие как локальная служба разработки, контейнер Docker, служба приложений Azure и т. д.