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


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

Примечание.

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий 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.

Просмотр системных метрик в 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.

Снимок экрана: отзывы и данные трассировки запроса в Application Insights.

Расширенное использование: экспорт трассировки в пользовательскую службу сборщика OpenTelemetry

В некоторых случаях может потребоваться экспортировать данные трассировки в развернутую службу сборщика OTel, включенную с помощью параметра "OTEL_EXPORTER_OTLP_ENDPOINT". Используйте этот экспортер, если вы хотите настроить собственную логику обработки диапазона и собственный целевой объект трассировки.

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