TensorRT
TensorRT — это SDK от NVIDIA, который компилирует обученные нейронные сети в движки, оптимизированные для быстрого инференса на одном GPU. Как он оптимизирует модели и как выглядит код.
TensorRT — это SDK компании NVIDIA для высокопроизводительного вывода моделей глубокого обучения на GPU NVIDIA. Он принимает обученную сеть, обычно в формате файла ONNX, и на этапе сборки компилирует её в движок, также называемый файлом плана: программу для конкретного GPU, которая объединяет слои, работает с пониженной точностью и использует самые быстрые ядра, измеренные на целевом GPU. На этапе выполнения приложение загружает и запускает движок — обычно с меньшей задержкой вывода и большей пропускной способностью, чем у исходного фреймворка. TensorRT поставляется в виде библиотек C++ и Python, а также инструмента командной строки trtexec. Текущая основная версия — TensorRT 11; по состоянию на октябрь 2026 года выпущена версия 11.4.
Как TensorRT оптимизирует модель#
Сборщик выполняет несколько оптимизаций графа сети:
- Объединение слоёв и тензоров: свёртка, её смещение и функция активации объединяются в одно ядро, а неиспользуемые выходы слоёв удаляются. Поэтому промежуточные результаты остаются на чипе, а не пересылаются туда и обратно через память GPU.
- Пониженная точность: FP16 и BF16 вдвое уменьшают трафик памяти по сравнению с FP32, INT8 и FP8 сокращают его ещё вдвое, а INT4 (только для весов) и FP4 позволяют добиться ещё большего на новых GPU. Это один из видов квантования модели. В TensorRT 11 удалили флаги сборщика FP16 и INT8, а также неявную калибровку INT8 из TensorRT 10. Теперь требуются строго типизированные сети, где узлы приведения типов и пары квантования-деквантования задают точность каждого слоя. Model Optimizer NVIDIA может добавлять такие узлы в файл ONNX.
- Автоматическая настройка ядер: для каждого слоя сборщик измеряет время работы вариантов реализации, называемых тактиками, на целевом GPU и выбирает самый быстрый.
- Планирование памяти: буферы активаций повторно используются в слоях, периоды работы которых не пересекаются, что уменьшает объём памяти, занимаемой движком.
- Динамические формы: профили оптимизации с минимальными, оптимальными и максимальными формами позволяют одному движку принимать разные размеры пакетов или разрешения изображений; настройка выполняется для оптимальной формы.
Сборка движка может занимать несколько минут, а результат зависит от оборудования. По умолчанию движок работает только на том типе GPU, для которого он был собран, и с той же версией TensorRT. Движки с совместимостью по оборудованию и версиям обеспечивают переносимость ценой некоторого снижения скорости. Поэтому при развёртывании хранят файл ONNX, а движки собирают непосредственно в среде запуска:
Экспорт модели в TensorRT#
Модели Ultralytics YOLO26 экспортируются в TensorRT с помощью model.export(format="engine"): сначала он создаёт файл ONNX, а затем собирает движок на локальном GPU — с точностью FP16 и quantize=16 или с точностью INT8 и quantize=8, калибруемой по изображениям из набора данных data. В TensorRT 11 экспорт применяет эти режимы точности через Model Optimizer, поскольку этого требует строго типизированный API:
from ultralytics import YOLO
# Сборка движка TensorRT с точностью FP16 на локальном GPU NVIDIA (создаёт yolo26n.engine)
model = YOLO("yolo26n.pt")
model.export(format="engine", quantize=16)
# Загрузка движка и выполнение вывода через тот же API
trt_model = YOLO("yolo26n.engine")
results = trt_model("https://ultralytics.com/images/bus.jpg")
results[0].save(filename="bus_tensorrt.jpg")На сохранённом изображении показаны результаты детекции, полученные движком FP16 на фотографии автобуса через тот же интерфейс YOLO, что и для модели PyTorch.
TensorRT и родственные инструменты#
- ONNX: переносимый формат модели, который чаще всего используется на входе TensorRT. Один файл ONNX можно скомпилировать в отдельные движки для GPU дата-центра и встроенного модуля.
- ONNX Runtime с провайдером выполнения TensorRT: запускает поддерживаемые TensorRT подграфы как движки TensorRT, а для остальных использует ядра CUDA или CPU, сохраняя API ONNX Runtime.
- PyTorch: фреймворк, в котором обучается большинство моделей. Torch-TensorRT компилирует модели PyTorch непосредственно с помощью TensorRT, без отдельного этапа ONNX.
- Другие движки вывода: OpenVINO для оборудования Intel, Core ML для устройств Apple и LiteRT для Android и встроенных устройств выполняют ту же роль на других чипах.
- TensorRT-LLM: библиотека NVIDIA с открытым исходным кодом для вывода больших языковых моделей, построенная теперь на архитектуре PyTorch. Она включает оптимизированные ядра внимания, квантование, спекулятивное декодирование и параллельные вычисления на нескольких GPU.
Примеры применения в реальных условиях#
- Видеоаналитика: SDK DeepStream NVIDIA запускает движки TensorRT в многокамерных конвейерах для аналитики в розничной торговле, на транспорте и в системах безопасности, где несколько потоков используют один GPU.
- Промышленный контроль: камерам на скоростных производственных линиях нужен вывод в реальном времени за время, пока деталь находится в поле зрения. Движки с пониженной точностью позволяют выполнять его на компактных GPU.
- Автономные транспортные средства: сети восприятия для автономных транспортных средств работают как движки TensorRT на платформах NVIDIA DRIVE, таких как DRIVE AGX Orin и Thor.
- Робототехника и периферийные устройства: модули NVIDIA Jetson поставляются с TensorRT в составе JetPack. TensorRT 11.4 не поддерживает JetPack, поэтому для развёртывания на Jetson движки собирают с помощью версии TensorRT 10, доступной в соответствующей версии JetPack.










