Оптимизация инференса OpenVINO для YOLO#
Введение#
При развертывании моделей deep learning, особенно для object detection, таких как модели Ultralytics YOLO, достижение оптимальной производительности имеет решающее значение. Это руководство посвящено использованию Intel's OpenVINO toolkit для оптимизации инференса с упором на задержку и пропускную способность. Работаешь ли ты над потребительскими приложениями или крупномасштабными развертываниями, понимание и применение этих стратегий оптимизации обеспечат эффективную работу твоих моделей на различных устройствах.
Оптимизация задержки#
Оптимизация задержки жизненно важна для приложений, требующих немедленного отклика от одной модели на один входной сигнал, что типично для потребительских сценариев. Цель состоит в том, чтобы минимизировать задержку между вводом и результатом инференса. Однако достижение низкой задержки требует тщательного планирования, особенно при выполнении параллельных инференсов или управлении несколькими моделями.
Ключевые стратегии оптимизации задержки:#
- Один инференс на устройство: Самый простой способ добиться низкой задержки — ограничиться одним инференсом за раз на каждое устройство. Дополнительная конкурентность часто приводит к увеличению задержки.
- Использование под-устройств: Устройства, такие как многопроцессорные CPU или GPU с несколькими тайлами, могут выполнять несколько запросов с минимальным увеличением задержки за счет использования своих внутренних под-устройств.
- OpenVINO Performance Hints: Использование
ov::LATENCYот OpenVINO для свойстваov::performance_modeво время компиляции модели упрощает настройку производительности, предлагая независимый от устройства и перспективный подход.
Управление задержкой первого инференса:#
- Кэширование моделей: Чтобы уменьшить влияние времени загрузки и компиляции модели на задержку, по возможности используй кэширование моделей. В сценариях, где кэширование невозможно, CPU обычно обеспечивают самое быстрое время загрузки модели.
- Model Mapping vs. Reading: Чтобы сократить время загрузки, OpenVINO заменил чтение модели на маппинг. Однако, если модель находится на съемном или сетевом диске, подумай об использовании
ov::enable_mmap(false), чтобы вернуться к чтению. - Выбор устройства AUTO: Этот режим начинает инференс на CPU, переключаясь на ускоритель, как только тот будет готов, что позволяет бесшовно сократить задержку первого инференса.
Оптимизация пропускной способности#
Оптимизация пропускной способности имеет решающее значение для сценариев, обслуживающих множество запросов на инференс одновременно, максимизируя resource utilization без существенного ущерба для производительности отдельных запросов.
Подходы к оптимизации пропускной способности:#
-
Подсказки производительности OpenVINO: Высокоуровневый, перспективный метод повышения пропускной способности на различных устройствах с использованием подсказок производительности.
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
Явное пакетирование и потоки: Более детальный подход, включающий явное пакетирование (batching) и использование потоков для расширенной настройки производительности.
Проектирование приложений с ориентацией на пропускную способность:#
Чтобы максимизировать пропускную способность, приложения должны:
- Обрабатывать входные данные параллельно, максимально используя возможности устройства.
- Разбивать поток данных на параллельные запросы инференса, запланированные для одновременного выполнения.
- Использовать Async API с обратными вызовами (callbacks) для поддержания эффективности и предотвращения простоя устройства.
Многоустройственное выполнение:#
Режим многоустройственного выполнения OpenVINO упрощает масштабирование пропускной способности, автоматически распределяя запросы инференса между устройствами без необходимости управления устройствами на уровне приложения.
Реальный прирост производительности#
Внедрение оптимизаций OpenVINO с моделями Ultralytics YOLO может дать значительный прирост производительности. Как показано в benchmarks, пользователи могут добиться ускорения инференса до 3 раз на CPU от Intel, а на всем спектре оборудования Intel, включая встроенные GPU, дискретные GPU и VPU, возможно еще большее ускорение.
Например, при запуске моделей YOLO26 на процессорах Intel Xeon версии, оптимизированные под OpenVINO, стабильно превосходят свои аналоги на PyTorch по времени инференса на одно изображение без ущерба для accuracy.
Практическая реализация#
Чтобы экспортировать и оптимизировать модель Ultralytics YOLO для OpenVINO, ты можешь использовать функционал export:
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 documentation и Ultralytics YOLO repository. Эти ресурсы предоставляют подробные руководства, учебные пособия и поддержку сообщества, которые помогут тебе извлечь максимум пользы из твоих моделей deep learning.
Обеспечение оптимальной производительности твоих моделей — это не просто настройка конфигураций; это понимание потребностей твоего приложения и принятие обоснованных решений. Оптимизируешь ли ты под real-time responses или максимизируешь пропускную способность для крупномасштабной обработки, комбинация моделей Ultralytics YOLO и OpenVINO предлагает разработчикам мощный инструментарий для развертывания высокопроизводительных решений ИИ.
FAQ#
Оптимизация моделей Ultralytics YOLO для низкой задержки включает несколько ключевых стратегий:
- Один инференс на устройство: Ограничь выполнение инференса одним запросом за раз на каждое устройство, чтобы свести задержки к минимуму.
- Использование под-устройств: Используй возможности таких устройств, как многопроцессорные CPU или GPU с несколькими тайлами, которые могут обрабатывать несколько запросов с минимальным увеличением задержки.
- OpenVINO Performance Hints: Используй
ov::LATENCYот OpenVINO во время компиляции модели для упрощенной настройки, не зависящей от устройства.
Больше практических советов по оптимизации задержки ты найдешь в Latency Optimization section нашего руководства.
OpenVINO повышает пропускную способность моделей Ultralytics YOLO за счет максимизации использования ресурсов устройства без ущерба для производительности. Ключевые преимущества включают:
- Подсказки производительности: Простая высокоуровневая настройка производительности для различных устройств.
- Явное пакетирование и потоки: Тонкая настройка для расширенной производительности.
- Многоустройственное выполнение: Автоматическая балансировка нагрузки инференса, упрощающая управление на уровне приложения.
Пример конфигурации:
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)Узнай больше об оптимизации пропускной способности в Throughput Optimization section нашего подробного руководства.
Чтобы сократить задержку первого инференса, рассмотри следующие практики:
- Кэширование моделей: Используй кэширование моделей, чтобы сократить время загрузки и компиляции.
- Model Mapping vs. Reading: Используй маппинг (
ov::enable_mmap(true)) по умолчанию, но переключайся на чтение (ov::enable_mmap(false)), если модель находится на съемном или сетевом диске. - Выбор устройства AUTO: Используй режим AUTO для начала инференса на CPU с бесшовным переходом на ускоритель.
Подробные стратегии управления задержкой первого инференса см. в разделе Managing First-Inference Latency section.
Балансировка задержки и пропускной способности требует понимания потребностей твоего приложения:
- Оптимизация задержки: Идеально для приложений реального времени, требующих немедленных ответов (например, потребительские приложения).
- Оптимизация пропускной способности: Лучше всего для сценариев с множеством параллельных инференсов, максимизируя использование ресурсов (например, масштабные развертывания).
Использование высокоуровневых подсказок производительности OpenVINO и многоустройственных режимов поможет найти правильный баланс. Выбирай подходящие OpenVINO performance hints в зависимости от твоих конкретных требований.
Да, модели Ultralytics YOLO очень универсальны и могут быть интегрированы с различными фреймворками ИИ. Доступные опции:
- TensorRT: Для оптимизации под GPU от NVIDIA следуй TensorRT integration guide.
- CoreML: Для устройств от Apple обратись к нашим CoreML export instructions.
- LiteRT.js: Для веб-приложений и приложений на Node.js см. LiteRT integration guide и веб-рантайм LiteRT.js web runtime.
Изучи другие интеграции на странице Ultralytics Integrations page.