Зелёная проверка
Ссылка копируется в буфер обмена

Разверни Ultralytics YOLOv5 с Neural Magic's DeepSparse для GPU- Производительность класса на процессорах

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

Хочешь ускорить обучение и внедрение своих YOLOv5 модели? Мы тебя обеспечим! Представляем тебе нашего нового партнера, Neural Magic. Поскольку Neural Magic предоставляет программные инструменты, в которых особое внимание уделяется пиковой производительности моделей и простоте рабочего процесса, вполне естественно, что мы собрались вместе, чтобы предложить решение, которое сделает процесс развертыванияYOLOv5 еще лучше.

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

YOLOv5 Сравнение производительности с DeepSparse

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

  1. Гибкость развертывания: Выполняй последовательную работу в облаке, центре обработки данных и на границе с любым поставщиком оборудования
  2. Бесконечная масштабируемость: Масштабируйся с помощью стандартного Kubernetes, вертикально до 100 тысяч ядер или полностью абстрагируйся с помощью serverless
  3. Простая интеграция: Используй чистые API для интеграции твоей модели в приложение и мониторинга ее в производстве

Достигни производительности GPU-Class на коммодити процессорах

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

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

DeepSparse и Ultralytics YOLOv5  Network

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

Создай разреженную версию YOLOv5 , обученную на пользовательских данных

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

За более подробной информацией обращайся к Neural Magic' YOLOv5 Documentation.

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

Установи DeepSparse

Выполни следующее, чтобы установить DeepSparse. Мы рекомендуем тебе использовать виртуальную среду с Python.

pip install deepsparse[server,yolo,onnxruntime]

Собери файл ONNX

DeepSparse принимает модель в формате ONNX , переданную либо как:

  • Локальный путь к модели ONNX
  • Заглушка SparseZoo, которая идентифицирует модель в SparseZoo

Мы сравним стандартные плотные YOLOv5 с обрезанно-квантованными YOLOv5, обозначенными следующими шлейфами 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

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

Создай пайплайн и запусти вывод:

from deepsparse import Pipeline

# список изображений в локальной файловой системе
images = ["basilica.jpg"]

# создать трубопровод
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo _pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)

# запускаем вывод на изображениях, получаем ограничительные рамки + классы
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-mesa-glx

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':

Импортируй запросы, json

# список изображений для вывода (локальные файлы на стороне клиента)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]

# отправь запрос по HTTP на конечную точку /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# ответ возвращается в JSON
annotations = json.loads(resp.text) # словарь результатов аннотаций
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 и сохранит в ней аннотированное изображение.

Аннотированный Basilica с YOLOv5

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

Используя скрипт бенчмарка DeepSparse, мы сравним пропускную способность DeepSparse с пропускной способностью ONNX Runtime на YOLOv5s.

Бенчмарки запускались на экземпляре 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

> Путь к исходной модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Размер партии: 32
> Сценарий: sync
> Пропускная способность (элементов/сек): 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

> Путь к исходной модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Размер партии: 32
> Сценарий: sync
> Пропускная способность (элементов/сек): 69.5546

Производительность DeepSparse Sparse

Когда к модели применяется разреженность, прирост производительности DeepSparse по сравнению с ONNX Runtime становится еще сильнее.

При партии 32 DeepSparse достигает 241 изображения/сек с обрезанным-квантованным YOLOv5 - это в5,8 раза лучше, чем ORT!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> Путь к исходной модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Размер партии: 32
> Сценарий: sync
> Пропускная способность (элементов/сек): 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

> Путь к исходной модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Размер партии: 1
> Сценарий: sync
> Пропускная способность (элементов/сек): 48.0921

Производительность DeepSparse Sparse

Когда к модели применяется разреженность, прирост производительности DeepSparse по сравнению с ONNX Runtime становится еще сильнее.

В партии 1 DeepSparse достигает 135 изображений/сек с обрезанным-квантованным YOLOv5s - это в2,8 раза лучше, чем ONNX Runtime!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> Путь к исходной модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Размер партии: 1
> Сценарий: sync
> Пропускная способность (элементов/сек): 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

> Путь к исходной модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Размер партии: 1
> Сценарий: sync
> Пропускная способность (элементов/сек): 179.7375

И вуаля! Ты готов оптимизировать свое развертывание YOLOv5 с помощью DeepSparse.

Начни работать с YOLOv5 и DeepSparse

Чтобы связаться с нами, присоединяйся к нашему сообществу и оставляй нам свои вопросы и комментарии. Ознакомься с репозиториемUltralytics YOLOv5 и полной документациейNeural Magic по развертыванию YOLOv5.

На сайте Ultralytics мы на коммерческой основе сотрудничаем с другими стартапами, которые помогают нам финансировать исследования и разработку наших потрясающих инструментов с открытым исходным кодом, таких как YOLOv5, чтобы они оставались бесплатными для всех. Эта статья может содержать партнерские ссылки на этих партнеров.

Логотип FacebookЛоготип ТвиттераЛоготип LinkedInСимвол копирования-ссылки

Читайте больше в этой категории

Давай вместе построим будущее
искусственного интеллекта!

Начни свое путешествие с будущим машинного обучения