Нажимая “Принять все файлы cookie”, вы соглашаетесь на сохранение файлов cookie на вашем устройстве с целью улучшения навигации по сайту, анализа использования сайта и помощи в наших маркетинговых усилиях. Подробнее
Настройки cookie
Нажимая “Принять все файлы cookie”, вы соглашаетесь на сохранение файлов cookie на вашем устройстве с целью улучшения навигации по сайту, анализа использования сайта и помощи в наших маркетинговых усилиях. Подробнее
Расширьте возможности обучения и развертывания моделей Ultralytics YOLOv5 с помощью DeepSparse от Neural Magic для производительности класса GPU на CPU. Добейтесь более быстрого и масштабируемого развертывания YOLOv5.
Хотите ускорить обучение и развертывание ваших моделей YOLOv5? Мы вам поможем! Представляем нашего нового партнера, Neural Magic. Поскольку Neural Magic предоставляет программные инструменты, которые делают упор на максимальную производительность модели и простоту рабочего процесса, вполне естественно, что мы объединились, чтобы предложить решение, которое сделает процесс развертывания YOLOv5 еще лучше.
DeepSparse — это среда выполнения логического вывода Neural Magic для ЦП, которая использует преимущества разреженности и арифметики низкой точности в нейронных сетях, чтобы обеспечить исключительную производительность на стандартном оборудовании. Например, по сравнению с базовым уровнем ONNX Runtime, DeepSparse предлагает ускорение в 5,8 раза для YOLOv5s, работающей на той же машине!
Впервые ваши задачи глубокого обучения могут соответствовать требованиям производительности в production-среде без сложности и затрат на аппаратные ускорители. Проще говоря, DeepSparse обеспечивает производительность GPU и простоту программного обеспечения:
Гибкие развертывания: Стабильная работа в облаке, центре обработки данных и на периферии с любым поставщиком оборудования
Бесконечная масштабируемость: Масштабирование с помощью стандартного Kubernetes, вертикально до сотен ядер или полностью абстрагировано с помощью serverless
Простая интеграция: Используйте чистые API для интеграции вашей модели в приложение и мониторинга ее в рабочей среде.
Достижение производительности уровня GPU на стандартных процессорах
DeepSparse использует разреженность модели для повышения производительности.
Разрежение посредством обрезки и квантования позволяет на порядки уменьшить размер и вычислительные ресурсы, необходимые для выполнения сети, сохраняя при этом высокую точность. DeepSparse учитывает разреженность, пропуская умножение-сложение на ноль и сокращая объем вычислений при прямом проходе. Поскольку разреженные вычисления ограничены памятью, DeepSparse выполняет сеть послойно, разбивая задачу на тензорные столбцы, которые представляют собой вертикальные полосы вычислений, помещающиеся в кэш.
Разреженные сети со сжатыми вычислениями, выполняемые послойно в кэше, позволяют DeepSparse обеспечивать производительность уровня GPU на CPU!
Создайте разреженную версию YOLOv5, обученную на пользовательских данных
Репозиторий моделей с открытым исходным кодом Neural Magic, SparseZoo, содержит предварительно разреженные контрольные точки каждой модели YOLOv5. Используя SparseML, который интегрирован с Ultralytics, вы можете точно настроить разреженную контрольную точку на своих данных с помощью одной команды CLI.
Развертывание YOLOv5 с DeepSparse
Установите DeepSparse
Выполните следующие действия, чтобы установить DeepSparse. Мы рекомендуем использовать виртуальную среду с Python.
pip install deepsparse[server,yolo,onnxruntime]
Сбор ONNX-файла
DeepSparse принимает модель в формате ONNX, переданную как:
Локальный путь к модели ONNX
Заглушка SparseZoo, идентифицирующая модель в SparseZoo
Мы сравним стандартную плотную YOLOv5s с обрезанной и квантованной YOLOv5s, идентифицированной по следующим заглушкам SparseZoo:
DeepSparse предлагает удобные API для интеграции вашей модели в приложение.
Чтобы попробовать примеры развертывания, приведенные ниже, загрузите образец изображения для примера и сохраните его как basilica.jpg с помощью следующей команды:
Конвейеры оборачивают предварительную обработку и постобработку вокруг среды выполнения, предоставляя понятный интерфейс для добавления DeepSparse в приложение. Интеграция DeepSparse-Ultralytics включает готовый конвейер, который принимает необработанные изображения и выводит ограничивающие рамки.
Создайте конвейер и запустите вывод:
from deepsparse import Pipeline
# список изображений в локальной файловой системе images = ["basilica.jpg"]
# запустить инференс на изображениях, получить ограничивающие рамки + классы 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. Сервер поддерживает любой конвейер (Pipeline) из DeepSparse, включая обнаружение объектов с помощью YOLOv5, что позволяет отправлять необработанные изображения в конечную точку и получать ограничивающие рамки.
Запустите сервер с обрезанной и квантованной YOLOv5s:
Пример запроса с использованием пакета requests для Python:
import requests, json
# список изображений для инференса (локальные файлы на стороне клиента) path = ['basilica.jpg'] files = [('request', open(img, 'rb')) for img in path]
# отправить запрос по HTTP на endpoint /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"]
Annotate CLI
Вы также можете использовать команду annotate, чтобы движок сохранил аннотированное фото на диск. Попробуйте --source 0, чтобы аннотировать видеопоток с веб-камеры в реальном времени!
> Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none > Размер пакета: 32 > Сценарий: sync > Пропускная способность (элементов/сек): 41.9025
Высокая производительность DeepSparse
Хотя DeepSparse демонстрирует наилучшую производительность с оптимизированными разреженными моделями, он также хорошо работает со стандартной плотной YOLOv5s.
При размере пакета 32 DeepSparse достигает 70 изображений/сек со стандартной плотной YOLOv5s — увеличение производительности в 1,7 раза по сравнению с ORT!
> Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none > Размер пакета: 32 > Сценарий: sync > Пропускная способность (элементов/сек): 69.5546
DeepSparse: производительность при разреженности
Когда к модели применяется разреженность, прирост производительности DeepSparse по сравнению с ONNX Runtime становится еще более значительным.
При размере пакета 32 DeepSparse достигает 241 изображений/сек с обрезанной и квантованной YOLOv5s — увеличение производительности в 5,8 раза по сравнению с ORT!
> Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none > Размер пакета: 32 > Сценарий: sync > Пропускная способность (элементов/сек): 241.2452
Сравнение производительности при размере пакета 1
DeepSparse также способен получить прирост скорости по сравнению с ONNX Runtime для сценария с малой задержкой и пакетом 1.
Базовая среда выполнения ONNX
При размере пакета 1 ONNX Runtime достигает 48 изображений/сек со стандартной, плотной YOLOv5s.
> Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none > Размер пакета: 1 > Сценарий: sync > Пропускная способность (элементов/сек): 48.0921
DeepSparse: производительность при разреженности
Когда к модели применяется разреженность, прирост производительности DeepSparse по сравнению с ONNX Runtime становится еще более значительным.
При размере пакета 1 DeepSparse достигает 135 изображений/сек с обрезанной и квантованной YOLOv5s — увеличение производительности в 2,8 раза по сравнению с ONNX Runtime!
> Исходный путь к модели: 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!
> Исходный путь к модели: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni > Размер пакета: 1 > Сценарий: sync > Пропускная способность (элементов/сек): 179.7375
В Ultralytics мы коммерчески сотрудничаем с другими стартапами, чтобы помочь нам финансировать исследования и разработки наших замечательных инструментов с открытым исходным кодом, таких как YOLOv5, чтобы они оставались бесплатными для всех. Эта статья может содержать партнерские ссылки на этих партнеров.