Выбор размера батча: компромисс между латентностью и пропускной способностью

ONNX Runtime Web (ORT Web) предоставляет возможность выполнять предобученные модели в формате ONNX непосредственно в браузере или Node.js-среде. Архитектура библиотеки оптимизирована для быстрого запуска моделей на различных бэкендах, включая WebAssembly (WASM) и WebGPU. Выбор конкретного бэкенда влияет на производительность и требования к аппаратным ресурсам, поэтому оптимизация размера батча становится ключевым аспектом при работе с ORT Web.

Понятие батча и его влияние на производительность

Батч — это количество входных данных, передаваемых в модель за одну операцию инференса. Размер батча напрямую влияет на два критических параметра:

  • Латентность: время от подачи входного сигнала до получения результата.
  • Пропускная способность: количество обработанных запросов за единицу времени.

Малый размер батча обеспечивает минимальную латентность, что важно для интерактивных приложений, где реакция модели должна быть максимально быстрой. Больший батч увеличивает эффективность использования ресурсов, повышая пропускную способность, но может заметно увеличивать задержку.

Выбор размера батча в браузере

В веб-среде производительность зависит от возможностей устройства пользователя. Важные факторы:

  • Ограничения оперативной памяти: увеличение батча требует больше памяти для хранения промежуточных тензоров.
  • Производительность CPU/GPU: на устройствах с медленным процессором или без аппаратного ускорения большие батчи могут снижать эффективность.
  • Загрузка интерфейса: слишком длинная обработка данных в одном батче может блокировать основной поток, если используется WebAssembly без многопоточности.

Для WebAssembly рекомендуется стартовать с небольших батчей (например, 1–4 элемента) и постепенно увеличивать их, наблюдая за балансом между латентностью и пропускной способностью. Для WebGPU можно использовать более крупные батчи, так как GPU оптимизирован для параллельной обработки большого числа элементов.

Тонкая настройка инференса

ONNX Runtime Web предоставляет API для работы с сессиями моделей. Ключевые методы:

  • session.run(): выполнение инференса на заданном наборе входов. Размер батча определяется размерностью тензоров, передаваемых в этот метод.
  • tensor: создание входных и выходных тензоров с правильными размерами. Для батчей необходимо учитывать первую размерность как количество примеров в батче.
  • Асинхронное выполнение: при больших батчах рекомендуется использовать асинхронные вызовы, чтобы не блокировать основной поток интерфейса.

Стратегии оптимального размера батча

  1. Мини-батчи для интерактивных задач Применяются для приложений с низкой задержкой, например, чат-ботов или интерактивного распознавания изображений. Обычно размер батча не превышает 4–8 элементов. Латентность минимальна, пропускная способность умеренная.

  2. Средние батчи для смешанных задач Оптимально для приложений с периодическим обновлением данных, где допустим небольшой прирост задержки. Размер батча — 8–32 элемента. Баланс латентности и пропускной способности достигается через динамическое изменение размера батча в зависимости от загрузки.

  3. Большие батчи для пакетной обработки Используются в системах анализа данных или при пакетной генерации результатов, где критична максимальная пропускная способность. Размер батча может превышать 64 элемента, особенно на GPU. Латентность увеличивается, но общий throughput возрастает многократно.

Метрики и мониторинг

Для правильного выбора размера батча важно отслеживать следующие показатели:

  • Время инференса на один элемент: рассчитывается как общее время выполнения разделенное на количество элементов в батче.
  • Объем памяти: наблюдение за использованием памяти позволяет избежать переполнения, особенно в браузере.
  • Пропускная способность: количество элементов, обработанных за единицу времени. При увеличении батча рост throughput может замедлиться из-за насыщения ресурсов.

Динамическая адаптация батча

Для веб-приложений с переменной нагрузкой целесообразно применять динамическую адаптацию размера батча:

  • Начальный маленький батч используется для минимизации латентности.
  • При нарастании очереди входных данных размер батча постепенно увеличивается.
  • Как только очередь сокращается, размер батча возвращается к минимальному для поддержания отзывчивости интерфейса.

Динамическая адаптация позволяет одновременно поддерживать высокую пропускную способность и низкую задержку, используя возможности ORT Web на современных устройствах максимально эффективно.