Перейти к содержанию

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

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

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

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

Улучшение скорости YOLOv5

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

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

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

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

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

Удаление моделей YOLO

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

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

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

Ознакомьтесь с документацией Neural Magic по 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

Python API

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

Создайте Pipeline и запустите inference:

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)

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

apt-get install libgl1

HTTP-сервер

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

Запустите сервер с обрезанной и квантованной YOLOv5s:

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

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

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"]

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 папку и сохраните аннотированное изображение внутри.

аннотированный

Оценка производительности

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

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

DeepSparse также способен получить прирост скорости по сравнению с ONNX Runtime для чувствительного к задержкам сценария с batch 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 объектов/сек с 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

# 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 бесплатен для исследований и тестирования. Начните с их Документации.

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



📅 Создано 1 год назад ✏️ Обновлено 2 месяца назад

Комментарии