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

Neural Magic'DeepSparse

Добро пожаловать в программный ИИ.

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

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

YOLOv5 повышение скорости

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

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

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

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

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

YOLO обрезка модели

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

Как создать разреженную версию 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 и запустить вывод:

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

Аннотация 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 ядер).

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

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

При партии 32 на сайте ONNX Runtime достигается скорость 42 изображения/с при использовании стандартных плотных YOLOv5:

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 Dense

Хотя DeepSparse демонстрирует наилучшую производительность при использовании оптимизированных разреженных моделей, он также хорошо работает со стандартными плотными моделями YOLOv5.

При партии 32 DeepSparse достигает 70 изображений/с со стандартными плотными YOLOv5, что в 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 Sparse

Когда к модели применяется разреженность, прирост производительности 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 для сценария с чувствительной к задержкам партией 1.

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

В партии 1 ONNX Runtime достигает 48 изображений/с со стандартными плотными YOLOv5.

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 Sparse

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

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

Комментарии