Перейти к содержимому

Neural Magic'DeepSparse

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

Это руководство объясняет, как развернуть YOLOv5 с помощью Neural Magic's 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 на 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 и запускай умозаключение:

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

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



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (6)

Комментарии