Включение трассировки и сбор отзывов о развертывании потока (предварительная версия)
Примечание.
Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
После развертывания генерируемого приложения ИИ в рабочей среде разработчики приложений стремятся повысить их понимание и оптимизировать производительность. Данные трассировки для каждого запроса, агрегированные метрики и отзывы пользователей играют критически важные роли.
В этой статье вы узнаете, как включить трассировку, собирать агрегированные метрики и отзывы пользователей во время развертывания потока.
Необходимые компоненты
- Azure CLI и расширение Машинное обучение Azure в Azure CLI. Дополнительные сведения см. в разделе Установка, настройка и использование CLI (версия 2).
- Рабочая область Машинного обучения Azure. Если у вас ее нет, создайте ее по инструкциям, приведенным в кратком руководстве по созданию ресурсов рабочей области.
- An Application Insights. Обычно рабочая область машинного обучения имеет связанную с Application Insights по умолчанию. Если вы хотите использовать новый, можно создать ресурс Application Insights.
- Узнайте , как создать и проверить поток в потоке запроса.
- Базовое понимание концепции управляемых сетевых конечных точек. Управляемые сетевые конечные точки работают с мощными компьютерами ЦП и GPU в Azure в масштабируемом режиме, который освобождает вас от затрат на настройку и управление базовой инфраструктурой развертывания. Дополнительные сведения об управляемых сетевых конечных точках см. в статье "Конечные точки Online" и развертывания для вывода в режиме реального времени.
- Управление доступом на основе ролей Azure (Azure RBAC) используется для предоставления доступа к операциям в Машинном обучении Azure. Чтобы выполнить действия, описанные в этой статье, учетная запись пользователя должна быть назначена роль владельца или участника для рабочей области Машинное обучение Azure или настраиваемую роль, разрешающую "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/". Если вы используете студию для создания и управления сетевыми конечными точками и развертываниями, вам потребуется другое разрешение "Microsoft.Resources/deployments/write" от владельца группы ресурсов. Дополнительные сведения см. в статье Управление доступом к рабочей области Машинного обучения Azure.
Развертывание потока вывода в режиме реального времени
После правильного тестирования потока можно развернуть поток в рабочей среде. В этой статье мы используем поток для Машинное обучение Azure управляемых сетевых конечных точек в качестве примера. Для гибких потоков необходимо подготовить flow.flex.yaml
файл вместо flow.dag.yaml
.
Вы также можете развернуть на других платформах, таких как контейнер Docker, кластер Kubernetes и т. д.
Примечание.
Для развертывания потока запросов необходимо использовать последний базовый образ потока запроса, чтобы он поддерживал API трассировки и сбора отзывов.
Включение трассировки и сбор системных метрик для развертывания
Если вы используете пользовательский интерфейс студии для развертывания, вы можете включить application Insights диагностика в дополнительных параметрах .> Шаг развертывания в мастере развертывания, в котором данные трассировки и системные метрики собираются в связанную рабочую область Application Insights.
Если вы используете пакет SDK или CLI, вы можете добавить свойство app_insights_enabled: true
в файл yaml развертывания, который собирает данные в связанную рабочую область Application Insights. Вы также можете указать другие application Insights переменной APPLICATIONINSIGHTS_CONNECTION_STRING
среды в файле yaml развертывания, как показано ниже. Строка подключения Application Insights можно найти на странице обзора портал Azure.
# below is the property in deployment yaml
# app_insights_enabled: true
# you can also use the environment variable
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Примечание.
Если задано только app_insights_enabled: true
вашей рабочей области, но у рабочей области нет связанной службы Application Insights, развертывание не завершится ошибкой, но сбор данных не будет.
Если в одно и то же время указана app_insights_enabled: true
и указанная выше переменная среды, данные трассировки и метрики будут отправляться в связанную рабочую область Application Insights. Таким образом, если вы хотите указать другую среду Application Insights, необходимо сохранить только переменную среды.
При развертывании на других платформах можно также использовать переменную APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
среды для сбора данных трассировки и метрик для speicifed Application Insights.
Просмотр данных трассировки в Application Insights
Трассировки записывают определенные события или состояние приложения во время выполнения. Он может включать данные о вызовах функций, значениях переменных, системных событиях и т. д. Трассировки помогают разбить компоненты приложения на дискретные входные и выходные данные, что имеет решающее значение для отладки и понимания приложения. Дополнительные сведения см. в разделе Трассировки OpenTelemetry для трассировок. Данные трассировки соответствуют спецификации OpenTelemetry.
Подробные сведения о трассировке можно просмотреть в указанной службе Application Insights. На следующем снимках экрана показан пример события развернутого потока, содержащего несколько узлов. В Application Insights —> исследование> — поиск транзакций и вы можете выбрать каждый узел для просмотра подробной трассировки.
Вызовы событий типа зависимостей записываются из развертываний. Имя этого события — это имя папки потока. Дополнительные сведения о поиске транзакций и диагностика в Application Insights.
Просмотр системных метрик в Application Insights
Имя метрик | Тип | Измерения | Description |
---|---|---|---|
token_consumption | людей Irisys | -течь -узел - llm_engine - token_type: prompt_tokens : маркеры входных данных API LLM; completion_tokens : маркеры ответа LLM API; total_tokens = prompt_tokens + completion tokens |
Метрики потребления маркеров OpenAI |
flow_latency | histogram | flow, response_code, потоковая передача, response_type | стоимость выполнения запроса, response_type означает, является ли он полным/firstbyte/lastbyte |
flow_request | людей Irisys | поток, response_code, исключение, потоковая передача | количество запросов потока |
node_latency | histogram | flow, node, run_status | Затраты на выполнение узла |
node_request | людей Irisys | поток, узел, исключение, run_status | Число выполнения узла |
rpc_latency | histogram | поток, узел, api_call | стоимость rpc |
rpc_request | людей Irisys | flow, node, api_call, exception | число rpc |
flow_streaming_response_duration | histogram | flow | стоимость отправки потоковой передачи ответа, от отправки первого байта до отправки последнего байта |
На странице обзора рабочей области по умолчанию Application Insights можно найти портал Azure.
Откройте Application Insights и выберите "Использование" и выберите "Затраты " в области навигации слева. Выберите пользовательские метрики (предварительная версия) и выберите "С измерениями" и сохраните изменения.
Выберите вкладку "Метрики" в области навигации слева. Выберите стандартные метрики потока запросов из пространства имен метрик, и вы можете просмотреть метрики из раскрывающегося списка метрик с различными методами агрегирования.
Сбор отзывов и отправка в Application Insights
Служба потоков запросов предоставляет новый /feedback
API для получения отзывов, полезные данные обратной связи могут быть любыми данными формата JSON, обслуживание PF помогает клиенту сохранять данные обратной связи в диапазон трассировки. Данные будут сохранены в целевом клиенте экспортера трассировки. Он также поддерживает распространение контекста трассировки OpenTelemetry уровня "Стандартный", заявив, что он учитывает контекст трассировки в заголовке запроса и использует его в качестве контекста родительского диапазона запроса. Вы можете использовать функцию распределенной трассировки для сопоставления трассировки отзывов с трассировкой запроса чата.
Ниже приведен пример кода, в котором показано, как оценить развернутую управляемую конечную точку трассировки и отправить отзыв в тот же диапазон трассировки запроса оценки. Поток содержит входные данные и chat_hisotry
выходные question
данныеanswer
. После оценки конечной точки мы собираем отзывы и отправим в Application Insights, указанные при развертывании потока. Необходимо заполнить api_key
значение или изменить код в соответствии с вашим вариантом использования.
import urllib.request
import json
import os
import ssl
from opentelemetry import trace, context
from opentelemetry.baggage.propagation import W3CBaggagePropagator
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider
# Initialize your tracer
tracer = trace.get_tracer("my.genai.tracer")
trace.set_tracer_provider(TracerProvider())
# Request data goes here
# The example below assumes JSON formatting which may be updated
# depending on the format your endpoint expects.
# More information can be found here:
# https://docs.microsoft.com/azure/machine-learning/how-to-deploy-advanced-entry-script
data = {
"question": "hello",
"chat_history": []
}
body = str.encode(json.dumps(data))
url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/feedback'
# Replace this with the primary/secondary key, AMLToken, or Microsoft Entra ID token for the endpoint
api_key = ''
if not api_key:
raise Exception("A key should be provided to invoke the endpoint")
# The azureml-model-deployment header will force the request to go to a specific deployment.
# Remove this header to have the request observe the endpoint traffic rules
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key), 'azureml-model-deployment': 'basic-chat-deployment' }
try:
with tracer.start_as_current_span('genai-request') as span:
ctx = context.get_current()
TraceContextTextMapPropagator().inject(headers, ctx)
print(headers)
print(ctx)
req = urllib.request.Request(url, body, headers)
response = urllib.request.urlopen(req)
result = response.read()
print(result)
# Now you can process the answer and collect feedback
feedback = "thumbdown" # Example feedback (modify as needed)
# Make another request to save the feedback
feedback_body = str.encode(json.dumps(feedback))
feedback_req = urllib.request.Request(feedback_url, feedback_body, headers)
urllib.request.urlopen(feedback_req)
except urllib.error.HTTPError as error:
print("The request failed with status code: " + str(error.code))
# Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure
print(error.info())
print(error.read().decode("utf8", 'ignore'))
Трассировку запроса можно просмотреть вместе с отзывом в Application Insights.
Расширенное использование: экспорт трассировки в пользовательскую службу сборщика OpenTelemetry
В некоторых случаях может потребоваться экспортировать данные трассировки в развернутую службу сборщика OTel, включенную с помощью параметра "OTEL_EXPORTER_OTLP_ENDPOINT". Используйте этот экспортер, если вы хотите настроить собственную логику обработки диапазона и собственный целевой объект трассировки.