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

OpenVINO Ecosystem

Введение

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

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

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

Ключевые стратегии оптимизации задержки:

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

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

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

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

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

Подходы к оптимизации пропускной способности:

  1. Подсказки производительности OpenVINO: Высокоуровневый и перспективный метод для повышения пропускной способности на разных устройствах с использованием подсказок производительности.

    import openvino.properties.hint as hints
    
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)
  2. Явное пакетирование и потоки: Более детальный подход, включающий явное пакетирование (batching) и использование потоков для глубокой настройки производительности.

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

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

  • Параллельно обрабатывать входные данные, максимально используя возможности устройства.
  • Разбивать поток данных на параллельные запросы инференса, запланированные для параллельного выполнения.
  • Использовать Async API с колбэками для поддержания эффективности и предотвращения простоя устройства.

Выполнение на нескольких устройствах:

Мульти-девайс режим OpenVINO упрощает масштабирование пропускной способности, автоматически распределяя запросы инференса между устройствами без необходимости управления устройствами на уровне приложения.

Реальные показатели производительности

Внедрение оптимизаций OpenVINO с моделями Ultralytics YOLO может дать значительный прирост производительности. Как показано в бенчмарках, пользователи могут получить до 3 раз более высокую скорость инференса на CPU Intel, с еще большими ускорениями, возможными для всего спектра оборудования Intel, включая интегрированные GPU, дискретные GPU и VPU.

Например, при запуске моделей YOLOv8 на процессорах Intel Xeon версии, оптимизированные для OpenVINO, неизменно превосходят свои аналоги PyTorch по времени инференса на изображение без ущерба для точности.

Практическая реализация

Чтобы экспортировать и оптимизировать твою модель 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", half=True)  # Export with FP16 precision

После экспорта ты можешь запустить инференс с оптимизированной моделью:

# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")

# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)

Заключение

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

Для получения более подробной технической информации и последних обновлений обращайся к документации OpenVINO и репозиторию Ultralytics YOLO. Эти ресурсы содержат подробные руководства, учебные пособия и поддержку сообщества, которые помогут тебе получить максимум от твоих моделей глубокого обучения.


Обеспечение оптимальной производительности моделей — это не просто настройка конфигураций; это понимание потребностей твоего приложения и принятие обоснованных решений. Оптимизируешь ли ты систему для ответов в реальном времени или максимизируешь пропускную способность для масштабной обработки, комбинация моделей Ultralytics YOLO и OpenVINO предлагает разработчикам мощный инструментарий для развертывания высокопроизводительных AI-решений.

Часто задаваемые вопросы (FAQ)

Как мне оптимизировать модели Ultralytics YOLO для низкой задержки с помощью OpenVINO?

Оптимизация моделей Ultralytics YOLO для низкой задержки включает несколько ключевых стратегий:

  1. Один инференс на устройство: Ограничь инференсы одним за раз для каждого устройства, чтобы минимизировать задержки.
  2. Использование под-устройств: Задействуй устройства, такие как многопроцессорные CPU или многочиповые GPU, которые могут обрабатывать несколько запросов с минимальным ростом задержки.
  3. Подсказки производительности OpenVINO: Используй ov::LATENCY в OpenVINO при компиляции модели для упрощенной, универсальной настройки.

Для получения практических советов по оптимизации задержки ознакомься с разделом Оптимизация задержки нашего руководства.

Почему мне стоит использовать OpenVINO для оптимизации пропускной способности Ultralytics YOLO?

OpenVINO повышает пропускную способность моделей Ultralytics YOLO, максимизируя использование ресурсов устройства без снижения производительности. Ключевые преимущества включают:

  • Подсказки производительности: Простая высокоуровневая настройка производительности для разных устройств.
  • Явное пакетирование и потоки: Тонкая настройка для продвинутой производительности.
  • Выполнение на нескольких устройствах: Автоматическая балансировка нагрузки инференса, упрощающая управление на уровне приложения.

Пример конфигурации:

import openvino.properties.hint as hints

config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)

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

Какова лучшая практика для снижения задержки первого инференса в OpenVINO?

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

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

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

Как сбалансировать оптимизацию задержки и пропускной способности для Ultralytics YOLO и OpenVINO?

Балансировка оптимизации задержки и пропускной способности требует понимания потребностей твоего приложения:

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

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

Могу ли я использовать модели Ultralytics YOLO с другими AI-фреймворками, кроме OpenVINO?

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

Изучи другие интеграции на странице интеграций Ultralytics.

Комментарии