Развёртывание YOLOv5 с помощью DeepSparse от Neural Magic#
Компания Neural Magic была приобретена Red Hat в январе 2025 года и прекратила поддержку версий для сообщества DeepSparse, SparseML, SparseZoo и Sparsify 2 июня 2025 года. Инструменты по-прежнему работают, но больше не получают обновлений и поддержки. Для поддерживаемого ускорения на CPU см. интеграции OpenVINO и ONNX.
Добро пожаловать в мир ИИ, поставляемого в виде программного обеспечения.
В этом руководстве объясняется, как развернуть YOLOv5 с помощью DeepSparse от Neural Magic.
DeepSparse — среда выполнения для инференса, обеспечивающая исключительную производительность на CPU. Например, по сравнению с базовой версией ONNX Runtime DeepSparse ускоряет YOLOv5s в 5,8 раза на том же компьютере!
Впервые задачи глубокого обучения могут удовлетворять требованиям к производительности в рабочей среде без сложностей и затрат, связанных с аппаратными ускорителями. Проще говоря, DeepSparse обеспечивает производительность GPU и простоту программного обеспечения:
- Гибкое развёртывание: стабильная работа в облаке, центре обработки данных и на периферии с оборудованием любого производителя — от Intel и AMD до ARM
- Неограниченное масштабирование: вертикальное масштабирование до сотен ядер, горизонтальное масштабирование с помощью стандартного Kubernetes или полная абстракция инфраструктуры с бессерверной архитектурой
- Простая интеграция: понятные API для интеграции модели в приложение и мониторинга модели в рабочей среде
Как DeepSparse обеспечивает производительность уровня GPU?#
DeepSparse использует разреженность модели для повышения производительности.
Разреживание с помощью прунинга и квантования — широко изученный метод, который позволяет на порядки уменьшить размер сети и объём вычислений, необходимых для её выполнения, сохраняя высокую точность. DeepSparse учитывает разреженность и пропускает обнулённые параметры, сокращая объём вычислений при прямом проходе. Поскольку вычисления с разреженными данными теперь ограничены пропускной способностью памяти, DeepSparse выполняет сеть послойно, разбивая задачу на тензорные столбцы — вертикальные полосы вычислений, помещающиеся в кэш.
Благодаря сжатым вычислениям и послойному выполнению в кэше DeepSparse обеспечивает производительность уровня GPU на CPU с разреженными сетями!
Как создать разреженную версию YOLOv5, обученную на моих данных?#
Репозиторий моделей с открытым исходным кодом от Neural Magic — SparseZoo — содержит предварительно разреженные контрольные точки каждой модели YOLOv5. С помощью SparseML, интегрированного с Ultralytics, ты можешь дообучить разреженную контрольную точку на своих данных одной командой CLI.
Подробнее см. в описании интеграции SparseML с YOLOv5.
Использование DeepSparse#
Рассмотрим пример тестирования производительности и развёртывания разреженной версии YOLOv5s с помощью DeepSparse.
Установка DeepSparse#
Выполни следующую команду, чтобы установить DeepSparse. Рекомендуем использовать виртуальное окружение Python.
pip install "deepsparse[server,yolo,onnxruntime]"Получение файла ONNX#
DeepSparse принимает модель в формате ONNX, указанную одним из следующих способов:
- Заглушка SparseZoo, указывающая на файл ONNX в SparseZoo
- Локальный путь к модели ONNX в файловой системе
В примерах ниже используются стандартные плотная и разреженная квантованная контрольные точки 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#
Pipelines оборачивают среду выполнения в процедуры предварительной обработки и постобработки результатов, предоставляя удобный интерфейс для добавления 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. Можно установить недостающую библиотеку:
apt-get install libgl1Или использовать вариант OpenCV без графического интерфейса, которому не нужны GUI-зависимости:
pip install opencv-python-headlessHTTP-сервер#
DeepSparse Server работает на базе популярного веб-фреймворка FastAPI и веб-сервера Uvicorn. Всего одной командой CLI ты можешь быстро настроить конечную точку сервиса модели с DeepSparse. Server поддерживает любые Pipeline от DeepSparse, включая обнаружение объектов с YOLOv5: можно отправлять исходные изображения на конечную точку и получать ограничивающие рамки.
Запусти Server с разреженной квантованной моделью YOLOv5s:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneПример запроса с использованием пакета requests для Python:
import json
from contextlib import ExitStack
import requests
# список изображений для инференса (локальные файлы на стороне клиента)
path = ["basilica.jpg"]
# отправить HTTP-запрос к конечной точке /predict/from_files
url = "http://0.0.0.0:5543/predict/from_files"
with ExitStack() as stack:
files = [("request", stack.enter_context(open(img, "rb"))) for img in path]
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 и ONNX Runtime на YOLOv5s с помощью скрипта тестирования производительности DeepSparse.
Тесты проводились на экземпляре 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
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
# Batch Size: 32
# Scenario: sync
# Throughput (items/sec): 41.9025Производительность DeepSparse на плотной модели#
DeepSparse показывает наилучшую производительность с оптимизированными разреженными моделями, но также хорошо работает со стандартной плотной моделью YOLOv5s.
При размере пакета 32 DeepSparse обрабатывает 70 изображений в секунду со стандартной плотной моделью YOLOv5s — производительность на 1.7x выше, чем у ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
# Batch Size: 32
# Scenario: sync
# Throughput (items/sec): 69.5546Производительность DeepSparse на разреженной модели#
Разреживание модели ещё больше увеличивает преимущество DeepSparse над ONNX Runtime по производительности.
При размере пакета 32 DeepSparse обрабатывает 241 изображение в секунду с прореженной и квантованной моделью YOLOv5s — производительность на 5.8x выше, чем у ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
# Batch Size: 32
# Scenario: sync
# Throughput (items/sec): 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
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
# Batch Size: 1
# Scenario: sync
# Throughput (items/sec): 48.0921Производительность DeepSparse на разреженной модели#
При размере пакета 1 DeepSparse обрабатывает 135 элементов в секунду с прореженной и квантованной моделью YOLOv5s — производительность на 2.8x выше, чем у ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
# Batch Size: 1
# Scenario: sync
# Throughput (items/sec): 134.9468Поскольку экземпляры c6i.8xlarge поддерживают инструкции VNNI, пропускную способность DeepSparse можно ещё увеличить, если выполнять прореживание весов блоками по 4.
При размере пакета 1 DeepSparse обрабатывает 180 элементов в секунду с прореженной и квантованной моделью YOLOv5s с блоками по 4 — производительность на 3.7x выше, чем у ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
# Batch Size: 1
# Scenario: sync
# Throughput (items/sec): 179.7375Начало работы с DeepSparse#
Исследования или тестирование? DeepSparse Community бесплатен для исследований и тестирования. Начни работу с файла README DeepSparse.
Подробнее о развёртывании YOLOv5 с DeepSparse читай в примерах DeepSparse для YOLOv5 и публикации Ultralytics в блоге об интеграции DeepSparse.
Часто задаваемые вопросы#
Нет. DeepSparse — это среда выполнения для CPU, а приведённые выше тесты проводились на 16-ядерном экземпляре AWS
c6i.8xlargeбез ускорителей.Экспортируй её в ONNX с помощью
python export.py --weights best.pt --include onnxи передай путь к файлу в качествеmodel_pathвместо заглушки SparseZoo. Среда выполнения ускоряет и плотные модели, а наибольший прирост получают прореженные и квантованные модели.Дообучи на своих данных одну из предварительно разреженных контрольных точек SparseZoo с помощью SparseML, который сохраняет структуру разреженности во время обучения, а затем экспортируй модель в ONNX.
Нет. Версии для сообщества были объявлены устаревшими 2 июня 2025 года, а пакеты на PyPI больше не обновляются. Существующие конвейеры продолжат работать, но для новых развёртываний стоит рассмотреть варианты с OpenVINO или ONNX Runtime, которые активно поддерживаются.