Meet YOLO26: next-gen vision AI.

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

Добро пожаловать в эру программного обеспечения для ИИ.

В этом руководстве объясняется, как развернуть YOLOv5 с помощью DeepSparse от Neural Magic.

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

YOLOv5 DeepSparse vs ONNX Runtime speed comparison chart

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

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

Link to this sectionКак DeepSparse достигает производительности уровня GPU?#

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

Разреживание (sparsification) посредством прунинга (pruning) и квантования — это широко изученная техника, позволяющая на порядки уменьшить размер и вычислительные ресурсы, необходимые для выполнения сети, при сохранении высокой точности. DeepSparse учитывает разреженность, пропуская обнуленные параметры и сокращая количество вычислений при прямом проходе. Поскольку разреженные вычисления теперь ограничены памятью, DeepSparse выполняет сеть послойно, разбивая задачу на Tensor Columns — вертикальные полосы вычислений, которые помещаются в кэш.

DeepSparse tensor columns for sparse neural network inference

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

Link to this sectionКак создать разреженную версию YOLOv5, обученную на моих данных?#

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

Ознакомься с документацией Neural Magic по YOLOv5 для получения дополнительных подробностей.

Link to this sectionИспользование DeepSparse#

Мы разберем пример бенчмаркинга и развертывания разреженной версии YOLOv5s с помощью DeepSparse.

Link to this sectionУстановка DeepSparse#

Выполни следующее, чтобы установить DeepSparse. Мы рекомендуем использовать виртуальное окружение с Python.

pip install "deepsparse[server,yolo,onnxruntime]"

Link to this sectionПолучение файла ONNX#

DeepSparse принимает модель в формате ONNX, передаваемую одним из способов:

  • Заглушка SparseZoo, которая идентифицирует файл ONNX в SparseZoo
  • Локальный путь к модели ONNX в файловой системе

В примерах ниже используются стандартные плотные (dense) и прунинг-квантованные чекпоинты YOLOv5s, идентифицируемые следующими заглушками SparseZoo:

zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Link to this sectionРазвертывание модели#

DeepSparse предлагает удобные API для интеграции твоей модели в приложение.

Чтобы попробовать примеры развертывания ниже, скачай образец изображения и сохрани его как basilica.jpg с помощью следующего кода:

wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg

Link to this sectionPython API#

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

Создай Pipeline и запусти вывод:

from deepsparse import Pipeline

# list of images in local filesystem
images = ["basilica.jpg"]

# create Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
    task="yolo",
    model_path=model_stub,
)

# run inference on images, receive bounding boxes + classes
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

Либо использовать headless-пакет Ultralytics, который полностью избавлен от зависимостей GUI:

pip install ultralytics-opencv-headless

Link to this sectionHTTP-сервер#

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

Запусти сервер с прунинг-квантованной моделью YOLOv5s:

deepsparse.server \
  --task yolo \
  --model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Пример запроса с использованием пакета requests в Python:

import json

import requests

# list of images for inference (local files on client side)
path = ["basilica.jpg"]
files = [("request", open(img, "rb")) for img in path]

# send request over HTTP to /predict/from_files endpoint
url = "http://0.0.0.0:5543/predict/from_files"
resp = requests.post(url=url, files=files)

# response is returned in JSON
annotations = json.loads(resp.text)  # dictionary of annotation results
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

Link to this sectionCLI для аннотирования#

Ты также можешь использовать команду 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

Link to this sectionБенчмаркинг производительности#

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

Тесты производительности были проведены на инстансе AWS c6i.8xlarge (16 ядер).

Link to this sectionСравнение производительности при размере пакета 32#

Link to this sectionБазовая линия 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

Link to this sectionПроизводительность плотной модели в 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

# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
# Batch Size: 32
# Scenario: sync
# Throughput (items/sec): 69.5546

Link to this sectionПроизводительность разреженной модели в 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

# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
# Batch Size: 32
# Scenario: sync
# Throughput (items/sec): 241.2452

Link to this sectionСравнение производительности при размере пакета 1#

DeepSparse также способен получить ускорение по сравнению с ONNX Runtime для сценария с размером пакета 1, чувствительного к задержкам.

Link to this sectionБазовая линия 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

Link to this sectionПроизводительность разреженной модели в 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 с блоками по 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

# 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

Link to this sectionНачало работы с DeepSparse#

Исследования или тестирование? DeepSparse Community предоставляется бесплатно для исследований и тестирования. Начни работу с их документацией.

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

Контрибьюторы

Комментарии