Экспорт моделей YOLO26 в TensorRT#
Развертывание моделей компьютерного зрения в высокопроизводительных средах может потребовать формата, максимально повышающего скорость и эффективность. Это особенно актуально при развертывании модели на GPU NVIDIA.
Используя формат экспорта TensorRT, ты можешь оптимизировать модели Ultralytics YOLO26 для быстрого и эффективного выполнения инференса на оборудовании NVIDIA. В этом руководстве приведены понятные пошаговые инструкции по процессу конвертации, которые помогут максимально эффективно использовать передовые технологии NVIDIA в проектах глубокого обучения.
TensorRT#
TensorRT, разработанный NVIDIA, — это современный комплект разработки ПО (SDK) для высокоскоростного инференса моделей глубокого обучения. Он хорошо подходит для приложений реального времени, таких как обнаружение объектов.
Этот набор инструментов оптимизирует модели глубокого обучения для GPU NVIDIA, обеспечивая более быстрые и эффективные операции. Модели TensorRT проходят оптимизацию TensorRT, которая включает такие методы, как объединение слоев, калибровка точности (INT8 и FP16), динамическое управление памятью тензоров и автоматическая настройка ядер. Конвертация моделей глубокого обучения в формат TensorRT позволяет разработчикам полностью раскрыть потенциал GPU NVIDIA.
TensorRT известен совместимостью с различными форматами моделей, включая TensorFlow, PyTorch и ONNX, что предоставляет разработчикам гибкое решение для интеграции и оптимизации моделей из разных фреймворков. Такая универсальность обеспечивает эффективное развертывание моделей в различных аппаратных и программных средах.
TensorRT профилирует и настраивает движок на GPU, используемом для его сборки. Выполняй сборку под архитектуру GPU, на котором будет выполняться развертывание, и обеспечь соответствие среды выполнения TensorRT/CUDA; не рассматривай файл .engine как переносимый формат модели. Для развертывания на периферийных устройствах Ultralytics Platform предлагает восемь вариантов целевых устройств Jetson, для каждого из которых документированы статус физической сборки и валидации, либо ты можешь выполнить экспорт локально на целевом устройстве.
Ключевые особенности моделей TensorRT#
Модели TensorRT обладают рядом ключевых особенностей, повышающих их эффективность и производительность при высокоскоростном инференсе моделей глубокого обучения:
-
Калибровка точности: TensorRT поддерживает калибровку точности, позволяя точно настроить модели под конкретные требования к точности. Поддерживаются форматы с пониженной точностью, такие как INT8 и FP16, которые могут дополнительно повысить скорость инференса при сохранении приемлемого уровня точности.
-
Объединение слоев: процесс оптимизации TensorRT включает объединение слоев, при котором несколько слоев нейронной сети объединяются в одну операцию. Это снижает вычислительные накладные расходы и повышает скорость инференса за счет минимизации обращений к памяти и количества вычислений.
-
Динамическое управление памятью тензоров: TensorRT эффективно управляет использованием памяти тензоров во время инференса, снижая накладные расходы на память и оптимизируя ее выделение. В результате память GPU используется эффективнее.
-
Автоматическая настройка ядер: TensorRT автоматически настраивает ядра, выбирая наиболее оптимизированное ядро GPU для каждого слоя модели. Такой адаптивный подход гарантирует, что модель в полной мере использует вычислительную мощность GPU.
Варианты развертывания в TensorRT#
Прежде чем перейти к коду экспорта моделей YOLO26 в формат TensorRT, разберемся, где обычно используются модели TensorRT.
TensorRT предлагает несколько вариантов развертывания, и каждый из них по-разному сочетает простоту интеграции, оптимизацию производительности и гибкость:
- Развертывание внутри TensorFlow: этот метод интегрирует TensorRT в TensorFlow, позволяя запускать оптимизированные модели в знакомой среде TensorFlow. Он полезен для моделей, содержащих поддерживаемые и неподдерживаемые слои, поскольку TF-TRT эффективно обрабатывает такие комбинации.
-
Автономный Runtime API TensorRT: предоставляет детальный контроль и идеально подходит для приложений, критичных к производительности. Он сложнее, но позволяет реализовать собственную поддержку неподдерживаемых операторов.
-
NVIDIA Triton Inference Server: поддерживает модели из различных фреймворков. Он особенно хорошо подходит для облачного инференса и инференса на периферийных устройствах, предоставляя такие возможности, как параллельное выполнение моделей и анализ моделей.
Поддерживаемые задачи#
Экспорт в TensorRT поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только в YOLO26 — единственном семействе, поставляемом с такими головами.
| Задача | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Детекция | ✅ | ✅ | ✅ |
| Сегментация | ✅ | ✅ | ✅ |
| Семантическая сегментация | ❌ | ❌ | ✅ |
| Оценка глубины | ❌ | ❌ | ✅ |
| Классификация | ✅ | ✅ | ✅ |
| Поза | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Экспорт моделей YOLO26 в TensorRT#
Ты можешь повысить эффективность выполнения и оптимизировать производительность, конвертировав модели YOLO26 в формат TensorRT.
Установка#
Чтобы установить необходимый пакет, выполни:
# Install the required package for YOLO26
pip install ultralyticsПодробные инструкции и рекомендации по процессу установки см. в нашем руководстве по установке YOLO26. Если при установке необходимых пакетов для YOLO26 возникнут трудности, обратитесь к нашему руководству по распространённым проблемам, где приведены решения и советы.
Использование#
Прежде чем перейти к инструкциям по использованию, ознакомься с ассортиментом моделей YOLO26 от Ultralytics. Это поможет выбрать наиболее подходящую модель для требований твоего проекта.
Формат TensorRT поддерживает режимы Export, Predict и Validate. Для инференса и валидации требуется GPU NVIDIA. Экспортируй модель, затем загрузи экспортированную модель для выполнения инференса или проверки ее точности.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo26n.engine'from ultralytics import YOLO
# Load the exported TensorRT model
model = YOLO("yolo26n.engine")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported TensorRT model
model = YOLO("yolo26n.engine")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Аргументы экспорта#
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
format | str | 'engine' | Целевой формат экспортированной модели, определяющий совместимость с различными средами развёртывания. |
imgsz | int или tuple | 640 | Требуемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для указания конкретных размеров. |
quantize | int или str | None | Точность квантования: 16 (FP16) или 8 (INT8/PTQ; требуется калибровка data/fraction); 32/не задано — это FP32. Чекпоинт, обученный с помощью quantize=8, всегда экспортирует INT8 из диапазона, который чекпоинт содержит, без калибровки. Заменяет устаревшие флаги half/int8. |
dynamic | bool | False | Разрешает динамические размеры входных данных, повышая гибкость при работе с изображениями разных размеров. |
simplify | bool | True | Упрощает граф модели с помощью onnxslim, что потенциально повышает производительность и совместимость. |
opset | int | None | Задает версию opset для промежуточного графа ONNX. Если параметр не задан, используется последняя поддерживаемая версия. |
workspace | float или None | None | Задает максимальный размер рабочей области в ГиБ для оптимизации TensorRT, балансируя между использованием памяти и производительностью; используй None, чтобы TensorRT автоматически выделял память вплоть до максимального объема устройства. |
nms | bool, необязательно | None | Выбери необработанный вывод (None, по умолчанию), встроенный NMS (True) или голову без NMS (False). |
batch | int | 1 | Задаёт размер пакета при инференсе экспортированной модели или максимальное количество изображений, которые экспортированная модель будет обрабатывать одновременно в режиме predict. |
data | str | None | Путь к YAML-файлу датасета, необходимому для квантования; для классификации вместо этого указывается каталог датасета или имя встроенного датасета. Если параметр опущен при использовании quantize=8, Ultralytics выбирает датасет калибровки по умолчанию для задачи модели; чекпоинту, обученному с помощью quantize=8, датасет не требуется. |
fraction | float, int или list | 1.0 | Подмножество для калибровки в виде доли, количества изображений или значений [train, val, test] — долей/количеств. В списках из двух элементов test оставляет полный набор, а 0 пропускает его. |
device | str | None | Задает устройство для экспорта: GPU (device=0) или DLA для NVIDIA Jetson (device=dla:0 или device=dla:1). |
При экспорте в TensorRT обязательно используй GPU с поддержкой CUDA.
TensorRT 11.2.1 не поддерживает JetPack, включая Thor; используй среду выполнения TensorRT 10.x, поддерживаемую твоим выпуском JetPack. Для device=dla:0 или device=dla:1 NVIDIA называет TensorRT 10.7 последним выпуском с поддержкой DLA. TensorRT 11.0, 11.1 и 11.2 не поддерживают DLA.
Подробнее о процессе экспорта см. на странице документации Ultralytics об экспорте.
Экспорт TensorRT с INT8-квантизацией#
Экспорт моделей Ultralytics YOLO с использованием TensorRT с точностью INT8 выполняет квантование после обучения (PTQ). TensorRT использует калибровку для квантования после обучения, которая измеряет распределение активаций внутри каждого тензора активации по мере того, как модель YOLO выполняет вывод на репрезентативных входных данных, а затем использует это распределение для оценки значений масштаба для каждого тензора. Каждый тензор активации, являющийся кандидатом на квантование, имеет связанный масштаб, который выводится в процессе калибровки. Чекпоинт, дообученный с помощью quantize=8 посредством обучения с учетом квантования, уже содержит свои диапазоны INT8, поэтому его экспорт использует эти диапазоны и пропускает калибровку.
TensorRT 11 удалил неявную квантизацию и интерфейс IInt8Calibrator. В TensorRT 11 и более новых версиях Ultralytics выполняет квантизацию INT8 с помощью явной квантизации NVIDIA ModelOpt, которая вставляет узлы Q/DQ в граф ONNX перед сборкой строго типизированного движка; FP16 применяется с помощью преобразования смешанной точности ModelOpt AutoCast. Аргументы quantize=8, quantize=16 и data работают так же; ModelOpt автоматически устанавливается при первом использовании. В TensorRT 7–10 вместо этого используется описанный ниже устаревший калибратор.
При обработке сетей с неявной квантизацией TensorRT использует INT8 для оптимизации времени выполнения слоев, когда это возможно. Если слой выполняется быстрее в INT8 и для его входных и выходных данных назначены масштабы квантизации, этому слою назначается ядро с точностью INT8; в противном случае TensorRT выбирает для ядра точность FP32 или FP16 в зависимости от того, какая из них обеспечивает более быстрое выполнение этого слоя.
Критически важно, чтобы для экспорта с точностью INT8 использовалось то же устройство, на котором будут развернуты веса модели TensorRT, поскольку результаты калибровки могут различаться на разных устройствах.
Настройка экспорта INT8#
Аргументы, задаваемые при использовании экспорта модели Ultralytics YOLO, значительно влияют на производительность экспортированной модели. Их также необходимо выбирать с учетом доступных ресурсов устройства, однако аргументы по умолчанию должны работать на большинстве дискретных GPU NVIDIA Ampere (или более новых). Для экспорта на GPU используется алгоритм калибровки "MINMAX_CALIBRATION", а для экспорта на DLA в NVIDIA Jetson — "ENTROPY_CALIBRATION_2". Подробнее о доступных параметрах можно прочитать в руководстве разработчика TensorRT. Тесты Ultralytics показали, что "MINMAX_CALIBRATION" — лучший выбор для экспорта на GPU; алгоритм выбирается автоматически на основе устройства экспорта.
-
workspace: управляет размером (в ГиБ) выделяемой памяти устройства при конвертации весов модели.-
Настрой значение
workspaceв соответствии с требованиями калибровки и доступными ресурсами. Хотя большее значениеworkspaceможет увеличить время калибровки, оно позволяет TensorRT исследовать более широкий набор стратегий оптимизации, потенциально повышая производительность и точность модели. И наоборот, меньшее значениеworkspaceможет сократить время калибровки, но ограничить стратегии оптимизации и ухудшить качество квантизированной модели. -
По умолчанию используется
workspace=None, что позволяет TensorRT автоматически выделять память; при ручной настройке это значение может потребоваться увеличить, если калибровка завершается сбоем (завершается без предупреждения). -
Во время экспорта TensorRT сообщит
UNSUPPORTED_STATE, если значениеworkspaceпревышает доступный объем памяти устройства; это означает, что значениеworkspaceследует уменьшить или установить равнымNone. -
Если для
workspaceустановлено максимальное значение, а калибровка завершается с ошибкой или аварийно, попробуй использоватьNoneдля автоматического выделения памяти либо уменьшить значенияimgszиbatch, чтобы снизить требования к памяти. -
Помни: калибровка INT8 зависит от конкретного устройства; использование «высокопроизводительного» GPU для калибровки может привести к низкой производительности при выполнении инференса на другом устройстве.
-
-
batch: максимальный размер пакета, который будет использоваться для инференса. Во время инференса можно использовать пакеты меньшего размера, но инференс не примет пакеты больше указанного размера.
Использование небольших пакетов может привести к неточному масштабированию во время калибровки INT8. Это происходит потому, что процесс подстраивается под наблюдаемые данные. Небольшие пакеты могут не охватывать полный диапазон значений, что приводит к проблемам с итоговой калибровкой. Больший размер пакета помогает получить более репрезентативные результаты калибровки.
Эксперименты NVIDIA привели к рекомендации использовать по крайней мере 500 калибровочных изображений, которые являются репрезентативными для данных вашей модели, с калибровкой квантования INT8. Это рекомендация, а не жесткое требование, и тебе потребуется поэкспериментировать с тем, что необходимо для хорошей работы для твоего датасета. Поскольку калибровочные данные требуются для калибровки INT8 с помощью TensorRT, обязательно используй аргумент data при экспорте чекпоинта, который не был обучен с помощью quantize=8 (квантование после обучения) в quantize=8 для TensorRT, и используй data="my_dataset.yaml", который будет использовать изображения из валидации для калибровки. Чекпоинт, обученный с помощью quantize=8, пропускает калибровку, поэтому опусти data для чекпоинта. Когда для data не передается значение при экспорте в TensorRT с квантованием INT8, по умолчанию будет использоваться один из «маленьких» примеров датасетов на основе задачи модели вместо вызова ошибки.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
quantize=8,
data="coco.yaml", # (4)!
)
# Load the exported TensorRT INT8 model
model = YOLO("yolo26n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")- Экспорт с динамическими осями;
dynamicостаетсяFalse, если не задано явно. Дополнительную информацию смотри в разделе аргументы экспорта. - Задает максимальный размер пакета 8 для экспортированной модели и калибровки INT8.
- Выделяет 4 ГиБ памяти вместо выделения всего устройства для процесса конвертации.
- Использует набор данных COCO для калибровки, в частности изображения, использованные для валидации (всего 5 000).
Кэш калибровки
TensorRT создаст калибровочный .cache, который можно повторно использовать для ускорения экспорта будущих весов моделей на тех же данных, однако это может привести к плохой калибровке, если данные существенно отличаются или значение batch сильно изменилось. В таких обстоятельствах существующий .cache следует переименовать и переместить в другой каталог либо полностью удалить.
Преимущества использования YOLO с TensorRT INT8#
-
Уменьшенный размер модели: квантизация с FP32 до INT8 может уменьшить размер модели в 4 раза (на диске или в памяти), обеспечивая более быструю загрузку, снижая требования к хранилищу и уменьшая объем памяти, необходимый при развертывании модели.
-
Сниженное энергопотребление: операции с пониженной точностью для экспортированных моделей YOLO INT8 могут потреблять меньше энергии по сравнению с моделями FP32, особенно на устройствах с питанием от аккумулятора.
-
Повышенная скорость инференса: TensorRT оптимизирует модель под целевое оборудование, что потенциально обеспечивает более высокую скорость инференса на GPU, встраиваемых устройствах и ускорителях.
Примечание о скорости инференса
Первые несколько вызовов инференса модели, экспортированной в TensorRT INT8, могут характеризоваться более длительным, чем обычно, временем предварительной обработки, инференса и/или постобработки. Это также может происходить при изменении imgsz во время инференса, особенно если imgsz отличается от указанного при экспорте (экспорт imgsz задается как «оптимальный» профиль TensorRT).
Недостатки использования YOLO с TensorRT INT8#
-
Снижение оценочных метрик: использование более низкой точности означает, что
mAP,Precision,Recallили любой другой метрики, используемой для оценки производительности модели, скорее всего, будут несколько хуже. Слои Sigmoid сохраняются с более высокой точностью для сохранения калибровки оценок, но INT8 все же может сместить значения уверенности, поэтому выбирай рабочий порог по собственной F1-кривой модели INT8. См. раздел с результатами производительности, чтобы сравнить различия вmAP50иmAP50-95при экспорте с INT8 на небольшом наборе образцов с различных устройств. -
Увеличение времени разработки: поиск «оптимальных» настроек калибровки INT8 для набора данных и устройства может потребовать значительного объема тестирования.
-
Зависимость от оборудования: калибровка и прирост производительности могут сильно зависеть от оборудования, а веса модели становятся менее переносимыми.
Производительность экспорта Ultralytics YOLO в TensorRT#
NVIDIA A100#
Протестировано с Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1
Примеры использования этих моделей, обученных на COCO и включающих 80 предварительно обученных классов, см. в документации по обнаружению.
Для каждого теста указано время инференса для mean, min (самое быстрое) и max (самое медленное) с использованием предварительно обученных весов yolov8n.engine
| Precision | Тест оценки | среднее (мс) | мин. | макс. (мс) | mAPval 50(B) | mAPval 50-95(B) | batch | размер (пиксели) |
|---|---|---|---|---|---|---|---|
| FP32 | Predict | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predict | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predict | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
| INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
Потребительские GPU#
Протестировано с Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6
Для каждого теста указано время инференса для mean, min (самое быстрое) и max (самое медленное) с использованием предварительно обученных весов yolov8n.engine
| Precision | Тест оценки | среднее (мс) | мин. | макс. (мс) | mAPval 50(B) | mAPval 50-95(B) | batch | размер (пиксели) |
|---|---|---|---|---|---|---|---|
| FP32 | Predict | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predict | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predict | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Встраиваемые устройства#
Протестировано с JetPack 6.0 (L4T 36.3), Ubuntu 22.04.4 LTS, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1
Для каждого теста указано время инференса для mean, min (самое быстрое) и max (самое медленное) с использованием предварительно обученных весов yolov8n.engine
| Precision | Тест оценки | среднее (мс) | мин. | макс. (мс) | mAPval 50(B) | mAPval 50-95(B) | batch | размер (пиксели) |
|---|---|---|---|---|---|---|---|
| FP32 | Predict | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predict | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predict | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Подробнее о настройке и конфигурации см. в нашем кратком руководстве по NVIDIA Jetson и Ultralytics YOLO.
Подробнее о настройке и конфигурации см. в нашем кратком руководстве по NVIDIA DGX Spark и Ultralytics YOLO.
Методы оценки#
Разверни разделы ниже, чтобы узнать, как экспортировались и тестировались эти модели.
Конфигурации экспорта
Подробнее об аргументах конфигурации экспорта см. в разделе режим экспорта.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)
# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=16)
# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)Цикл Predict
Дополнительную информацию см. в разделе режим Predict.
import cv2
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")
for _ in range(100):
result = model.predict(
[img] * 8, # batch=8 of the same image
verbose=False,
device="cuda",
)Конфигурация валидации
Подробнее об аргументах конфигурации валидации см. в разделе режим val.
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
results = model.val(
data="data.yaml", # COCO, ImageNet, or DOTAv1 for appropriate model task
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)Развертывание экспортированных моделей YOLO26 TensorRT#
После успешного экспорта моделей Ultralytics YOLO26 в формат TensorRT ты готов к их развертыванию. Подробные инструкции по развертыванию моделей TensorRT в различных средах смотри в следующих ресурсах:
-
Развертывание Ultralytics с Triton Server: наше руководство по использованию NVIDIA Triton Inference (ранее TensorRT Inference) Server специально для моделей Ultralytics YOLO.
-
Развертывание глубоких нейронных сетей с NVIDIA TensorRT: в этой статье объясняется, как эффективно использовать NVIDIA TensorRT для развертывания глубоких нейронных сетей на платформах развертывания на базе GPU.
-
Комплексный ИИ для ПК на базе NVIDIA: развертывание NVIDIA TensorRT: в этой статье блога объясняется использование NVIDIA TensorRT для оптимизации и развертывания моделей ИИ на ПК на базе NVIDIA.
-
Репозиторий GitHub для NVIDIA TensorRT: Это официальный репозиторий GitHub, содержащий исходный код и документацию для NVIDIA TensorRT.
Итоги#
В этом руководстве мы рассмотрели преобразование моделей Ultralytics YOLO26 в формат моделей NVIDIA TensorRT. Этот этап преобразования крайне важен для повышения эффективности и скорости моделей YOLO26, что делает их более производительными и подходящими для различных сред развертывания.
Дополнительные сведения об использовании смотри в официальной документации TensorRT.
Если тебе интересны дополнительные интеграции Ultralytics YOLO26, на нашей странице руководства по интеграциям представлен обширный выбор информативных ресурсов и материалов.
Часто задаваемые вопросы#
Чтобы преобразовать модели Ultralytics YOLO26 в формат TensorRT для оптимизированного инференса на GPU NVIDIA, выполни следующие шаги:
-
Установи необходимый пакет:
pip install ultralytics -
Экспортируй модель YOLO26:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine") # creates 'yolo26n.engine' # Run inference model = YOLO("yolo26n.engine") results = model("https://ultralytics.com/images/bus.jpg")
Подробнее смотри в руководстве по установке YOLO26 и документации по экспорту.
-
Оптимизация моделей YOLO26 с помощью TensorRT дает несколько преимуществ:
- Более высокая скорость инференса: TensorRT оптимизирует слои модели и использует калибровку точности (INT8 и FP16), ускоряя инференс без существенного снижения точности.
- Эффективное использование памяти: TensorRT динамически управляет памятью тензоров, уменьшая накладные расходы и повышая эффективность использования памяти GPU.
- Объединение слоев: объединяет несколько слоев в одну операцию, снижая вычислительную сложность.
- Автоматическая настройка ядер: автоматически выбирает оптимизированные ядра GPU для каждого слоя модели, обеспечивая максимальную производительность.
Дополнительные сведения смотри в официальной документации TensorRT от NVIDIA и нашем подробном обзоре TensorRT.
Да, ты можешь экспортировать модели YOLO26 с помощью TensorRT с квантованием INT8. Этот процесс включает в себя квантование после обучения (PTQ) и калибровку, если только чекпоинт не был обучен с помощью
quantize=8(обучения с учетом квантования), и в этом случае диапазоны, которые содержит чекпоинт, экспортируются без калибровки:-
Экспорт с INT8:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml") -
Запуск инференса:
from ultralytics import YOLO model = YOLO("yolo26n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
Подробнее смотри в разделе об экспорте TensorRT с INT8-квантизацией.
-
Развернуть модели YOLO26 TensorRT на NVIDIA Triton Inference Server можно с помощью следующих ресурсов:
- Развертывание Ultralytics YOLO26 с Triton Server: пошаговые инструкции по настройке и использованию Triton Inference Server.
- Развертывание глубоких нейронных сетей с NVIDIA TensorRT: руководство NVIDIA по развертыванию моделей глубокого обучения с TensorRT, включая подробные варианты и конфигурации развертывания.
Эти руководства помогут тебе эффективно интегрировать модели YOLO26 в различные среды развертывания.
Улучшения производительности с TensorRT могут различаться в зависимости от используемого оборудования. Ниже приведены типичные результаты тестов:
-
NVIDIA A100:
- FP32 Инференс: ~0.52 мс / изображение
- FP16 Инференс: ~0.34 мс / изображение
- INT8 Инференс: ~0.28 мс / изображение
- Небольшое снижение mAP при точности INT8, но значительное повышение скорости.
-
Потребительские GPU (например, RTX 3080):
- FP32 Инференс: ~1.06 мс / изображение
- FP16 Инференс: ~0.62 мс / изображение
- INT8 Инференс: ~0.52 мс / изображение
Подробные результаты тестов производительности для различных конфигураций оборудования приведены в разделе о производительности.
Более подробные сведения о производительности TensorRT смотри в документации Ultralytics и наших отчетах с анализом производительности.
-