Inference Latency
Задержка инференса — время, за которое модель преобразует один вход в предсказание. Рассматриваются её причины, способы измерения и компромисс между задержкой и пропускной способностью.
Задержка инференса — это время, которое обученная модель машинного обучения затрачивает на преобразование одного входа, например кадра с камеры или текстового запроса, в предсказание. Обычно её измеряют в миллисекундах (мс); она определяет, насколько быстро система может реагировать: камера, снимающая 30 кадров в секунду, выдаёт новый кадр каждые 33,3 мс, поэтому детектор, которому нужно больше времени, отстаёт от потока и не может обеспечить инференс в реальном времени. Задержку указывают либо только для прямого прохода, либо для всего процесса — от исходного входа до пригодного для использования результата. В производственных системах отслеживают перцентили, например медиану (p50) и 99-й перцентиль (p99), поскольку несколько медленных ответов могут быть не менее важны, чем среднее значение.
Из чего складывается задержка инференса#
Каждое предсказание проходит несколько этапов. Предобработка декодирует, изменяет размер и нормализует входные данные. Прямой проход выполняет нейросеть; его стоимость растёт с увеличением числа FLOPs, разрешения входных данных и числовой точности, а скорость зависит от процессора — CPU, GPU или нейронного процессора (NPU). Постобработка преобразует исходные выходные данные в результаты: для детектора — декодирует рамки и выполняет подавление немаксимумов (NMS). Облачный API добавляет время сетевого обмена и ожидания запроса в очереди. Поэтому периферийный ИИ запускает модели на устройстве, которое собирает данные. Первый вызов также медленнее последующих: при первом использовании фреймворки выделяют память, загружают веса в кэш и выбирают ядра.
Оборудование и среда выполнения меняют время прямого прохода на порядок и более: Ultralytics YOLO26 nano обрабатывает изображение COCO размером 640 пикселей в среднем за 38,9 мс с ONNX на CPU и за 1,7 мс с TensorRT на GPU NVIDIA T4. Ultralytics YOLO записывает время каждого этапа для каждого предсказания в атрибут speed результата, а режим бенчмаркинга повторяет измерение для каждого формата экспорта:
from ultralytics import YOLO
# Load the smallest YOLO26 detection model
model = YOLO("yolo26n.pt")
# Predict on one image
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Per-image time in milliseconds for each stage of the pipeline
for stage, ms in result.speed.items():
print(f"{stage}: {ms:.1f} ms")Цикл выводит время предобработки, инференса и постобработки; их сумма составляет задержку модели для этого изображения на текущем устройстве.
Как точно измерять задержку#
Сравнивать показатели задержки можно только при одинаковом способе измерения. Для надёжных измерений отбрасывают несколько прогревочных запусков, замеряют время многих запусков и указывают медиану и перцентиль хвоста распределения, а не результат одного запуска. При работе с GPU таймер должен дождаться завершения вычислений на устройстве, например с помощью torch.cuda.synchronize(), поскольку запуск ядер выполняется асинхронно и слишком раннее считывание часов завершится до окончания работы. Размер входных данных, размер пакета, точность и устройство должны соответствовать целевому развёртыванию: задержка модели на GPU центра обработки данных мало что говорит о её задержке на телефоне. FLOPs позволяют оценить стоимость без учёта оборудования, однако модели с одинаковым количеством FLOPs могут работать на одном устройстве с заметно разной скоростью.
Задержка инференса и пропускная способность#
Пропускная способность — это количество входных данных, которые система обрабатывает за единицу времени, например изображений или токенов в секунду. Часто она растёт в ущерб задержке. Больший пакет позволяет эффективнее загружать оборудование и повышает пропускную способность, но каждый входной элемент в пакете ждёт завершения обработки всего пакета, поэтому время ответа на каждый запрос увеличивается:
import time
import torch
import torchvision
# A ResNet-18 image classifier in inference mode on the CPU
model = torchvision.models.resnet18().eval()
for batch in [1, 2, 4, 8]:
x = torch.randn(batch, 3, 224, 224)
with torch.inference_mode():
model(x) # warmup run, not timed
times = []
for _ in range(20):
start = time.perf_counter()
model(x)
times.append(time.perf_counter() - start)
latency = sorted(times)[len(times) // 2] # median seconds per batch
print(f"batch {batch}: {latency * 1e3:5.1f} ms per batch, {batch / latency:4.0f} images/s")На CPU ноутбука увеличение пакета с 1 до 8 подняло пропускную способность со 168 до 220 изображений в секунду, а время обработки пакета выросло с 6 до 36 мс. Поэтому интерактивные системы, такие как системы помощи водителю и голосовые помощники, работают с размером пакета 1, а автономные задачи, например индексация видеоархива, активно используют пакетную обработку. Серверы LLM применяют непрерывную пакетную обработку, добавляя запросы в уже обрабатываемый пакет и удаляя их из него, чтобы поддерживать высокую пропускную способность, не заставляя каждого пользователя ждать обработки полного пакета.
Снижение задержки инференса#
Самый большой прирост обычно даёт сокращение вычислений: уменьшение варианта модели, снижение разрешения входных данных или уменьшение числа весов с помощью прунинга модели. Квантование модели до FP16 или INT8 удешевляет каждую оставшуюся операцию на оборудовании с быстрыми блоками низкой точности. Экспорт в оптимизированный движок инференса, например TensorRT, OpenVINO или ONNX Runtime, объединяет слои и выбирает самые быстрые ядра для устройства. Запуск модели непосредственно на устройстве устраняет сетевой обмен, который при мобильном подключении часто занимает десятки миллисекунд.
В каких случаях важна задержка#
- Большие языковые модели (LLM): чат-сервисы отслеживают время до первого токена, которое пользователи ощущают как быстроту отклика, и время генерации одного выходного токена, определяющее скорость потоковой выдачи. Спекулятивное декодирование сокращает второе, проверяя несколько предварительно сгенерированных токенов за один прямой проход.
- Промышленный контроль качества: Камера над конвейером должна классифицировать каждую деталь до того, как та достигнет механизма отбраковки, поэтому задержка определяет максимальную скорость линии.
- Автономные транспортные средства: Системы восприятия, планирования и управления работают в условиях жёсткого ограничения по времени. При скорости 100 км/ч автомобиль проезжает 2,8 метра за каждые 100 мс задержки.










