Перейти к содержимому

Оптимизация OpenVINO выводов для Ultralytics YOLO моделей: Исчерпывающее руководство

OpenVINO Экосистема

Введение

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

Оптимизация под латентность

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

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

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

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

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

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

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

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

  1. OpenVINO Подсказки производительности: Высокоуровневый, перспективный метод повышения пропускной способности разных устройств с помощью подсказок производительности.
import openvino.properties as props
import openvino.properties.hint as hints

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

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

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

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

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

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

Заключение

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

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


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



Создано 2024-03-17, Обновлено 2024-03-17
Авторы: glenn-jocher (1)

Комментарии