Что такое cuDNN Frontend и зачем это нужно
Компания NVIDIA выпустила cuDNN Frontend — библиотеку, которая позволяет разработчикам описывать вычислительные графы на уровне операций, а не отдельных вызовов ядра. Это дает прямой доступ к механизмам оптимизации cuDNN: fusion (объединение операций в одно ядро), autotuning (автоматический выбор лучшего алгоритма) и plan reuse (переиспользование готовых планов выполнения). Инструмент работает «ниже» фреймворков вроде PyTorch, позволяя захватывать контроль над выбором движка (engine) и структурой вычислений.
Пятиэтапный конвейер построения графа
Работа с API строится вокруг строгой последовательности из пяти шагов, обеспечивающих валидацию и оптимизацию перед запуском. Каждый тензор описывается через размеры и strides (шаги памяти), а операции связываются в граф. Процесс выглядит так:
- Validate: Проверка корректности графа и совместимости типов данных.
- Build operation graph: Формирование структуры вычислений.
- Create execution plans: Генерация вариантов планов выполнения (engine configs).
- Check support: Проверка доступности планов на текущем GPU (compute capability).
- Build plans: Финализация выбранного плана и выделение рабочей памяти (workspace).
Практика: Fusion Conv -> Bias -> ReLU
В демонстрационных материалах показано, как объединить свертку, добавление смещения (bias) и активацию ReLU в одно ядро. Ключевым фактором производительности является использование формата памяти channels_last (NHWC), который оптимален для Tensor Cores. Тестирование проводилось на GPU с вычислительной способностью sm_80 (Ampere) и sm_90 (Hopper) с использованием типов данных BF16/FP16.
Сравнение производительности показывает значительный прирост за счет устранения накладных расходов на запуск отдельных ядер:
| Метрика | cuDNN Frontend (Fused) | PyTorch (Separate Kernels) | Ускорение |
|---|---|---|---|
| Задержка (Latency) | ~2.5-3.0 мс | ~4.5-5.5 мс | ~1.8x |
| Пропускная способность (TFLOP/s) | Высокая (зависит от размера) | Ниже (из-за overhead) | - |
| Точность (Error vs Ref) | < 1e-9 (relative) | Reference | Идентично |
Автонастройка (Autotuning) и переиспользование планов
cuDNN Frontend позволяет не просто запускать граф, но и автонастраивать его. Система может сгенерировать все возможные конфигурации движков (engine configs) для заданных параметров, протестировать их производительность и выбрать оптимальный. Кроме того, поддерживается сериализация планов (plan serialization). Это означает, что однажды построенный и оптимизированный план можно сохранить на диск и загрузить позже, избегая затрат времени на autotuning при каждом запуске приложения. Это критически важно для production-сред, где важна предсказуемая задержка.
Поддержка динамических форм и CUDA Graphs
Библиотека расширяет возможности работы с динамическими размерами тензоров (dynamic shapes) и интегрируется с CUDA Graphs. Это позволяет захватывать весь граф вычислений в единый объект, который затем может быть воспроизведен на GPU с минимальными накладными расходами на CPU-GPU синхронизацию. Поддержка SDPA (Scaled Dot-Product Attention) доступна для архитектур Ampere и новее, что делает инструмент актуальным для современных LLM-инференсов.
Источник: MarkTechPost ↗
