Настройка мониторинга латентности AI-инференса

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Настройка мониторинга латентности AI-инференса
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Настройка мониторинга latency AI-инференса

Latency LLM-инференса — критическая метрика для UX. Два компонента: Time to First Token (TTFT) — задержка до начала ответа, Time Per Output Token (TPOT) — скорость генерации. Пользователь чувствует TTFT острее, чем TPOT (streaming).

Метрики latency

from prometheus_client import Histogram, Summary
import time

# Гистограммы latency
TTFT_HISTOGRAM = Histogram(
    "llm_time_to_first_token_seconds",
    "Time to first token",
    buckets=[0.1, 0.3, 0.5, 1.0, 2.0, 5.0, 10.0]
)

TOTAL_LATENCY = Histogram(
    "llm_total_latency_seconds",
    "Total request latency",
    labelnames=["model", "endpoint"],
    buckets=[0.5, 1.0, 2.0, 5.0, 10.0, 30.0, 60.0]
)

TPOT_HISTOGRAM = Histogram(
    "llm_time_per_output_token_ms",
    "Time per output token in milliseconds",
    buckets=[5, 10, 20, 50, 100, 200]
)

class LatencyTracker:
    def track_streaming_request(self, request_id: str, model: str):
        start = time.time()
        first_token_time = None

        def on_first_token():
            nonlocal first_token_time
            first_token_time = time.time()
            TTFT_HISTOGRAM.observe(first_token_time - start)

        def on_complete(total_tokens: int):
            end = time.time()
            total_latency = end - start
            TOTAL_LATENCY.labels(model=model, endpoint="/v1/chat").observe(total_latency)

            if first_token_time and total_tokens > 1:
                decode_time = end - first_token_time
                tpot_ms = (decode_time / (total_tokens - 1)) * 1000
                TPOT_HISTOGRAM.observe(tpot_ms)

        return on_first_token, on_complete

Grafana алерты latency

# Alerting rules
- alert: LLMHighTTFT
  expr: histogram_quantile(0.95, rate(llm_time_to_first_token_seconds_bucket[5m])) > 3
  for: 5m
  annotations:
    summary: "TTFT p95 > 3 секунды"

- alert: LLMHighTotalLatency
  expr: histogram_quantile(0.99, rate(llm_total_latency_seconds_bucket[5m])) > 30
  for: 5m
  annotations:
    summary: "Total latency p99 > 30 секунд"

Диагностика по компонентам

Когда latency высокая — нужно понять где:

  • Queuing time: время в очереди vLLM → признак нехватки пропускной способности
  • Prefill time: обработка входного контекста → длинные системные промпты
  • Decode time: генерация токенов → определяется max_tokens и TPOT

vLLM метрики для диагностики: vllm:time_to_first_token_seconds, vllm:time_per_output_token_seconds, vllm:e2e_request_latency_seconds — все разбиты по percentiles.