Настраивайтесь на YOLO Vision 2025!
25 сентября 2025 г.
10:00 — 18:00 BST
Гибридное мероприятие
Yolo Vision 2024

Развертывание Ultralytics YOLOv5 с Neural Magic’s DeepSparse для производительности уровня GPU на CPU

Команда Ultralytics

5 мин чтения

5 января 2023 г.

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

Хотите ускорить обучение и развертывание ваших моделей YOLOv5? Мы вам поможем! Представляем нашего нового партнера, Neural Magic. Поскольку Neural Magic предоставляет программные инструменты, которые делают упор на максимальную производительность модели и простоту рабочего процесса, вполне естественно, что мы объединились, чтобы предложить решение, которое сделает процесс развертывания YOLOv5 еще лучше.

DeepSparse — это среда выполнения логического вывода Neural Magic для ЦП, которая использует преимущества разреженности и арифметики низкой точности в нейронных сетях, чтобы обеспечить исключительную производительность на стандартном оборудовании. Например, по сравнению с базовым уровнем ONNX Runtime, DeepSparse предлагает ускорение в 5,8 раза для YOLOv5s, работающей на той же машине!

Сравнение пропускной способности YOLOv5 с DeepSparse

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

  1. Гибкие развертывания: Стабильная работа в облаке, центре обработки данных и на периферии с любым поставщиком оборудования
  2. Бесконечная масштабируемость: Масштабирование с помощью стандартного Kubernetes, вертикально до сотен ядер или полностью абстрагировано с помощью serverless
  3. Простая интеграция: Используйте чистые API для интеграции вашей модели в приложение и мониторинга ее в рабочей среде.

Достижение производительности уровня GPU на стандартных процессорах

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

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

DeepSparse и сеть Ultralytics YOLOv5

Разреженные сети со сжатыми вычислениями, выполняемые послойно в кэше, позволяют DeepSparse обеспечивать производительность уровня GPU на CPU!

Создайте разреженную версию YOLOv5, обученную на пользовательских данных

Репозиторий моделей с открытым исходным кодом Neural Magic, SparseZoo, содержит предварительно разреженные контрольные точки каждой модели YOLOv5. Используя SparseML, который интегрирован с Ultralytics, вы можете точно настроить разреженную контрольную точку на своих данных с помощью одной команды CLI.

Развертывание 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.jpg

Python API

Конвейеры оборачивают предварительную обработку и постобработку вокруг среды выполнения, предоставляя понятный интерфейс для добавления DeepSparse в приложение. Интеграция DeepSparse-Ultralytics включает готовый конвейер, который принимает необработанные изображения и выводит ограничивающие рамки.

Создайте конвейер и запустите вывод:

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)

Если вы работаете в облаке, вы можете получить ошибку о том, что open-cv не может найти libGL.so.1. Запуск следующего кода в Ubuntu устанавливает его:

apt-get install libgl1-mesa-glx

HTTP-сервер

DeepSparse Server работает на базе популярного веб-фреймворка FastAPI и веб-сервера Uvicorn. С помощью всего одной команды CLI вы можете легко настроить конечную точку обслуживания модели с помощью DeepSparse. Сервер поддерживает любой конвейер (Pipeline) из DeepSparse, включая обнаружение объектов с помощью YOLOv5, что позволяет отправлять необработанные изображения в конечную точку и получать ограничивающие рамки.

Запустите сервер с обрезанной и квантованной 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 на endpoint /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"]

Annotate 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

Эталонная производительность

Используя скрипт для бенчмаркинга DeepSparse, мы сравним пропускную способность DeepSparse с пропускной способностью ONNX Runtime на YOLOv5s.

Бенчмарки были запущены на инстансе AWS c6i.8xlarge (16 ядер).

Сравнение производительности при размере пакета 32

Базовая среда выполнения ONNX

При размере пакета 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

При размере пакета 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 32 -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 элементов/сек с 4-блочной обрезанной и квантованной 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

> Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Размер пакета: 1
> Сценарий: sync
> Пропускная способность (элементов/сек): 179.7375

И вуаля! Вы готовы оптимизировать развертывание YOLOv5 с помощью DeepSparse.

Начните работу с YOLOv5 и DeepSparse

Чтобы связаться с нами, присоединяйтесь к нашему сообществу и оставляйте нам свои вопросы и комментарии. Ознакомьтесь с репозиторием Ultralytics YOLOv5 и полной документацией Neural Magic по развертыванию YOLOv5.

В Ultralytics мы коммерчески сотрудничаем с другими стартапами, чтобы помочь нам финансировать исследования и разработки наших замечательных инструментов с открытым исходным кодом, таких как YOLOv5, чтобы они оставались бесплатными для всех. Эта статья может содержать партнерские ссылки на этих партнеров.

Давайте строить будущее
ИИ вместе!

Начните свой путь в будущее машинного обучения

Начать бесплатно
Ссылка скопирована в буфер обмена