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

Хочешь ускорить обучение и развёртывание своих моделей YOLOv5? Мы поможем! Знакомься с нашим новым партнёром — Neural Magic. Neural Magic создаёт программные инструменты, ориентированные на максимальную производительность моделей и простоту рабочих процессов, поэтому вполне естественно, что мы объединились, чтобы сделать процесс развёртывания YOLOv5 ещё лучше.
DeepSparse — это среда выполнения инференса на CPU от Neural Magic, использующая разреженность и арифметику низкой точности в нейронных сетях для обеспечения исключительной производительности на стандартном оборудовании. Например, по сравнению с базовым показателем ONNX Runtime DeepSparse обеспечивает ускорение YOLOv5s в 5,8 раза на том же компьютере!

Впервые твои рабочие нагрузки глубокого обучения смогут удовлетворить требованиям производительности в продакшене без сложности и затрат, связанных с аппаратными ускорителями. Проще говоря, DeepSparse обеспечивает производительность GPU и простоту программного обеспечения:
- Гибкое развёртывание: стабильно работай в облаке, дата-центре и на периферийных устройствах с оборудованием любого поставщика
- Неограниченная масштабируемость: масштабируйся горизонтально с помощью стандартного Kubernetes, вертикально — до сотен ядер, или полностью абстрагируй инфраструктуру с помощью бессерверной архитектуры
- Простая интеграция: используй понятные API для интеграции модели в приложение и мониторинга её работы в продакшене
Достигни производительности уровня GPU на стандартных CPU#
DeepSparse использует разреженность модели для ускорения работы.
Разреживание с помощью прореживания и квантования позволяет на порядок уменьшить размер сети и вычислительные ресурсы, необходимые для её выполнения, сохраняя высокую точность. DeepSparse учитывает разреженность, пропуская операции умножения и сложения с нулевыми значениями и сокращая объём вычислений на прямом проходе. Поскольку разреженные вычисления ограничены пропускной способностью памяти, DeepSparse выполняет сеть по глубине, разбивая задачу на столбцы Tensor Columns — вертикальные полосы вычислений, помещающиеся в кэш.

Разреженные сети со сжатыми вычислениями, выполняемыми по глубине в кэше, позволяют DeepSparse обеспечивать производительность уровня GPU на CPU!
Создай разреженную версию Ultralytics YOLOv5, обученную на пользовательских данных#
Репозиторий моделей с открытым исходным кодом Neural Magic, SparseZoo, содержит предварительно разреженные контрольные точки каждой модели YOLOv5. С помощью SparseML, интегрированного с Ultralytics, ты можешь дообучить разреженную контрольную точку на своих данных одной командой CLI.
Разверни Ultralytics YOLOv5 с помощью DeepSparse#
Установи DeepSparse#
Выполни следующую команду, чтобы установить DeepSparse. Рекомендуем использовать виртуальное окружение с Python.
pip install deepsparse[server,yolo,onnxruntime]Получи файл ONNX#
DeepSparse принимает модель в формате ONNX, переданную одним из следующих способов:
- Локальный путь к модели ONNX
- Заглушка SparseZoo, идентифицирующая модель в SparseZoo
Мы сравним стандартную плотную YOLOv5s с прореженной и квантованной YOLOv5s, идентифицируемой следующими заглушками SparseZoo:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneРазверни модель#
DeepSparse предоставляет удобные API для интеграции модели в приложение.
Чтобы попробовать приведённые ниже примеры развёртывания, скачай изображение для примера и сохрани его под именем basilica.jpg с помощью следующей команды:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgAPI Python#
Конвейеры оборачивают среду выполнения предварительной обработкой и постобработкой выходных данных, предоставляя понятный интерфейс для добавления DeepSparse в приложение. Интеграция DeepSparse с Ultralytics включает готовый Pipeline, который принимает исходные изображения и возвращает ограничивающие рамки.
Создай Pipeline и запусти инференс:
from deepsparse import Pipeline
# list of images in local filesystem
images = ["basilica.jpg"]
# create Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# run inference on images, receive bounding boxes + classes
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)Если ты работаешь в облаке, можешь получить ошибку о том, что open-cv не может найти libGL.so.1. Выполнение следующей команды в Ubuntu установит его:
apt-get install libgl1-mesa-glxHTTP-сервер#
DeepSparse Server работает поверх популярного веб-фреймворка FastAPI и веб-сервера Uvicorn. С помощью всего одной команды CLI ты можешь легко настроить конечную точку сервиса модели в DeepSparse. Server поддерживает любой Pipeline из DeepSparse, включая обнаружение объектов с Ultralytics YOLOv5, позволяя отправлять на конечную точку исходные изображения и получать ограничивающие рамки.
Запусти Server с прореженной и квантованной YOLOv5s:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneПример запроса с использованием пакета requests для Python:
import requests, json
# list of images for inference (local files on client side)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]
# send request over HTTP to /predict/from_files endpoint
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)
# response is returned in JSON
annotations = json.loads(resp.text) # dictionary of annotation results
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]CLI аннотаций#
Также можно использовать команду annotate, чтобы движок сохранил аннотированную фотографию на диске. Попробуй --source 0, чтобы аннотировать видео с веб-камеры в реальном времени!
deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpgВыполнение приведённой выше команды создаст папку annotation-results и сохранит внутри неё аннотированное изображение.

Сравнение производительности#
С помощью скрипта бенчмаркинга DeepSparse мы сравним пропускную способность DeepSparse и ONNX Runtime на YOLOv5s.
Бенчмарки запускались на экземпляре AWS c6i.8xlarge (16 ядер).
Сравнение производительности при размере пакета 32#
Базовый показатель ONNX Runtime#
При размере пакета 32 ONNX Runtime достигает скорости 42 изображения/с со стандартной плотной YOLOv5s:
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntimeИсходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Размер пакета: 32 Сценарий: sync Пропускная способность (элементов/с): 41.9025
Производительность плотной модели в DeepSparse#
Хотя DeepSparse показывает лучшую производительность с оптимизированными разреженными моделями, он также хорошо работает со стандартной плотной YOLOv5s.
При размере пакета 32 DeepSparse достигает скорости 70 изображений/с со стандартной плотной YOLOv5s — улучшение производительности в 1,7 раза по сравнению с ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Размер пакета: 32 Сценарий: sync Пропускная способность (элементов/с): 69.5546
Производительность разреженной модели в DeepSparse#
При применении разреженности к модели прирост производительности DeepSparse по сравнению с ONNX Runtime становится ещё выше.
При размере пакета 32 DeepSparse достигает скорости 241 изображение/с с прореженной и квантованной YOLOv5s — улучшение производительности в 5,8 раза по сравнению с ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Размер пакета: 32 Сценарий: sync Пропускная способность (элементов/с): 241.2452
Сравнение производительности при размере пакета 1#
DeepSparse также способен обеспечить ускорение по сравнению с ONNX Runtime в чувствительном к задержке сценарии с размером пакета 1.
Базовый показатель ONNX Runtime#
При размере пакета 1 ONNX Runtime достигает скорости 48 изображений/с со стандартной плотной YOLOv5s.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntimeИсходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Размер пакета: 1 Сценарий: sync Пропускная способность (элементов/с): 48.0921
Производительность разреженной модели в DeepSparse#
При применении разреженности к модели прирост производительности DeepSparse по сравнению с ONNX Runtime становится ещё выше.
При размере пакета 1 DeepSparse достигает скорости 135 изображений/с с прореженной и квантованной YOLOv5s — улучшение производительности в 2,8 раза по сравнению с ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Размер пакета: 1 Сценарий: sync Пропускная способность (элементов/с): 134.9468
Поскольку экземпляры c6i.8xlarge поддерживают инструкции VNNI, пропускную способность DeepSparse можно увеличить ещё больше, если прореживать веса блоками по 4.
При размере пакета 1 DeepSparse достигает скорости 180 элементов/с с прореженной и квантованной YOLOv5s с блоками по 4 — прирост производительности в 3,7 раза по сравнению с ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni Размер пакета: 1 Сценарий: sync Пропускная способность (элементов/с): 179.7375
И готово! Теперь ты можешь оптимизировать развёртывание YOLOv5 с помощью DeepSparse.
Начни работу с Ultralytics YOLOv5 и DeepSparse#
Чтобы связаться с нами, присоединяйся к нашему сообществу и оставляй свои вопросы и комментарии. Ознакомься с репозиторием Ultralytics YOLOv5 и полной документацией Neural Magic по развёртыванию YOLOv5.
В Ultralytics мы заключаем коммерческие партнёрства с другими стартапами, чтобы помогать финансировать исследования и разработку наших отличных инструментов с открытым исходным кодом, таких как YOLOv5, и сохранять их бесплатными для всех. Эта статья может содержать партнёрские ссылки на таких партнёров.









