Ultralytics YOLO27:

Оптимизация инференса YOLO в OpenVINO#

OpenVINO Ecosystem

Введение#

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

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

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

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

  • Один инференс на устройство: Самый простой способ добиться низкой задержки — ограничить выполнение одним инференсом за раз на каждом устройстве. Дополнительный параллелизм часто приводит к увеличению задержки.
  • Использование подустройств: Такие устройства, как многосокетные CPU или многочиплетные GPU, могут выполнять несколько запросов с минимальным увеличением задержки, используя свои внутренние подустройства.
  • Подсказки производительности OpenVINO: Использование ov::LATENCY для свойства 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. Явная пакетная обработка и потоки: Более детализированный подход, включающий явную пакетную обработку и использование потоков для расширенной настройки производительности.

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

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

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

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

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

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

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

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

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

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

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

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

    Больше интеграций ищи на странице интеграций Ultralytics.

Комментарии