Оптимизация инференса YOLO с помощью OpenVINO#
Введение#
При развертывании моделей глубокого обучения, особенно моделей для обнаружения объектов, таких как модели Ultralytics YOLO, крайне важно добиться оптимальной производительности. В этом руководстве подробно рассматривается использование инструментария OpenVINO от Intel для оптимизации инференса с упором на задержку и пропускную способность. Независимо от того, работаешь ли ты над потребительскими приложениями или масштабными развертываниями, понимание этих стратегий оптимизации и их применение помогут эффективно запускать модели на различных устройствах.
Оптимизация задержки#
Оптимизация задержки важна для приложений, которым нужен немедленный ответ одной модели на один входной запрос, что типично для потребительских сценариев. Цель — свести к минимуму задержку между подачей входных данных и получением результата инференса. Однако для достижения низкой задержки требуется тщательно всё продумать, особенно при параллельном выполнении инференса или работе с несколькими моделями.
Основные стратегии оптимизации задержки#
- Один инференс на устройство: самый простой способ добиться низкой задержки — ограничить устройство одним инференсом за раз. Дополнительный параллелизм часто увеличивает задержку.
- Использование подустройств: устройства вроде CPU с несколькими сокетами или GPU с несколькими вычислительными блоками могут выполнять несколько запросов с минимальным увеличением задержки, задействуя внутренние подустройства.
- Подсказки производительности OpenVINO: использование
ov::LATENCYот OpenVINO для свойства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) -
Явная пакетная обработка и потоки: более детальная настройка производительности с использованием явной пакетной обработки и потоков.
Проектирование приложений с высокой пропускной способностью#
Чтобы максимально повысить пропускную способность, приложения должны:
- Обрабатывать входные данные параллельно, полностью используя возможности устройства.
- Разбивать поток данных на параллельные запросы на инференс, запланированные для одновременного выполнения.
- Использовать асинхронный API с обратными вызовами, чтобы поддерживать эффективность и не допускать простоя устройства.
Выполнение на нескольких устройствах#
Многопользовательский режим OpenVINO упрощает масштабирование пропускной способности: он автоматически распределяет запросы на инференс между устройствами, избавляя от необходимости управлять устройствами на уровне приложения.
Прирост производительности в реальных условиях#
Оптимизация OpenVINO для моделей Ultralytics YOLO может значительно повысить производительность. Как показывают сравнительные тесты, инференс на CPU Intel может выполняться до 3 раз быстрее, а на других устройствах Intel, включая встроенные GPU, дискретные GPU и NPU, ускорение может быть еще выше.
Например, при запуске моделей YOLO26 на CPU Intel Xeon версии, оптимизированные с помощью OpenVINO, неизменно превосходят аналоги на PyTorch по времени инференса на изображение без ущерба для точности.
Практическая реализация#
Чтобы экспортировать и оптимизировать модель Ultralytics YOLO для OpenVINO, воспользуйся функцией экспорта:
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n.pt")
# Экспортировать модель в формат OpenVINO
model.export(format="openvino", quantize=16) # Экспортировать с точностью FP16После экспорта можно запустить инференс с оптимизированной моделью:
# Загрузить модель OpenVINO
ov_model = YOLO("yolo26n_openvino_model/")
# Запустить инференс (Ultralytics компилирует модели OpenVINO с подсказкой производительности LATENCY)
results = ov_model("https://ultralytics.com/images/bus.jpg", verbose=True)Заключение#
Оптимизация моделей Ultralytics YOLO для снижения задержки и повышения пропускной способности с помощью OpenVINO может значительно улучшить производительность приложения. Тщательно применяя описанные в этом руководстве стратегии, разработчики могут обеспечить эффективную работу моделей в соответствии с требованиями различных сценариев развертывания. Помни: выбор между оптимизацией задержки и пропускной способности зависит от потребностей твоего приложения и характеристик среды развертывания.
Дополнительные технические сведения и актуальные обновления смотри в документации OpenVINO и репозитории Ultralytics YOLO. Там есть подробные руководства, учебные материалы и поддержка сообщества, которые помогут тебе максимально эффективно использовать модели глубокого обучения.
Для оптимальной производительности моделей недостаточно просто менять настройки — важно понимать потребности приложения и принимать обоснованные решения. Независимо от того, оптимизируешь ли ты отклик в реальном времени или максимизируешь пропускную способность при масштабной обработке, сочетание моделей Ultralytics YOLO и OpenVINO дает разработчикам мощный инструментарий для развертывания высокопроизводительных ИИ-решений.
Часто задаваемые вопросы#
Для оптимизации моделей Ultralytics YOLO и снижения задержки можно применить несколько ключевых стратегий:
- Один инференс на устройство: выполняй не более одного инференса за раз на каждом устройстве, чтобы свести задержки к минимуму.
- Использование подустройств: задействуй устройства вроде CPU с несколькими сокетами или GPU с несколькими вычислительными блоками, способные обрабатывать несколько запросов с минимальным увеличением задержки.
- Подсказки производительности OpenVINO: используй
ov::LATENCYот OpenVINO при компиляции модели для простой настройки, не зависящей от устройства.
Больше практических советов по оптимизации задержки смотри в разделе «Оптимизация задержки» нашего руководства.
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 универсальны и интегрируются с различными ИИ-фреймворками. Вот некоторые варианты:
- TensorRT: для оптимизации под GPU NVIDIA следуй руководству по интеграции TensorRT.
- CoreML: инструкции для устройств Apple смотри в нашем руководстве по экспорту в CoreML.
- LiteRT.js: для веб-приложений и приложений Node.js смотри руководство по интеграции LiteRT и веб-среду выполнения LiteRT.js.
Другие интеграции смотри на странице «Интеграции Ultralytics».