Оптимизация инференса OpenVINO для YOLO
Введение
При развертывании моделей глубокого обучения, особенно для обнаружения объектов, таких как модели Ultralytics YOLO, достижение оптимальной производительности имеет решающее значение. В этом руководстве рассматривается использование инструментария Intel OpenVINO для оптимизации инференса с акцентом на задержку и пропускную способность. Независимо от того, работаете ли вы над потребительскими приложениями или крупномасштабными развертываниями, понимание и применение этих стратегий оптимизации обеспечит эффективную работу ваших моделей на различных устройствах.
Оптимизация для уменьшения задержки
Оптимизация задержки имеет жизненно важное значение для приложений, требующих немедленного ответа от одной модели, учитывая один вход, что типично для потребительских сценариев. Цель состоит в том, чтобы минимизировать задержку между входом и результатом вывода. Однако достижение низкой задержки требует тщательного рассмотрения, особенно при выполнении параллельных выводов или управлении несколькими моделями.
Ключевые стратегии оптимизации задержки:
- Одиночный вывод на устройство: Самый простой способ добиться низкой задержки — ограничить количество выводов до одного за раз на устройство. Дополнительная параллельность часто приводит к увеличению задержки.
- Использование под-устройств: Такие устройства, как многосокетные CPU или многочиповые GPU, могут выполнять несколько запросов с минимальным увеличением задержки, используя свои внутренние под-устройства.
- Советы по производительности OpenVINO: Использование OpenVINO
ov::hint::PerformanceMode::LATENCY
дляov::hint::performance_mode
свойство во время компиляции модели упрощает настройку производительности, предлагая аппаратно-независимый и перспективный подход.
Управление задержкой первого вывода:
- Кэширование моделей: Чтобы уменьшить время загрузки и компиляции моделей, влияющее на задержку, используйте кэширование моделей, где это возможно. Для сценариев, где кэширование нецелесообразно, CPU обычно обеспечивают самое быстрое время загрузки моделей.
- Сопоставление модели и чтение: Чтобы сократить время загрузки, OpenVINO заменил чтение модели сопоставлением. Однако, если модель находится на съемном или сетевом диске, рассмотрите возможность использования
ov::enable_mmap(false)
чтобы вернуться к чтению. - АВТОМАТИЧЕСКИЙ выбор устройства: Этот режим начинает вывод на CPU, переключаясь на ускоритель, как только он будет готов, плавно уменьшая задержку первого вывода.
Оптимизация для увеличения пропускной способности
Оптимизация пропускной способности имеет решающее значение для сценариев, обслуживающих многочисленные запросы на вывод одновременно, максимизируя использование ресурсов без значительного снижения производительности отдельных запросов.
Подходы к оптимизации пропускной способности:
-
Советы по производительности OpenVINO: Высокоуровневый, перспективный метод повышения пропускной способности на различных устройствах с использованием подсказок производительности.
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)
-
Явное разделение на пакеты и потоки: Более детальный подход, включающий явное разделение на пакеты и использование потоков для расширенной настройки производительности.
Проектирование приложений, ориентированных на пропускную способность:
Чтобы максимизировать пропускную способность, приложения должны:
- Обрабатывайте входные данные параллельно, используя все возможности устройства.
- Разложите поток данных на параллельные запросы на вывод, запланированные для параллельного выполнения.
- Используйте асинхронный API с обратными вызовами для поддержания эффективности и избежания нехватки ресурсов устройства.
Многопроцессорное исполнение:
Многопользовательский режим OpenVINO упрощает масштабирование пропускной способности, автоматически балансируя запросы на вывод между устройствами, не требуя управления устройствами на уровне приложения.
Увеличение производительности в реальных условиях
Внедрение оптимизаций OpenVINO с моделями Ultralytics YOLO может привести к значительному повышению производительности. Как продемонстрировано в бенчмарках, пользователи могут получить до 3 раз более высокую скорость вывода на CPU Intel, с еще большим ускорением, возможным во всем аппаратном спектре Intel, включая интегрированные GPU, дискретные GPU и VPU.
Например, при запуске моделей YOLOv8 на процессорах Intel Xeon версии, оптимизированные для OpenVINO, стабильно превосходят свои аналоги PyTorch с точки зрения времени инференса на изображение, не ставя под угрозу точность.
Практическая реализация
Чтобы экспортировать и оптимизировать вашу модель Ultralytics YOLO для OpenVINO, вы можете использовать функциональность export:
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precision
После экспорта вы можете запустить вывод с оптимизированной моделью:
# Load the OpenVINO model
ov_model = YOLO("yolov8n_openvino_model/")
# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)
Заключение
Оптимизация моделей Ultralytics YOLO для уменьшения задержки и увеличения пропускной способности с помощью OpenVINO может значительно повысить производительность вашего приложения. Тщательно применяя стратегии, изложенные в этом руководстве, разработчики могут обеспечить эффективную работу своих моделей, отвечающую требованиям различных сценариев развертывания. Помните, что выбор между оптимизацией для уменьшения задержки или увеличения пропускной способности зависит от конкретных потребностей вашего приложения и характеристик среды развертывания.
Для получения более подробной технической информации и последних обновлений обратитесь к документации OpenVINO и репозиторию Ultralytics YOLO. Эти ресурсы предоставляют подробные руководства, учебные пособия и поддержку сообщества, которые помогут вам максимально эффективно использовать ваши модели глубокого обучения.
Обеспечение оптимальной производительности ваших моделей заключается не только в настройке конфигураций; это понимание потребностей вашего приложения и принятие обоснованных решений. Независимо от того, оптимизируете ли вы ответы в реальном времени или максимизируете пропускную способность для крупномасштабной обработки, сочетание моделей Ultralytics YOLO и OpenVINO предлагает разработчикам мощный набор инструментов для развертывания высокопроизводительных решений ИИ.
Часто задаваемые вопросы
Как оптимизировать модели Ultralytics YOLO для низкой задержки с использованием OpenVINO?
Оптимизация моделей Ultralytics YOLO для низкой задержки включает в себя несколько ключевых стратегий:
- Одиночный вывод на устройство: Ограничьте количество выводов до одного за раз на устройство, чтобы минимизировать задержки.
- Использование под-устройств: Используйте такие устройства, как многосокетные CPU или многочиповые GPU, которые могут обрабатывать несколько запросов с минимальным увеличением задержки.
- Советы по производительности OpenVINO: Используйте OpenVINO
ov::hint::PerformanceMode::LATENCY
во время компиляции модели для упрощенной, аппаратно-независимой настройки.
Для получения дополнительных практических советов по оптимизации задержки ознакомьтесь с разделом Оптимизация задержки нашего руководства.
Почему мне следует использовать OpenVINO для оптимизации пропускной способности Ultralytics YOLO?
OpenVINO повышает пропускную способность модели Ultralytics YOLO, максимально используя ресурсы устройства без ущерба для производительности. Ключевые преимущества включают в себя:
- Советы по производительности: Простая, высокоуровневая настройка производительности на разных устройствах.
- Явное разделение на пакеты и потоки: Тонкая настройка для повышения производительности.
- Выполнение на нескольких устройствах: Автоматизированная балансировка нагрузки при выводе, упрощающая управление на уровне приложений.
Пример конфигурации:
import openvino.properties.hint as hints
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
Узнайте больше об оптимизации пропускной способности в разделе об оптимизации пропускной способности нашего подробного руководства.
Каковы лучшие практики для снижения задержки первого инференса в OpenVINO?
Чтобы уменьшить задержку первого вывода, рассмотрите следующие методы:
- Кэширование моделей: Используйте кэширование моделей для сокращения времени загрузки и компиляции.
- Сопоставление модели и чтение: Используйте отображение (
ov::enable_mmap(true)
) по умолчанию, но переключитесь на чтение (ov::enable_mmap(false)
) если модель находится на съемном или сетевом диске. - АВТОМАТИЧЕСКИЙ выбор устройства: Используйте АВТОМАТИЧЕСКИЙ режим, чтобы начать с вывода на CPU и плавно перейти к ускорителю.
Подробные стратегии управления задержкой первого вывода см. в разделе Управление задержкой первого вывода.
Как сбалансировать оптимизацию задержки и пропускной способности с помощью Ultralytics YOLO и OpenVINO?
Балансировка оптимизации задержки и пропускной способности требует понимания потребностей вашего приложения:
- Оптимизация задержки: Идеально подходит для приложений реального времени, требующих немедленного ответа (например, потребительские приложения).
- Оптимизация пропускной способности: Лучше всего подходит для сценариев с большим количеством параллельных выводов, максимизируя использование ресурсов (например, крупномасштабные развертывания).
Использование высокоуровневых подсказок производительности и многопользовательских режимов OpenVINO может помочь найти правильный баланс. Выберите соответствующие подсказки производительности OpenVINO в зависимости от ваших конкретных требований.
Могу ли я использовать модели Ultralytics YOLO с другими AI фреймворками, помимо OpenVINO?
Да, модели Ultralytics YOLO отличаются высокой универсальностью и могут быть интегрированы с различными AI-фреймворками. Возможные варианты включают:
- TensorRT: Для оптимизации под NVIDIA GPU, следуйте руководству по интеграции TensorRT.
- CoreML: Для устройств Apple обратитесь к нашим инструкциям по экспорту в CoreML.
- TensorFlow.js: Для веб-приложений и приложений Node.js см. руководство по преобразованию TF.js.
Узнайте больше об интеграциях на странице интеграций Ultralytics.