Развёртывание YOLOv5 с помощью DeepSparse от Neural Magic#
Компания Neural Magic была приобретена Red Hat в январе 2025 года и прекратила поддержку версий для сообщества DeepSparse, SparseML, SparseZoo и Sparsify 2 июня 2025 года. Инструменты по-прежнему работают, но больше не получают обновлений и поддержки. Для поддерживаемого ускорения на CPU см. интеграции OpenVINO и ONNX.
В этом руководстве объясняется, как развернуть YOLOv5 с помощью DeepSparse от Neural Magic. В пакете ultralytics интеграция с Neural Magic выполняет ту же функцию.
DeepSparse — среда выполнения инференса, оптимизированная для CPU. В приведённых ниже тестах прореженная и квантованная YOLOv5s работает в DeepSparse в 5,8 раза быстрее, чем плотная модель в ONNX Runtime на той же машине.
DeepSparse призван обеспечить соответствие рабочих нагрузок глубокого обучения требованиям к производительности в промышленной эксплуатации на CPU — без сложности и затрат, связанных со специализированными аппаратными ускорителями:
- Гибкое развёртывание: стабильная работа в облаке, центре обработки данных и на периферии с оборудованием любого производителя — от Intel и AMD до ARM
- Масштабируемость: вертикальное масштабирование до сотен ядер, горизонтальное — с помощью стандартного Kubernetes или полная абстракция инфраструктуры с бессерверной архитектурой
- Простая интеграция: API для встраивания модели в приложение и мониторинга модели в промышленной эксплуатации
Как DeepSparse обеспечивает производительность уровня GPU?#
DeepSparse использует разреженность модели для повышения производительности.
Разреживание с помощью прореживания и квантования — широко исследуемый метод, позволяющий уменьшить размер сети и объём вычислений на порядки, сохраняя высокую точность. DeepSparse учитывает разреженность и пропускает обнулённые параметры, сокращая вычисления при прямом проходе. Поскольку разреженные вычисления теперь ограничены пропускной способностью памяти, DeepSparse выполняет сеть послойно по глубине, разбивая задачу на тензорные столбцы — вертикальные полосы вычислений, помещающиеся в кэш.
Именно выполнение разреженных сетей послойно по глубине в кэше позволяет DeepSparse обеспечивать быстрый инференс на 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,7 раза быстрее, чем ONNX Runtime.
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,8 раза быстрее, чем ONNX Runtime.
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,8 раза быстрее, чем 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 с четырьмя блоками — это в 3,7 раза быстрее, чем 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, которые активно поддерживаются.
Комментарии
Задай вопрос, поделись результатами или помоги кому-нибудь.