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