Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
После развертывания созданного приложения ИИ в рабочей среде может потребоваться улучшить понимание и оптимизировать производительность. Данные трассировки для каждого запроса, агрегированные метрики и отзывы пользователей играют критически важные роли.
Из этой статьи вы узнаете, как включить трассировку, собирать агрегированные метрики и собирать отзывы пользователей во время развертывания потока.
Замечание
Чтобы улучшить способ непрерывного мониторинга развернутых приложений (кроме потока запросов), рассмотрите возможность использования онлайн-оценки ИИ Azure.
Предпосылки
Замечание
Этот документ относится только к порталу Microsoft Foundry (классическая модель ).
Для этой функции необходимо использовать центральный проект . Проект Foundry не поддерживается. Узнайте , как определить, какой у меня тип проекта? и создать центральный проект.
- Учетная запись Azure с активной подпиской. Если у вас его нет, создайте бесплатную учетную запись Azure, которая включает бесплатную пробную подписку.
- Если у вас нет одного, создайте проект на основе концентратора.
- Azure CLI и расширение Azure Machine Learning для Azure CLI.
- Проект Microsoft Foundry. Если у вас еще нет проекта, его можно создать.
- Ресурс Application Insights. Если у вас еще нет ресурса Application Insights, его можно создать.
- Контроль доступа на основе ролей Azure используется для предоставления доступа к операциям в Azure Machine Learning. Чтобы выполнить действия, описанные в этой статье, необходимо иметь разрешения владельца или участника в выбранной группе ресурсов. Дополнительные сведения см. в разделе "Управление доступом на основе ролей" на портале Foundry.
Развернуть поток для вывода результатов в режиме реального времени
После правильного тестирования потока (гибкий поток или поток DAG) можно развернуть поток в рабочей среде. В этой статье мы используем развертывание потока для вывода данных в режиме реального времени в качестве примера. Для гибких потоков необходимо подготовить flow.flex.yaml файл вместо flow.dag.yaml.
Вы также можете развернуть на других платформах, таких как контейнер Docker и кластер Kubernetes.
Используйте последний базовый образ потока запроса для развертывания потока, чтобы он поддерживал API трассировки и сбора отзывов.
Включите трассировку и соберите системные метрики для вашего развертывания
Если вы используете портал Foundry для развертывания, выберите> в мастере развертываниядополнительные параметры диагностики>Application Insights. Таким образом, данные трассировки и системные метрики собираются в проект, связанный с Application Insights.
Если вы используете пакет SDK или CLI, добавьте свойство app_insights_enabled: true в файл .yaml развертывания, который собирает данные для проекта, связанного с Application Insights.
app_insights_enabled: true
Вы также можете указать другие аналитические сведения о приложениях в переменной APPLICATIONINSIGHTS_CONNECTION_STRING среды в файле yaml развертывания. Строку подключения для Application Insights можно найти на странице обзора на портале Azure.
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Замечание
Если вы установите только app_insights_enabled: true, но у вашего проекта нет связанного ресурса Application Insights, то развертывание не завершится ошибкой, но данные не будут собираться.
Если вы указываете app_insights_enabled: true и предыдущую переменную среды одновременно, данные трассировки и метрики отправляются в проект, связанный с Application Insights. Если вы хотите указать различные аналитические сведения о приложении, сохраните только переменную среды.
При развертывании на других платформах можно также использовать переменную APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> среды для сбора данных трассировки и метрик в указанных вами приложениях аналитики.
Просмотр данных отслеживания в Application Insights
Трассировки записывают определенные события или состояние приложения во время выполнения. Он может включать данные о вызовах функций, значениях переменных и системных событиях. Трассировки помогают разбить компоненты приложения на дискретные входные и выходные данные. Этот процесс имеет решающее значение для отладки и понимания приложения. Дополнительные сведения о трассировках см. на этом веб-сайте. Данные трассировки соответствуют спецификации OpenTelemetry.
Подробные сведения о трассировке можно просмотреть в указанной вами аналитике приложений. На следующем снимке экрана показан пример события развернутого потока, содержащего несколько узлов. Выберите"Поиск транзакций>>, а затем выберите каждый узел, чтобы просмотреть его подробную трассировку.
Тип события Dependency записывает вызовы из ваших развертываний. Название события — это название папки информационного потока. Дополнительные сведения см. в статье "Поиск транзакций и диагностика" в Application Insights.
Просмотр системных метрик в Application Insights
| Имя метрик | Тип | Измерения | Описание |
|---|---|---|---|
token_consumption |
счётчик Irisys | - flow - node- llm_engine- token_type: prompt_tokensмаркеры входных данных API LLM; completion_tokens: маркеры ответа API LLM; total_tokens = prompt_tokens + completion tokens |
Метрики использования токенов OpenAI. |
flow_latency |
гистограмма |
flow, , response_codestreamingresponse_type |
Стоимость response_typeвыполнения запроса означает, является ли он полным или первым байтом или последним байтом. |
flow_request |
счётчик Irisys |
flow, , response_codeexceptionstreaming |
Число запросов потока. |
node_latency |
гистограмма |
flow
node
run_status
|
Стоимость выполнения узла. |
node_request |
счётчик Irisys |
flow, , nodeexceptionrun_status |
Количество выполнений узла. |
rpc_latency |
гистограмма |
flow
node
api_call
|
Стоимость вызова удаленной процедуры. |
rpc_request |
счётчик Irisys |
flow, , nodeapi_callexception |
Число вызовов удаленной процедуры. |
flow_streaming_response_duration |
гистограмма | flow |
Стоимость отправки в потоковом режиме, начиная от первого байта до последнего байта. |
Метрики Application Insights по умолчанию можно найти на странице обзора рабочей области на портале Azure.
- Откройте Application Insights и выберите "Использование" и "Предполагаемые затраты " на левой панели. Выберите пользовательские метрики (предварительная версия)>С измерениями и сохраните изменения.
- Перейдите на вкладку "Метрики" на левой панели. В пространстве имен метрик выберите стандартные метрики потока запросов. Вы можете изучить метрики из раскрывающегося списка метрик с различными методами агрегирования.
Сбор отзывов и отправка в Application Insights
Служба потоков запросов предоставляет новый /feedback API, помогающий клиентам собирать отзывы. Полезные данные обратной связи могут быть любыми данными формата JSON. Обслуживание потока запросов помогает клиенту сохранять данные обратной связи в диапазон трассировки. Данные сохраняются в целевом объекте экспортера трассировки, настроенного клиентом. Поддержка потоков запросов также включает распространение контекста трассировки в соответствии со стандартом OpenTelemetry. Он учитывает контекст трассировки в заголовке запроса и использует этот контекст в качестве контекста родительского диапазона запроса. С помощью функции распределенной трассировки можно сопоставить трассировку обратной связи с трассировкой запроса чата.
В приведенном ниже примере кода показано, как оценить поток, развернутый на управляемой конечной точке, для которой была включена трассировка, и отправить отзыв в тот же интервал трассировки запроса оценки. Поток содержит входные данные question и chat_history. Результат выглядит так: answer. После оценки конечной точки отзывы собираются и отправляются в Application Insights, как указано при развертывании потока.
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 might be updated
# depending on the format your endpoint expects.
data = {
"question": "hello",
"chat_history": []
}
body = str.encode(json.dumps(data))
url = 'https://basic-chat-endpoint-0506.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint-0506.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
В некоторых случаях может потребоваться экспортировать данные трассировки в развернутую службу сборщика OpenTelemetry. Чтобы включить эту службу, задайте OTEL_EXPORTER_OTLP_ENDPOINT. Используйте этот экспортер, если вы хотите настроить собственную логику обработки интервала и собственный постоянный целевой объект трассировки.