
Перенёс ByteTrack на GPU и ускорил мульти-камерный трекинг в 6 раз
sweetlhare 1 минуту назад Перенёс ByteTrack на GPU и ускорил мульти-камерный трекинг в 6 раз Средний 6 мин 2 Python * Высоконагруженные системы * Машинное обучение * Искусственный интеллект Кейс Как я взял самый...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: sweetlhare 1 минуту назад Перенёс ByteTrack на GPU и ускорил мульти-камерный трекинг в 6 раз Средний 6 мин 2 Python * Высоконагруженные системы * Машинное обучение * Искусственный интеллект Кейс Как я взял самый популярный трекинг-алгоритм, заставил его считать математику всех камер одним GPU-батчем — и по дороге трижды наступил на грабли, о которых стоит знать каждому, кто пишет real-time пайплайны на PyTorch. Архитектура: классический подход vs батчевыйПроблема: N камер = N трекеров = грустный CPUТипичный продакшн-сценарий видеоаналитики: один сервер с GPU, на него приходит 8–32 RTSP-потока, на каждом кадре YOLO находит людей/машины, дальше нужен трекинг — стабильные ID объектов от кадра к кадру. С детекцией всё хорошо: YOLO прекрасно батчится, 16 кадров прогоняются одним инференсом.
А вот дальше начинается интересное. Все популярные Python-библиотеки трекинга — BoxMOT, Norfair, roboflow/trackers, встроенный трекер ultralytics — устроены одинаково: один экземпляр трекера на один поток видео, вся математика на CPU. Официальный рецепт для нескольких камер — «заверните каждую камеру в свой поток/процесс».
Технические детали
На 2–4 камерах это работает. На 16 — фильтр Кальмана, IoU-матрицы и управление треками съедают ядра быстрее, чем YOLO успевает детектировать: в наших замерах 16 потоков ByteTrack на CPU стоят 104 мс на кадр — против 6 мс на детекцию. Трекер, который «легче детектора», становится бутылочным горлышком пайплайна.
Единственное решение с настоящим кросс-камерным батчингом — NVIDIA DeepStream (nvtracker). Но это GStreamer-пайплайн, C+±плагины, YAML-конфиги и закрытое ядро трекера — совсем другая весовая категория, если весь ваш пайплайн на Python. (Подробное сравнение — в конце статьи.
)Захотелось третьего варианта: эффективность DeepStream, но pip install и три файла PyTorch. Так появился BatchGpuByteTrack. Идея: трекер как батчевая операцияКлючевое наблюдение: математика ByteTrack по своей природе батчится не хуже нейросети.
Отраслевые последствия
Kalman predict/update — умножения маленьких матриц (8×8). Тысяча треков — это тензор , один вызов torch. einsum вместо тысячи вызовов numpy.
IoU cost-матрицы — попарные пересечения боксов. Все потоки пакуются в один padded-тензор — одно ядро. ReID-эмбеддинги — кропы всех детекций всех камер собираются в один батч для OSNet.
На CPU остаётся то, что действительно должно быть на CPU: венгерский алгоритм (lap. lapjv на матрицах «десятки×десятки» решается за микросекунды — GPU-реализации LAP окупаются на миллионах переменных, не на нашем размере) и управление жизненным циклом треков. Получается конвейер: одна батчевая GPU-фаза (predict + IoU + OSNet) → одна выгрузка на CPU → параллельная ассоциация по потокам → одна батчевая GPU-фаза (update).
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





