Вышел Savant 0.2.7: фреймворк компьютерного зрения, оптимизированный для NVIDIA

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

Savant — это фреймворк с открытым исходным кодом для создания высокоэффективных поточных приложений ИИ на базе стека оптимизированных технологий NVIDIA. Он помогает разрабатывать динамические, отказоустойчивые конвейеры вывода, использующие лучшие подходы NVIDIA для ускорителей в центрах обработки данных и на граничных устройствах NVIDIA Jetson.

Savant преодолел отметку в 400 звезд на GitHub, а в Discord теперь есть регулярная активность — для нас было особенно важно получать фидбэк от пользователей. Работа над релизом заняла три месяца. В следующих разделах я подробно расскажу о важнейших частях релиза.

Savant 0.2.7 — это последний релиз с новыми функциями в ветке 0.2.X. Следующие релизы в ветке 0.2.X будут являться обновлениями и исправлениями. Разработка функций переходит в ветку 0.3.X на основе DeepStream 6.4 и не будет поддерживать семейство Xavier edge-устройств NVIDIA Jetson, поскольку NVIDIA не поддерживает их в DeepStream 6.4.

Новые демонстрационные пайплайны

В общей сложности мы предоставляем 26 демок и примеров.

В этом выпуске представлены новые демки:

Демонстрация модели обнаружения на основе трансформатора RT-DETR. Демонстрация показывает, как использовать модель обнаружения RT-DETR в режиме реального времени с Savant. Модель работает немного медленнее, чем стандарт де-факто YOLOV8, но открывает путь для моделей на основе трансформаторов в компьютерном зрении в реальном времени. Подробнее читайте в отдельной статье.

Демонстрация постпроцессинга на основе CuPy. До версии Savant 0.2.7, операции постобработки использовали тензоры в пространстве памяти CPU. В Savant 0.2.7 мы реализовали прямой доступ к тензорам, выделенным в памяти GPU, и набор функций, конвертирующих эти тензоры между OpenCV GpuMat, PyTorch и CuPy. Это дает значительное преимущество при использования моделей с большими тензорами и сложной постобработкой. Теперь вы можете использовать специальный маркер в функции постобработки, чтобы указать фреймворку использовать выделенные на GPU выходные тензоры и обрабатывать их с помощью CuPy, а не NumPy. Мы улучшили демонстрацию работы модели сегментации YOLOV8, чтобы опционально использовать постпроцессинг на базе GPU. Это позволило значительно разгрузить центральный процессор; ранее NumPy использовал почти 100 % всех доступных ядер CPU.

Демонстрация интеграции с PyTorch. Savant использует TensorRT для высокоскоростного инференса. Однако, PyTorch — это доминирующая технология с большим количеством высококачественного кода и моделей. В этом релизе мы демонстрируем интеграцию PyTorch в конвейер Savant. PyTorch не так быстр, как TensorRT, но в некоторых случаях он полезен. Подробнее читайте в отдельной статье.

Демонстрация ориентированных ограничительных рамок. Savant поддерживает ориентированные рамки (рамки с углом поворота). В этом релизе мы наконец-то реализовали демо, показывающее, как их использовать.

Новые функции

Интеграция с Prometheus. Конвейер и буферный адаптер могут экспортировать метрики выполнения в Prometheus и Grafana. Это улучшает наблюдаемость и помогает пользователям отслеживать производительность конвейера. Разработчики могут объявить свои метрики, экспортируемые вместе с системными. Для получения более подробной информации изучите эту демонстрацию и читайте подробности в отдельной статье.

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

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

Обработчик завершения работы в PyFunc. Новый API позволяет правильно обрабатывать операции завершения работы конвейера, освобождая ресурсы и уведомляя сторонние системы о завершении работы.

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

Постобработка моделей на GPU. С помощью новой функции разработчики могут указать фреймворку получать доступ к выходным тензорам моделей непосредственно из памяти GPU, не загружая их в память CPU. Это дает существенную разгрузку CPU и ускорение при использовании моделей с большими тензорами и сложной постобработкой. Теперь вы можете использовать маркер в функции постпроцессинга, чтобы указать фреймворку использовать выделенные на GPU выходные тензоры и обрабатывать их с помощью CuPy, практически заменяя NumPy. Подробнее читайте в отдельной статье.

Функции преобразования между представлениями тензоров в памяти GPU. В этом выпуске мы предоставляем функции для преобразования буферов памяти между OpenCV GpuMat, GPU-тензорами PyTorch и тензорами CuPy. Это позволяет эффективно обрабатывать данные только на GPU в масштабе, не копируя их в память CPU. Такие библиотеки, как OpenCV CUDA, Torch Vision и CuPy, предоставляют широкий спектр высокопроизводительных алгоритмов, позволяя разработчикам эффективно использовать ресурсы GPU и снижая требования к мощности CPU.

Расширенные операции модификации атрибутов объектов. В релизе реализован набор новых операций, позволяющих разработчикам изменять атрибуты объектов более удобным способом.

API использования очередей для PyFunc. Savant позволяет добавлять очереди между PyFunc для реализации параллельной обработки и управления всплесками трафика. В этом выпуске мы реализовали новый API, позволяющий разработчикам получать доступ к развернутым в конвейере очередям и запрашивать их использование.

Следующий релиз

В грядущей версии 0.3.7 мы планируем перейти на DeepStream 6.4 и не планируем представлять другие функции. Идея состоит в том, чтобы получить релиз, полностью совместимый с 0.2.7, но основанный на DeepStream 6.4 и улучшенной технологии без несовместимости API.

Не забудьте подписаться на наш X, чтобы получать обновления о Savant. Также у нас есть Discord, где мы помогаем пользователям.

Чтобы узнать больше о Savant, прочитайте нашу статью: Ten reasons to consider Savant for your computer vision project.

Источник: habr.com

0 0 голоса
Рейтинг новости
0
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии