Ultralytics YOLO27:
Get Started

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

Завершение поддержки DeepSparse

Компания 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 раза на том же компьютере!

YOLOv5 DeepSparse vs ONNX Runtime speed comparison chart

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

  • Гибкое развёртывание: стабильная работа в облаке, центре обработки данных и на периферии с оборудованием любого производителя — от Intel и AMD до ARM
  • Неограниченное масштабирование: вертикальное масштабирование до сотен ядер, горизонтальное масштабирование с помощью стандартного Kubernetes или полная абстракция инфраструктуры с бессерверной архитектурой
  • Простая интеграция: понятные API для интеграции модели в приложение и мониторинга модели в рабочей среде

Как DeepSparse обеспечивает производительность уровня GPU?#

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

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

DeepSparse tensor columns for sparse neural network inference

Благодаря сжатым вычислениям и послойному выполнению в кэше 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.jpg

API 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-headless

HTTP-сервер#

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 и сохранит в ней изображение с аннотациями.

YOLOv5 detection results with bounding boxes

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

Мы сравним пропускную способность 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, которые активно поддерживаются.

Комментарии