Оптимизация инференса YOLO в OpenVINO#
Введение#
При развёртывании моделей глубокого обучения, особенно моделей для обнаружения объектов, таких как модели Ultralytics YOLO, крайне важно добиться оптимальной производительности. В этом руководстве рассматривается использование инструментария OpenVINO от Intel для оптимизации инференса с фокусом на задержке и пропускной способности. Независимо от того, работаешь ли ты над приложениями потребительского уровня или крупномасштабными развёртываниями, понимание этих стратегий оптимизации и их применение поможет обеспечить эффективную работу моделей на различных устройствах.
Оптимизация задержки#
Оптимизация задержки крайне важна для приложений, которым требуется немедленный ответ одной модели на один входной сигнал, что типично для потребительских сценариев. Цель состоит в минимизации задержки между входным сигналом и результатом инференса. Однако достижение низкой задержки требует тщательного подхода, особенно при одновременном выполнении инференса или работе с несколькими моделями.
Основные стратегии оптимизации задержки#
- Один инференс на устройство: Самый простой способ добиться низкой задержки — ограничить выполнение одним инференсом за раз на каждом устройстве. Дополнительный параллелизм часто приводит к увеличению задержки.
- Использование подустройств: Такие устройства, как многосокетные CPU или многочиплетные GPU, могут выполнять несколько запросов с минимальным увеличением задержки, используя свои внутренние подустройства.
- Подсказки производительности OpenVINO: Использование
ov::LATENCYдля свойстваov::performance_modeво время компиляции модели упрощает настройку производительности и обеспечивает независимый от устройства и рассчитанный на будущее подход.
Управление задержкой первого вывода#
- Кэширование модели: Чтобы снизить влияние загрузки и компиляции модели на задержку, по возможности используй кэширование модели. Если кэширование невозможно, CPU обычно обеспечивает самое быстрое время загрузки модели.
- Отображение модели и чтение: Чтобы сократить время загрузки, OpenVINO заменил чтение модели её отображением в память. Однако если модель находится на съёмном или сетевом диске, используй
ov::enable_mmap(false), чтобы вернуться к чтению. - Выбор устройства AUTO: Этот режим начинает инференс на CPU, а после готовности переключается на ускоритель, плавно сокращая задержку первого инференса.
Оптимизация пропускной способности#
Оптимизация пропускной способности крайне важна для сценариев, в которых одновременно обрабатывается множество запросов на инференс, что позволяет максимально использовать ресурсы без существенного ухудшения производительности отдельных запросов.
Подходы к оптимизации пропускной способности#
-
Подсказки производительности OpenVINO: Высокоуровневый рассчитанный на будущее метод повышения пропускной способности на разных устройствах с помощью подсказок производительности.
import openvino as ov import openvino.properties.hint as hints core = ov.Core() model = core.read_model("yolo26n_openvino_model/yolo26n.xml") config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
Явная пакетная обработка и потоки: Более детализированный подход, включающий явную пакетную обработку и использование потоков для расширенной настройки производительности.
Проектирование приложений с ориентацией на пропускную способность#
Чтобы максимизировать пропускную способность, приложения должны:
- Обрабатывать входные данные параллельно, полностью используя возможности устройства.
- Разделять поток данных на параллельные запросы инференса, запланированные для одновременного выполнения.
- Использовать Async API с callback-функциями для поддержания эффективности и предотвращения простоя устройства.
Многоустройственное выполнение#
Режим работы OpenVINO на нескольких устройствах упрощает масштабирование пропускной способности, автоматически распределяя запросы на инференс между устройствами без необходимости управлять устройствами на уровне приложения.
Практический прирост производительности#
Реализация оптимизаций OpenVINO с моделями Ultralytics YOLO может обеспечить значительное повышение производительности. Как показано в benchmarks, пользователи могут добиться увеличения скорости вывода до 3 раз на процессорах Intel, а на всем спектре оборудования Intel, включая встроенные графические процессоры, дискретные графические процессоры и NPU, возможно еще большее ускорение.
Например, при запуске моделей YOLO26 на CPU Intel Xeon оптимизированные с помощью OpenVINO версии стабильно превосходят свои аналоги на PyTorch по времени инференса одного изображения, не снижая при этом точность.
Практическая реализация#
Чтобы экспортировать и оптимизировать модель Ultralytics YOLO для OpenVINO, ты можешь использовать функцию экспорта:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", quantize=16) # Export with FP16 precisionПосле экспорта ты можешь запустить инференс с оптимизированной моделью:
# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")
# Run inference (Ultralytics auto-selects OpenVINO LATENCY mode for batch=1)
results = ov_model("https://ultralytics.com/images/bus.jpg", verbose=True)Заключение#
Оптимизация моделей Ultralytics YOLO для задержки и пропускной способности с помощью OpenVINO может значительно повысить производительность твоего приложения. Тщательно применяя описанные в этом руководстве стратегии, разработчики могут обеспечить эффективную работу моделей и удовлетворить требования различных сценариев развёртывания. Помни: выбор между оптимизацией задержки и пропускной способности зависит от конкретных потребностей приложения и характеристик среды развёртывания.
Более подробную техническую информацию и последние обновления смотри в документации OpenVINO и репозитории Ultralytics YOLO. Эти ресурсы содержат подробные руководства, учебные материалы и поддержку сообщества, которые помогут тебе получить максимум от моделей глубокого обучения.
Обеспечение оптимальной производительности моделей — это не просто настройка конфигураций; важно понимать потребности приложения и принимать обоснованные решения. Оптимизируешь ли ты ответы в реальном времени или максимизируешь пропускную способность при крупномасштабной обработке, сочетание моделей Ultralytics YOLO и OpenVINO предоставляет разработчикам мощный набор инструментов для развёртывания высокопроизводительных решений на базе AI.
Часто задаваемые вопросы#
Оптимизация моделей Ultralytics YOLO для низкой задержки включает несколько ключевых стратегий:
- Один инференс на устройство: Ограничь выполнение одним инференсом за раз на каждом устройстве, чтобы минимизировать задержки.
- Использование подустройств: Используй такие устройства, как многосокетные CPU или многочиплетные GPU, которые могут обрабатывать несколько запросов с минимальным увеличением задержки.
- Подсказки производительности OpenVINO: Используй
ov::LATENCYво время компиляции модели для упрощённой настройки, независимой от устройства.
Больше практических советов по оптимизации задержки ты найдёшь в разделе «Оптимизация задержки» нашего руководства.
OpenVINO повышает пропускную способность моделей Ultralytics YOLO, максимально используя ресурсы устройства без снижения производительности. Ключевые преимущества:
- Подсказки производительности: Простая высокоуровневая настройка производительности на разных устройствах.
- Явная пакетная обработка и потоки: Точная настройка для расширенной оптимизации производительности.
- Выполнение на нескольких устройствах: Автоматическая балансировка нагрузки инференса, упрощающая управление на уровне приложения.
Пример конфигурации:
import openvino as ov import openvino.properties.hint as hints core = ov.Core() model = core.read_model("yolo26n_openvino_model/yolo26n.xml") config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)Подробнее об оптимизации пропускной способности смотри в разделе «Оптимизация пропускной способности» подробного руководства.
Чтобы снизить задержку первого инференса, обрати внимание на следующие рекомендации:
- Кэширование модели: Используй кэширование модели, чтобы сократить время загрузки и компиляции.
- Отображение модели и чтение: По умолчанию используй отображение (
ov::enable_mmap(true)), но переключайся на чтение (ov::enable_mmap(false)), если модель находится на съёмном или сетевом диске. - Выбор устройства AUTO: Используй режим AUTO, чтобы начать инференс на CPU и плавно перейти на ускоритель.
Подробные стратегии управления задержкой первого инференса смотри в разделе «Управление задержкой первого инференса».
Чтобы сбалансировать оптимизацию задержки и пропускной способности, необходимо понимать потребности приложения:
- Оптимизация задержки: Идеальна для приложений реального времени, которым требуются немедленные ответы (например, приложений потребительского уровня).
- Оптимизация пропускной способности: Лучше всего подходит для сценариев с множеством одновременных инференсов, где важно максимально использовать ресурсы (например, для крупномасштабных развёртываний).
Высокоуровневые подсказки производительности и режимы работы на нескольких устройствах в OpenVINO помогут найти правильный баланс. Выбирай подходящие подсказки производительности OpenVINO с учётом своих требований.
Да, модели Ultralytics YOLO отличаются высокой универсальностью и могут интегрироваться с различными фреймворками AI. Доступны следующие варианты:
- TensorRT: Для оптимизации на GPU NVIDIA следуй руководству по интеграции TensorRT.
- CoreML: Для устройств Apple смотри наши инструкции по экспорту в CoreML.
- LiteRT.js: Для веб-приложений и приложений Node.js смотри руководство по интеграции LiteRT и веб-среду выполнения LiteRT.js.
Больше интеграций ищи на странице интеграций Ultralytics.