Открыть сервис

TF32

TF32 (Tensor Float 32) — это формат представления чисел с плавающей запятой, разработанный компанией NVIDIA, предназначенный для ускорения вычислений в задачах машинного обучения, особенно при обучении и инференсе нейросетей. TF32 занимает промежуточное положение между 32-битными (FP32) и 16-битными (FP16) форматами, обеспечивая компромисс между точностью и производительностью. Он не является стандартным типом данных IEEE 754, а представляет собой специализированный формат, оптимизированный для работы с тензорными ядрами (Tensor Cores) в графических процессорах NVIDIA, начиная с архитектуры Ampere.

История и предпосылки

С развитием глубокого обучения возникла потребность в увеличении производительности вычислений без существенной потери точности. Традиционный формат FP32 (32 бита, IEEE 754) обеспечивает высокую точность, но требует значительных вычислительных ресурсов и пропускной способности памяти. Формат FP16 (16 бит) позволяет вдвое увеличить скорость операций, но его динамический диапазон и точность недостаточны для многих задач обучения, особенно при работе с большими градиентами или весами, что может приводить к переполнению или потере значимости.

В 2020 году NVIDIA представила архитектуру Ampere (серия A100) и вместе с ней формат TF32. Целью было создание формата, который мог бы автоматически использоваться в существующих моделях без необходимости изменения кода или ручного подбора масштабирования, как это требуется для FP16. TF32 стал «режимом по умолчанию» для операций с тензорными ядрами в Ampere, обеспечивая ускорение до 8 раз по сравнению с FP32 при обучении на ядрах Tensor Cores.

Технические характеристики

TF32 использует 19-битное представление числа, что отличается от стандартных форматов. Структура битового поля:

  • Знак (1 бит): определяет положительное или отрицательное число.
  • Экспонента (8 бит): такая же, как у FP32, что позволяет охватывать тот же динамический диапазон (от ~1.4×10⁻⁴⁵ до ~3.4×10³⁸).
  • Мантисса (10 бит): сокращена по сравнению с FP32 (23 бита), что снижает точность, но ускоряет вычисления.

Таким образом, TF32 имеет динамический диапазон FP32, но точность, близкую к FP16 (10 бит мантиссы против 10 или 11 у FP16). Это делает его устойчивым к переполнению, характерному для FP16, при этом обеспечивая достаточную точность для большинства задач обучения нейросетей.

Сравнение с другими форматами

ФорматРазмер (бит)Экспонента (бит)Мантисса (бит)Динамический диапазонТочность
FP3232823ВысокийВысокая
TF3219 (внутренний)810Высокий (как у FP32)Средняя
FP1616510НизкийСредняя
BF161687Высокий (как у FP32)Низкая

В отличие от BF16 (Brain Floating Point), который также имеет 8-битную экспоненту, TF32 использует более широкую мантиссу (10 бит против 7), что даёт несколько лучшую точность, но при этом требует больше вычислительных ресурсов при реализации.

Принцип работы

TF32 не является форматом хранения данных в памяти. NVIDIA реализовала его как внутренний формат для операций с тензорными ядрами. При выполнении операций умножения и накопления (FMA — fused multiply-add) данные, поданные в формате FP32, автоматически преобразуются в TF32 на входе тензорного ядра. Результат вычислений также возвращается в формате FP32. Это позволяет программистам использовать существующие модели, написанные для FP32, без изменений — достаточно включить поддержку TF32 через библиотеки CUDA или cuDNN.

В архитектуре Ampere каждое тензорное ядро может выполнять 256 операций FMA за такт, работая с матрицами размером 4×4. При использовании TF32 производительность достигает 156 терафлопс на одном GPU A100, тогда как для FP32 она составляет 19,5 терафлопс (без тензорных ядер). Для FP16 — 312 терафлопс, но с ограничениями по точности.

Применение

TF32 применяется преимущественно в задачах обучения и инференса нейросетей, где требуется баланс между скоростью и точностью. Основные области использования:

  • Обучение глубоких нейронных сетей: особенно для моделей компьютерного зрения (например, ResNet, EfficientNet), обработки естественного языка (BERT, GPT) и рекомендательных систем. TF32 позволяет ускорить обучение в 2–8 раз по сравнению с FP32 без потери качества модели.
  • Инференс: при развёртывании моделей на серверах, где важна пропускная способность, TF32 может использоваться для ускорения вычислений, хотя для инференса часто применяют более агрессивные форматы (INT8, FP16).
  • Научные вычисления: в задачах, где требуется высокая производительность, но допустима некоторая потеря точности, например, в моделировании климата или обработке сигналов.

Поддержка в оборудовании

TF32 поддерживается на графических процессорах NVIDIA, начиная с архитектуры Ampere (серии A100, A30, RTX 30xx, RTX A-series). В последующих архитектурах (Hopper, Ada Lovelace, Blackwell) поддержка TF32 была расширена и улучшена. Например, в архитектуре Hopper (H100) добавлены новые тензорные ядра, оптимизированные для TF32, что позволило достичь производительности до 990 терафлопс.

На уровне программного обеспечения TF32 поддерживается в библиотеках:

  • CUDA 11+: автоматическое использование при включении тензорных ядер.
  • cuDNN 8+: для операций свёртки и рекуррентных слоёв.
  • TensorRT: для оптимизации инференса.
  • Фреймворки: PyTorch, TensorFlow, JAX, PaddlePaddle — имеют флаги для включения TF32 (например, torch.backends.cuda.matmul.allow_tf32).

Критика и ограничения

Несмотря на преимущества, TF32 имеет ряд недостатков:

  • Снижение точности: хотя для большинства задач обучения точность TF32 достаточна, в некоторых случаях (например, при обучении моделей с очень чувствительными градиентами) может потребоваться FP32. Это особенно актуально для задач с малыми значениями весов или при использовании смешанной точности.
  • Зависимость от оборудования: TF32 работает только на GPU с тензорными ядрами, начиная с Ampere. На более старых архитектурах (Turing, Volta) он не поддерживается, что ограничивает его применение.
  • Неэффективность для хранения: TF32 не предназначен для хранения данных в памяти, так как занимает 19 бит, что некратно байту. Это делает его неудобным для использования в качестве формата хранения весов или активаций.
  • Конкуренция с другими форматами: в некоторых задачах BF16 может быть предпочтительнее из-за более широкого динамического диапазона при той же производительности, особенно на процессорах Intel или AMD.

Перспективы развития

С появлением новых архитектур GPU (например, Blackwell от NVIDIA) формат TF32 продолжает развиваться. В Blackwell добавлены поддержка TF32 с точностью до 2× (TF32-2x), что позволяет выполнять операции с удвоенной точностью по сравнению с базовым TF32. Это расширяет область применения формата на задачи, требующие более высокой точности, такие как обучение больших языковых моделей.

Кроме того, TF32 стимулировал развитие других смешанных форматов (например, FP8, INT4), которые используются в современных системах ИИ. В целом, TF32 остаётся важным инструментом для ускорения вычислений в машинном обучении, обеспечивая баланс между производительностью и точностью.

Источники

  • NVIDIA. «NVIDIA A100 Tensor Core GPU Architecture». 2020.
  • NVIDIA Developer Blog. «TF32: The New Tensor Core Format for AI». 2020.
  • IEEE Standard for Floating-Point Arithmetic (IEEE 754). 2019.
  • Документация CUDA 11.0. «Tensor Core Operations».
  • Статья «Mixed Precision Training» в журнале ICLR, 2018.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →