Yolo Vision Shenzhen
Шэньчжэнь
Присоединиться сейчас

Развертывание Ultralytics YOLOv5 с DeepSparse от Neural Magicдля производительности GPU на центральных процессорах

Команда Ultralytics

5 мин чтения

5 января 2023 г.

Расширьте возможности обучения и развертывания моделей Ultralytics YOLOv5 с помощью DeepSparse от Neural Magic для производительности GPU на центральных процессорах. Более быстрое и масштабируемое развертывание YOLOv5 .

Хотите ускорить обучение и развертывание своих YOLOv5 модели? Мы поможем вам! Представляем вам нашего нового партнера, компанию Neural Magic. Поскольку Neural Magic предоставляет программные инструменты, в которых особое внимание уделяется максимальной производительности моделей и простоте рабочего процесса, вполне естественно, что мы объединились, чтобы предложить решение, которое сделает процесс развертыванияYOLOv5 еще лучше.

DeepSparse - это CPU среда выполнения выводов Neural Magic, которая использует преимущества разреженности и низкоточной арифметики в нейронных сетях для обеспечения исключительной производительности на аппаратном обеспечении. Например, по сравнению с базовой версией ONNX Runtime, DeepSparse обеспечивает 5,8-кратное ускорение для YOLOv5s, работающих на той же машине!

Сравнение производительности YOLOv5 с DeepSparse

Впервые ваши задачи глубокого обучения могут соответствовать требованиям производительности в production-среде без сложности и затрат на аппаратные ускорители. Проще говоря, DeepSparse обеспечивает производительность GPU и простоту программного обеспечения:

  1. Гибкие развертывания: Стабильная работа в облаке, центре обработки данных и на периферии с любым поставщиком оборудования
  2. Бесконечная масштабируемость: Масштабирование с помощью стандартного Kubernetes, вертикально до сотен ядер или полностью абстрагировано с помощью serverless
  3. Простая интеграция: Используйте чистые API для интеграции вашей модели в приложение и мониторинга ее в рабочей среде.

Достигайте производительности GPU на центральных процессорах.

DeepSparse использует разреженность модели для повышения производительности.

Разрежение с помощью обрезки и квантования позволяет на порядок сократить размер и количество вычислений, необходимых для выполнения сети, при сохранении высокой точности. DeepSparse ориентируется на разреженность, пропуская умножение-добавление на ноль и сокращая объем вычислений в прямом проходе. Поскольку разреженные вычисления занимают много памяти, DeepSparse выполняет сеть в глубину, разбивая задачу на Tensor столбцы, которые представляют собой вертикальные полосы вычислений, помещающиеся в кэш.

СетьYOLOv5 с глубоким разбросом и Ultralytics ностью

Разреженные сети со сжатыми вычислениями, выполняемые в кэше по глубине, позволяют DeepSparse обеспечить производительность GPU на центральных процессорах!

Создание разреженной версии YOLOv5 , обученной на пользовательских данных

Репозиторий моделей Neural Magic с открытым исходным кодом, SparseZoo, содержит предварительно спарсированные контрольные точки каждой модели YOLOv5 . Используя SparseML, интегрированный с Ultralytics, вы можете точно настроить разреженную контрольную точку на ваши данные с помощью одной команды CLI .

Развертывание YOLOv5 с помощью DeepSparse

Установите DeepSparse

Выполните следующие действия, чтобы установить DeepSparse. Мы рекомендуем использовать виртуальную среду с Python.

pip install deepsparse[serveryolo,onnxruntime]

Соберите файл ONNX

DeepSparse принимает модель в формате ONNX , переданную либо как:

  • Локальный путь к модели ONNX
  • Заглушка SparseZoo, идентифицирующая модель в SparseZoo

Мы сравним стандартную плотную YOLOv5s с обрезанной и квантованной YOLOv5s, идентифицированной по следующим заглушкам SparseZoo:

zoo:ultralytics
zoo:ultralytics

Развертывание модели

DeepSparse предлагает удобные API для интеграции вашей модели в приложение.

Чтобы опробовать приведенные ниже примеры развертывания, извлеките изображение для примера и сохраните его как basilica.jpg с помощью следующей команды:

wget -O basilicabasilicajpg

API Python

Конвейеры оборачивают предварительную обработку и выходную постобработку вокруг среды выполнения, обеспечивая чистый интерфейс для добавления DeepSparse в приложение. Интеграция Ultralytics включает в себя готовый конвейер, который принимает необработанные изображения и выводит ограничительные рамки.

Создайте конвейер и запустите вывод:

from deepsparse import Pipeline

# список изображений в локальной файловой системе
images = [basilica.jpg"]

# создать конвейер
model_stub = "zoo:ultralytics"
yolo_pipeline = Pipeline.create(
task=yolo",
model_path=model_stub,
)

# выполняем вывод на изображениях, получаем ограничительные рамки + классы
pipeline_outputs = yolo(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

Если вы работаете в облаке, вы можете получить ошибку о том, что open-cv не может найти libGL.so.1. Запуск следующего кода в Ubuntu устанавливает его:

apt-get install libgl1-mesa-glx

HTTP-сервер

DeepSparse Server работает на базе популярного веб-фреймворка FastAPI и веб-сервера Uvicorn. С помощью всего одной команды CLI вы можете легко настроить конечную точку сервиса моделирования с DeepSparse. Сервер поддерживает любые конвейеры DeepSparse, включая обнаружение объектов с помощью YOLOv5, позволяя отправлять необработанные изображения на конечную точку и получать ограничивающие рамки.

Запустите сервер с обрезанной и квантованной YOLOv5s:

deepsparse.server \
--task yolo \
--model_path zoo:ultralytics

Пример запроса с использованием пакета requests в Python:

import requests, json

# список изображений для вывода (локальные файлы на стороне клиента)
path = [basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]

# отправить запрос по HTTP на endpoint /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# ответ возвращается в формате JSON
annotations = json.loads(resp.text) # словарь с результатами аннотаций
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

Annotate CLI

Вы также можете использовать команду annotate, чтобы движок сохранил аннотированное фото на диск. Попробуйте --source 0, чтобы аннотировать видеопоток с веб-камеры в реальном времени!

deepsparse.object_detection.annotate --model_filepath zoo:ultralytics--source basilica.jpg

Выполнение вышеуказанной команды создаст папку annotation-results и сохранит аннотированное изображение внутри.

Аннотированная Basilica с помощью YOLOv5

Эталонная производительность

Используя сценарий бенчмарка DeepSparse, мы сравним пропускную способность DeepSparse с пропускной способностью ONNX Runtime на YOLOv5s.

Бенчмарки были запущены на инстансе AWS c6i.8xlarge (16 ядер).

Сравнение производительности при размере пакета 32

Базовый уровень времени выполнения ONNX

При партии 32 ONNX Runtime достигает скорости 42 изображения/с при использовании стандартных плотных YOLOv5:

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1 -e onnxruntime

> Путь к исходной модели: zoo:ultralytics
> Размер партии: 32
> Сценарий: sync
> Пропускная способность (элементов/сек): 41.9025

Высокая производительность DeepSparse

Хотя DeepSparse демонстрирует наилучшую производительность с оптимизированными разреженными моделями, он также хорошо работает со стандартной плотной YOLOv5s.

При размере пакета 32 DeepSparse достигает 70 изображений/сек со стандартной плотной YOLOv5s — увеличение производительности в 1,7 раза по сравнению с ORT!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> Путь к исходной модели: zoo:ultralytics
> Размер партии: 32
> Сценарий: sync
> Пропускная способность (элементов/сек): 69.5546

DeepSparse: производительность при разреженности

Когда к модели применяется разреженность, прирост производительности DeepSparse по сравнению с ONNX Runtime становится еще более значительным.

При размере пакета 32 DeepSparse достигает 241 изображений/сек с обрезанной и квантованной YOLOv5s — увеличение производительности в 5,8 раза по сравнению с ORT!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> Путь к исходной модели: zoo:ultralytics
> Размер партии: 32
> Сценарий: sync
> Пропускная способность (элементов/сек): 241.2452

Сравнение производительности при размере пакета 1

DeepSparse также способен увеличить скорость по сравнению с ONNX Runtime для сценария пакетной обработки 1, чувствительного к задержкам.

Базовый уровень времени выполнения ONNX

В партии 1 ONNX Runtime достигает 48 изображений/с при использовании стандартных плотных YOLOv5s.

deepsparse.benchmark zoo:ultralytics-s sync -b 1 -nstreams 1 -e onnxruntime

> Путь к исходной модели: zoo:ultralytics
> Размер партии: 1
> Сценарий: sync
> Пропускная способность (элементов/сек): 48.0921

DeepSparse: производительность при разреженности

Когда к модели применяется разреженность, прирост производительности DeepSparse по сравнению с ONNX Runtime становится еще более значительным.

В партии 1 DeepSparse достигает скорости 135 изображений/с с обрезанным и квантованным YOLOv5, чтов 2,8 раза превышает производительность ONNX Runtime!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> Путь к исходной модели: zoo:ultralytics
> Размер партии: 1
> Сценарий: sync
> Пропускная способность (элементов/сек): 134.9468

Поскольку экземпляры c6i.8xlarge имеют инструкции VNNI, пропускная способность DeepSparse может быть увеличена, если веса обрезаются блоками по 4.

В партии 1 DeepSparse достигает 180 элементов/с с 4-блочным обрезанно-квантованным YOLOv5 -прирост производительности в 3,7 раза по сравнению с ONNX Runtime!

deepsparse.benchmark zoo:ultralytics-s sync -b 1 -nstreams 1

> Путь к исходной модели: zoo:ultralytics
> Размер партии: 1
> Сценарий: sync
> Пропускная способность (элементов/сек): 179.7375

И вуаля! Вы готовы оптимизировать развертывание YOLOv5 с помощью DeepSparse.

Начните работу с YOLOv5 и DeepSparse

Чтобы связаться с нами, присоединяйтесь к нашему сообществу и оставляйте нам свои вопросы и комментарии. Ознакомьтесь с репозиториемUltralytics YOLOv5 и полной документациейNeural Magic по развертыванию YOLOv5.

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

Давайте строить будущее
ИИ вместе!

Начните свой путь в будущее машинного обучения

Начать бесплатно