Infrastructure
latency
Время между отправкой запроса и получением ответа — ключевая метрика качества сервиса.
Что такое latency
Latency (задержка) — время от отправки запроса клиентом до получения первого (или полного) ответа. Для LLM-сервисов различают:
- TTFT — Time to First Token: время до первого токена (важно для стриминга)
- End-to-end latency — полное время генерации ответа
- p50/p95/p99 — медианная, 95-й и 99-й перцентили задержки при нагрузке
Компоненты latency LLM-сервиса
Total latency = network_in + queue_wait + prefill + decode × output_tokens + network_out
- network: 1–50 мс (зависит от локации)
- queue_wait: 0 — ∞ (зависит от нагрузки)
- prefill: пропорционально длине входного промпта
- decode: TPOT × число выходных токенов
SLA targets для чат-приложений
| Метрика | Хорошо | Приемлемо | Плохо |
|---|---|---|---|
| TTFT p95 | < 500 мс | < 2 с | > 5 с |
| TPOT | < 30 мс | < 80 мс | > 150 мс |
| End-to-end (100 токенов) | < 5 с | < 15 с | > 30 с |
Latency vs throughput компромисс
Высокий throughput (суммарный TPS) требует batching — что увеличивает latency для отдельного запроса. Нужен баланс:
- Чат-сервис: приоритет latency, умеренный batching
- Batch-генерация: приоритет throughput, максимальный batching
Измерение latency
# Простое измерение через OpenAI API
import time
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="token")
start = time.time()
stream = client.chat.completions.create(
model="mistral-7b",
messages=[{"role": "user", "content": "Привет!"}],
stream=True
)
first_token_time = None
for chunk in stream:
if first_token_time is None:
first_token_time = time.time()
print(f"TTFT: {first_token_time - start:.3f}s")
print(f"End-to-end: {time.time() - start:.3f}s")
Связанные термины
- TTFT — компонент latency до первого токена
- TPOT — скорость генерации после первого токена
- throughput — обратный компромисс
- serving — контекст оптимизации latency
Готовы запустить GPU-задачу?
Запустить GPU-сервер