Развёртывай Ultralytics YOLOv5 с DeepSparse от Neural Magic и добивайся на CPU производительности уровня GPU
Разверни Ultralytics YOLOv5 с DeepSparse от Neural Magic и получи инференс на CPU уровня GPU с разреженными квантованными моделями, примерами кода и бенчмарками.
Nuvola Ladi6 мин. чтения
Хочешь ускорить обучение и развертывание своих моделей YOLOv5? Представляем нашего нового партнера — Neural Magic. Neural Magic разрабатывает программные инструменты, которые обеспечивают максимальную производительность моделей и упрощают рабочие процессы. Поэтому наше сотрудничество позволит еще эффективнее организовать развертывание YOLOv5.
Обновление: в январе 2025 года Red Hat приобрела Neural Magic, после чего компания прекратила поддержку версий DeepSparse, SparseML и SparseZoo для сообщества. Инструкции ниже сохранены для справки; актуальную информацию см. в руководстве по YOLOv5 DeepSparse, ссылка на которое приведена выше.
DeepSparse — это среда выполнения инференса на CPU от Neural Magic. Она использует разреженность и арифметику низкой точности в нейронных сетях, обеспечивая исключительную производительность на обычном оборудовании. Например, по сравнению с базовой версией ONNX Runtime DeepSparse ускоряет работу YOLOv5s в 5,8 раза на одном и том же компьютере!

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

Разреженные сети со сжатым вычислением, выполняемым послойно в кэше, позволяют DeepSparse обеспечивать на CPU производительность уровня GPU!
Создай разреженную версию Ultralytics YOLOv5, обученную на собственных данных#
В репозитории моделей с открытым исходным кодом SparseZoo от Neural Magic хранятся предварительно разреженные чекпойнты каждой модели 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#
Pipeline объединяют предварительную обработку и постобработку результатов со средой выполнения, предоставляя удобный интерфейс для интеграции DeepSparse в приложение. Интеграция DeepSparse с Ultralytics включает готовый Pipeline, который принимает исходные изображения и возвращает ограничивающие рамки.
Создай Pipeline и запусти инференс:
from deepsparse import Pipeline
# список изображений в локальной файловой системе
images = ["basilica.jpg"]
# создать Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# запустить инференс для изображений, получить ограничивающие рамки и классы
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)При запуске в облаке может появиться ошибка о том, что OpenCV не удается найти 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
# список изображений для инференса (локальные файлы на стороне клиента)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]
# отправить запрос по HTTP на конечную точку /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"]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, и сохранять их бесплатными для всех. Эта статья может содержать партнерские ссылки на наших партнеров.
Автор
Комментарии
Задай вопрос, поделись результатами или помоги кому-нибудь.










