Проблема «одного пути» и решение NVIDIA
Глубокие нейросети требуют сложной оптимизации для работы на GPU. Традиционно разработчики использовали фиксированные стратегии компиляции (build routes), которые не всегда были оптимальны для конкретной модели, формы тензоров или архитектуры GPU. NVIDIA решила эту проблему, внедрив в TensorRT 11.1 инструмент Global Performance Tuner. Его суть — представление альтернативных стратегий планирования как явных, searchable (поисковых) комбинаций параметров компилятора.
Масштаб оптимизации: более 200 параметров
Ключевая особенность нового инструмента — работа с огромным пространством конфигураций. TensorRT теперь экспонирует более 200 knobs (параметров компилятора), каждый из которых имеет допустимые значения и значения по умолчанию. Эти параметры управляют эвристиками, решениями о слиянии операций (fusion) и путями генерации кода. Инструметр trtexec реализует цикл настройки, который:
- Раскрывает выражение маршрута в конкретные build routes.
- Собирает и измеряет производительность каждого кандидата.
- Отбрасывает маршруты, вызвавшие сбой или потерю точности.
- Выбирает самый быстрый из допустимых вариантов.
Результаты тестирования: точность vs скорость
Важнейшим аспектом является «accuracy-aware tuning» (настройка с учетом точности). Точность выступает фильтром, а производительность — критерием ранжирования. В тестировании на десяти различных рабочих нагрузках (workloads) автоматический поиск показал значительный прирост скорости по сравнению с дефолтной сборкой:
| Метрика | Значение / Описание |
|---|---|
| Версия TensorRT | 11.1 |
| Количество настраиваемых параметров (knobs) | > 200 |
| Диапазон ускорения (по сравнению с default) | от 1.14x до 1.63x |
| Количество протестированных workload | 10 |
| Поддержка API | C++ (IBuilderConfig), Python (Torch-TensorRT 2.15) |
Практическое применение и лучшие практики
Для эффективного использования Global Performance Tuner NVIDIA рекомендует следующие подходы:
- Используйте --dryRun: Просматривайте список маршрутов перед их сборкой, чтобы оценить объем работы.
- Кэширование: Используйте флаги
--tuningCacheFileи--continueдля инкрементальной и возобновляемой настройки, что экономит время при повторных запусках. - Переоптимизация: Перенастраивайте модель при изменении ее архитектуры, форм входных тензоров, целевого GPU или стека программного обеспечения.
Разработчики могут использовать C++ API (setBuildRoute, getBuildRoute, getAllBuildRoutes) для создания собственных кастомных тюнеров, интегрируя логику поиска прямо в пайплайн развертывания моделей.
Источник: NVIDIA dev blog ↗
