Оптимизация OpenVINO выводов для Ultralytics YOLO моделей: Исчерпывающее руководство
Введение
При развертывании моделей глубокого обучения, особенно моделей для обнаружения объектов, таких как модели Ultralytics YOLO , достижение оптимальной производительности имеет решающее значение. В этом руководстве рассматривается использование инструментарияIntel OpenVINO для оптимизации выводов с акцентом на задержку и пропускную способность. Независимо от того, работаете ли вы над приложениями потребительского класса или крупномасштабными развертываниями, понимание и применение этих стратегий оптимизации обеспечит эффективную работу ваших моделей на различных устройствах.
Оптимизация под задержку
Оптимизация задержки жизненно важна для приложений, требующих немедленного ответа от одной модели при одном вводе данных, что типично для потребительских сценариев. Задача состоит в том, чтобы минимизировать задержку между вводом и результатом вывода. Однако достижение низкой задержки требует тщательного рассмотрения, особенно при одновременном выполнении выводов или управлении несколькими моделями.
Ключевые стратегии оптимизации задержек:
- Один вывод на устройство: Самый простой способ добиться низкой задержки - ограничиться одним выводом на устройство. Дополнительный параллелизм часто приводит к увеличению задержки.
- Использование субустройств: Такие устройства, как многосокетные CPU или многотиражные GPU, могут выполнять несколько запросов с минимальным увеличением задержки за счет использования своих внутренних субустройств.
- OpenVINO Подсказки по производительности: Используя OpenVINO's
ov::hint::PerformanceMode::LATENCY
дляov::hint::performance_mode
свойство во время компиляции модели упрощает настройку производительности, предлагая подход, не зависящий от устройства и перспективный.
Управление задержкой первого вывода:
- Кэширование моделей: чтобы сократить время загрузки и компиляции моделей, влияющее на латентность, используйте кэширование моделей, где это возможно. В сценариях, где кэширование невозможно, процессоры обычно обеспечивают самое быстрое время загрузки модели.
- Сопоставление моделей и чтение: Чтобы сократить время загрузки, на сайте OpenVINO чтение модели заменено отображением. Однако если модель находится на съемном или сетевом диске, следует использовать
ov::enable_mmap(false)
чтобы вернуться к чтению. - Автоматический выбор устройства: В этом режиме вычисления начинаются на устройстве CPU, а по мере готовности переходят на ускоритель, что позволяет плавно сократить задержку при первом вычислении.
Оптимизация пропускной способности
Оптимизация пропускной способности имеет решающее значение для сценариев, обслуживающих множество запросов на вывод одновременно, максимизируя использование ресурсов без существенного снижения производительности отдельных запросов.
Подходы к оптимизации пропускной способности:
-
OpenVINO Подсказки производительности: Высокоуровневый, перспективный метод повышения пропускной способности различных устройств с помощью подсказок производительности.
-
Явное пакетирование и потоки: Более детальный подход, включающий явное пакетирование и использование потоков для расширенной настройки производительности.
Проектирование приложений, ориентированных на пропускную способность:
Для достижения максимальной пропускной способности приложения должны:
- Обрабатывайте входные данные параллельно, полностью используя возможности устройства.
- Декомпозиция потока данных в параллельные запросы на вывод, запланированные для параллельного выполнения.
- Используйте Async API с обратными вызовами, чтобы сохранить эффективность и избежать "голодания" устройства.
Выполнение на нескольких устройствах:
OpenVINOРежим работы с несколькими устройствами упрощает масштабирование пропускной способности за счет автоматической балансировки запросов на выводы между устройствами, не требуя управления устройствами на уровне приложений.
Повышение производительности в реальных условиях
Реализация оптимизаций OpenVINO с моделями Ultralytics YOLO может дать значительный прирост производительности. Как показывают бенчмарки, скорость вычислений на процессорах Intel увеличивается до 3 раз, при этом еще большее ускорение возможно в аппаратном спектре Intel, включая интегрированные графические процессоры, специализированные графические процессоры и VPU.
Например, при запуске моделей YOLOv8 на процессорах Intel Xeon OpenVINO версии неизменно превосходят аналоги PyTorch по времени вывода на изображение без ущерба для точности.
Практическая реализация
Чтобы экспортировать и оптимизировать модель Ultralytics YOLO для OpenVINO, вы можете воспользоваться функцией экспорта:
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precision
После экспорта вы можете запустить расчеты с оптимизированной моделью:
# Load the OpenVINO model
ov_model = YOLO("yolov8n_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 предлагает разработчикам мощный набор инструментов для развертывания высокопроизводительных ИИ-решений.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Как оптимизировать модели Ultralytics YOLO для низкой задержки при использовании OpenVINO?
Оптимизация моделей Ultralytics YOLO для обеспечения низкой латентности включает в себя несколько ключевых стратегий:
- Одно умозаключение на устройство: Ограничьте количество выводов на одном устройстве, чтобы минимизировать задержки.
- Использование субустройств: Используйте такие устройства, как многосокетные CPU или многоуровневые GPU, которые могут обрабатывать несколько запросов с минимальным увеличением задержки.
- OpenVINO Подсказки по производительности: Используйте OpenVINO's
ov::hint::PerformanceMode::LATENCY
во время компиляции модели для упрощенной настройки, не зависящей от устройства.
Более подробные практические советы по оптимизации задержек вы найдете в разделе "Оптимизация задержек " нашего руководства.
Почему я должен использовать 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?
Чтобы сократить время ожидания первого вывода, воспользуйтесь следующими методами:
- Кэширование моделей: используйте кэширование моделей, чтобы уменьшить время загрузки и компиляции.
- Сопоставление моделей и чтение: Используйте отображение (
ov::enable_mmap(true)
) по умолчанию, но переключитесь на чтение (ov::enable_mmap(false)
), если модель находится на съемном или сетевом диске. - Автоматический выбор устройства: Используйте режим AUTO, чтобы начать с вывода CPU и плавно перейти к ускорителю.
Подробные стратегии по управлению задержкой первого вывода см. в разделе Управление задержкой первого вывода.
Как сбалансировать оптимизацию по задержке и пропускной способности с Ultralytics YOLO и OpenVINO?
Баланс между оптимизацией задержки и пропускной способности требует понимания потребностей вашего приложения:
- Оптимизация задержки: Идеально подходит для приложений реального времени, требующих немедленного отклика (например, приложений потребительского класса).
- Оптимизация пропускной способности: Лучше всего подходит для сценариев с большим количеством одновременных выводов, позволяющих максимально эффективно использовать ресурсы (например, при крупномасштабном развертывании).
Использование высокоуровневых подсказок OpenVINO по производительности и режимов работы с несколькими устройствами поможет найти правильный баланс. Выберите подходящие подсказкиOpenVINO Performance в зависимости от ваших конкретных требований.
Можно ли использовать модели Ultralytics YOLO с другими AI-фреймворками, кроме OpenVINO?
Да, модели Ultralytics YOLO очень универсальны и могут быть интегрированы с различными AI-фреймворками. Варианты включают:
- TensorRT: Для оптимизации NVIDIA GPU следуйте руководству по интеграцииTensorRT .
- CoreML: Для устройств Apple см. наши инструкции по экспортуCoreML .
- TensorFlow.js: Для веб-приложений и приложений Node.js см. руководство по преобразованиюTF.js.
Ознакомьтесь с другими интеграциями на страницеUltralytics Integrations.