Neural Magic'DeepSparse
Добро пожаловать в программный ИИ.
В этом руководстве рассказывается о том, как развернуть YOLOv5 с помощью Neural Magic'DeepSparse.
DeepSparse - это среда выполнения выводов с исключительной производительностью на центральных процессорах. Например, по сравнению с базовой версией ONNX Runtime, DeepSparse обеспечивает 5,8-кратное ускорение для YOLOv5s, работая на одной и той же машине!
Впервые ваши рабочие нагрузки глубокого обучения могут соответствовать требованиям производительности в производстве без сложностей и затрат на аппаратные ускорители. Проще говоря, DeepSparse обеспечивает производительность GPU и простоту программного обеспечения:
- Гибкость развертывания: Последовательная работа в облаке, центре обработки данных и на границе с любым поставщиком оборудования - от Intel до AMD и ARM.
- Бесконечная масштабируемость: Масштабируйте вертикально до 100 тысяч ядер, используя стандартный Kubernetes или полностью абстрагируясь от Serverless.
- Простая интеграция: Чистые API для интеграции вашей модели в приложение и ее мониторинга в производстве
Как DeepSparse достигает производительности GPU- класса?
DeepSparse использует преимущества разреженности модели для ускорения работы.
Расщепление путем обрезки и квантования - широко изученная техника, позволяющая на порядок сократить размер и вычисления, необходимые для выполнения сети, при сохранении высокой точности. DeepSparse ориентирован на разреженность, то есть он пропускает обнуленные параметры, сокращая объем вычислений в прямом проходе. Поскольку разреженные вычисления теперь ограничены памятью, DeepSparse выполняет сеть по глубине, разбивая задачу на Tensor Columns, вертикальные полосы вычислений, которые помещаются в кэш.
Разреженные сети со сжатыми вычислениями, выполняемыми в глубину в кэше, позволяют DeepSparse обеспечить производительность GPU- класса на центральных процессорах!
Как создать разреженную версию YOLOv5 , обученную на моих данных?
Neural MagicРепозиторий моделей с открытым исходным кодом SparseZoo содержит предварительно спарсированные контрольные точки каждой модели YOLOv5 . Используя SparseML, интегрированный с Ultralytics, вы можете точно настроить разреженную контрольную точку на ваши данные с помощью одной команды CLI .
Ознакомьтесь с документацией Neural Magic' YOLOv5 для получения более подробной информации.
Использование DeepSparse
Мы рассмотрим пример бенчмарка и развертывания разреженной версии YOLOv5s с помощью DeepSparse.
Установите DeepSparse
Выполните следующие действия, чтобы установить DeepSparse. Мы рекомендуем использовать виртуальную среду с Python.
Соберите файл 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 устанавливает его:
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 является бесплатным для исследований и тестирования. Начните с нашей документации.