Ultralytics YOLO27:
Get Started

Оптимизация инференса YOLO с помощью OpenVINO#

OpenVINO Ecosystem

Введение#

При развертывании моделей глубокого обучения, особенно моделей для обнаружения объектов, таких как модели Ultralytics YOLO, крайне важно добиться оптимальной производительности. В этом руководстве подробно рассматривается использование инструментария OpenVINO от Intel для оптимизации инференса с упором на задержку и пропускную способность. Независимо от того, работаешь ли ты над потребительскими приложениями или масштабными развертываниями, понимание этих стратегий оптимизации и их применение помогут эффективно запускать модели на различных устройствах.

Оптимизация задержки#

Оптимизация задержки важна для приложений, которым нужен немедленный ответ одной модели на один входной запрос, что типично для потребительских сценариев. Цель — свести к минимуму задержку между подачей входных данных и получением результата инференса. Однако для достижения низкой задержки требуется тщательно всё продумать, особенно при параллельном выполнении инференса или работе с несколькими моделями.

Основные стратегии оптимизации задержки#

  • Один инференс на устройство: самый простой способ добиться низкой задержки — ограничить устройство одним инференсом за раз. Дополнительный параллелизм часто увеличивает задержку.
  • Использование подустройств: устройства вроде CPU с несколькими сокетами или GPU с несколькими вычислительными блоками могут выполнять несколько запросов с минимальным увеличением задержки, задействуя внутренние подустройства.
  • Подсказки производительности OpenVINO: использование ov::LATENCY от OpenVINO для свойства ov::performance_mode при компиляции модели упрощает настройку производительности и обеспечивает независимый от устройства и актуальный в будущем подход.

Управление задержкой при первом инференсе#

  • Кэширование моделей: чтобы уменьшить влияние загрузки и компиляции модели на задержку, по возможности используй кэширование моделей. Если кэширование невозможно, CPU обычно обеспечивают самую быструю загрузку моделей.
  • Сопоставление модели с памятью и чтение: чтобы сократить время загрузки, OpenVINO заменил чтение модели сопоставлением с памятью. Однако если модель находится на съемном или сетевом диске, используй ov::enable_mmap(false), чтобы вернуться к чтению.
  • Выбор устройства AUTO: инференс начинается на CPU и после готовности ускорителя переключается на него, что позволяет плавно уменьшить задержку при первом инференсе.

Оптимизация пропускной способности#

Оптимизация пропускной способности важна в сценариях одновременного обслуживания множества запросов на инференс: она позволяет максимально повысить использование ресурсов, не снижая значительно производительность отдельных запросов.

Способы оптимизации пропускной способности#

  1. Подсказки производительности 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)
  2. Явная пакетная обработка и потоки: более детальная настройка производительности с использованием явной пакетной обработки и потоков.

Проектирование приложений с высокой пропускной способностью#

Чтобы максимально повысить пропускную способность, приложения должны:

  • Обрабатывать входные данные параллельно, полностью используя возможности устройства.
  • Разбивать поток данных на параллельные запросы на инференс, запланированные для одновременного выполнения.
  • Использовать асинхронный 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 и снижения задержки можно применить несколько ключевых стратегий:

    1. Один инференс на устройство: выполняй не более одного инференса за раз на каждом устройстве, чтобы свести задержки к минимуму.
    2. Использование подустройств: задействуй устройства вроде CPU с несколькими сокетами или GPU с несколькими вычислительными блоками, способные обрабатывать несколько запросов с минимальным увеличением задержки.
    3. Подсказки производительности 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)

    Подробнее об оптимизации пропускной способности читай в разделе «Оптимизация пропускной способности» нашего подробного руководства.

  • Чтобы снизить задержку при первом инференсе, воспользуйся следующими рекомендациями:

    1. Кэширование моделей: используй кэширование моделей, чтобы сократить время загрузки и компиляции.
    2. Сопоставление модели с памятью и чтение: по умолчанию используй сопоставление с памятью (ov::enable_mmap(true)), но переключайся на чтение (ov::enable_mmap(false)), если модель находится на съемном или сетевом диске.
    3. Выбор устройства AUTO: используй режим AUTO, чтобы начать инференс на CPU и плавно переключиться на ускоритель.

    Подробные стратегии управления задержкой при первом инференсе смотри в разделе «Управление задержкой при первом инференсе».

  • Чтобы сбалансировать оптимизацию задержки и пропускной способности, нужно учитывать потребности приложения:

    • Оптимизация задержки: подходит для приложений, которым нужен немедленный отклик в реальном времени (например, потребительских приложений).
    • Оптимизация пропускной способности: подходит для сценариев с большим количеством одновременных инференсов, где важно максимально использовать ресурсы (например, для масштабных развертываний).

    Высокоуровневые подсказки производительности OpenVINO и режимы работы с несколькими устройствами помогут найти нужный баланс. Выбирай подходящие подсказки производительности OpenVINO с учетом своих требований.

  • Да, модели Ultralytics YOLO универсальны и интегрируются с различными ИИ-фреймворками. Вот некоторые варианты:

    Другие интеграции смотри на странице «Интеграции Ultralytics».

Комментарии