Как работают Tensor Cores в H100/B200 и для чего они нужны?

Краткий тезис

Tensor Cores — это специализированные вычислительные блоки на GPU, оптимизированные для выполнения матричного умножения и накопления (GEMM) с использованием смешанной точности. В H100 (архитектура Hopper, 4-е поколение) и B200 (архитектура Blackwell, 5-е поколение) они обеспечивают ускорение до 10–20 раз по сравнению с обычными CUDA Cores для операций, лежащих в основе нейросетей. Tensor Cores критически важны для обучения и инференса больших языковых моделей (LLM), включая RAG-системы, где ускоряют вычисление эмбеддингов, механизм внимания и генерацию ответов.


1. Что такое Tensor Cores?

Tensor Cores — это аппаратные блоки внутри GPU, предназначенные для выполнения одной операции: D = A × B + C, где A, B, C и D — матрицы (или тензоры). В отличие от CUDA Cores, которые выполняют скалярные операции над одним элементом за такт, Tensor Cores работают над целыми матрицами 4×4 (или других размеров) за один шаг. Это позволяет достичь огромной пропускной способности при работе с матричными умножениями — основой свёрточных и трансформерных архитектур.

Первое поколение Tensor Cores появилось в архитектуре Volta (V100, 2017). С тех пор каждое новое поколение добавляло поддержку новых типов данных (FP16, BF16, FP8, INT8, INT4) и увеличивало производительность.


2. Как работают Tensor Cores?

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

Tensor Core выполняет операцию fused multiply-add (FMA) над небольшими матрицами. Например, в H100 один Tensor Core за один такт может выполнить умножение двух матриц 4×4 и прибавить результат к матрице 4×4 накопления. Это эквивалентно 64 операциям умножения и 64 операциям сложения (128 FMA) за один такт.

2.2 Программная модель

Tensor Cores программируются через warp-level инструкции (например, mma.sync в PTX — параллельном ассемблере NVIDIA). Разработчики обычно не пишут PTX напрямую, а используют библиотеки:

  • cuBLAS — оптимизированные реализации BLAS (Basic Linear Algebra Subprograms);
  • cuDNN — библиотека для глубоких нейросетей;
  • TensorRT — оптимизатор инференса;
  • PyTorch / TensorFlow — автоматически используют Tensor Cores при вызове torch.matmul или torch.nn.Linear с подходящими типами данных.

2.3 Смешанная точность

Tensor Cores поддерживают смешанную точность (mixed precision): входные матрицы могут быть в FP16 или BF16, а накопление ведётся в FP32. Это позволяет сохранять точность вычислений при меньшем потреблении памяти и большей скорости. В H100 добавлена поддержка FP8 (8-битная плавающая точка), что ещё сильнее ускоряет инференс и обучение.


3. Поколения Tensor Cores

ПоколениеАрхитектураКлючевые типы данныхПиковая производительность (FP16)
1-еVolta (V100)FP16125 TFLOPS
2-еTuring (T4)FP16, INT865 TFLOPS (FP16)
3-еAmpere (A100)FP16, BF16, INT8, INT4312 TFLOPS (FP16)
4-еHopper (H100)FP16, BF16, FP8, INT8989 TFLOPS (FP16), 1979 TFLOPS (FP8)
5-еBlackwell (B200)FP16, BF16, FP8, FP6, FP4>2000 TFLOPS (FP8), >4500 TFLOPS (FP4)

Каждое поколение увеличивает количество Tensor Cores на SM (Streaming Multiprocessor) и расширяет набор поддерживаемых форматов.


4. Tensor Cores в H100 (Hopper)

H100 — первый GPU с 4-м поколением Tensor Cores. Ключевые особенности:

  • Transformer Engine — аппаратный блок, который автоматически выбирает оптимальную точность (FP8 или FP16) для каждого слоя трансформера, балансируя скорость и качество.
  • Поддержка FP8 — два формата: E4M3 (больше точность) и E5M2 (больше диапазон). Используются для весов и активаций соответственно.
  • Пиковая производительность: 1979 TFLOPS для FP8 (sparse) и 989 TFLOPS для FP16.
  • Ускорение GEMM — до 10–20 раз быстрее, чем CUDA Cores при одинаковой тактовой частоте.

Tensor Cores в H100 расположены внутри каждого SM (Streaming Multiprocessor). H100 содержит 132 SM, каждый с 4 Tensor Cores четвёртого поколения.


5. Tensor Cores в B200 (Blackwell)

B200 — первый GPU архитектуры Blackwell, 5-е поколение Tensor Cores. Основные улучшения:

  • Поддержка FP6 и FP4 — новые форматы для ещё более агрессивной квантизации без значительной потери качества.
  • Увеличенная производительность: пиковая >4500 TFLOPS для FP4, >2000 TFLOPS для FP8.
  • Второе поколение Transformer Engine — улучшенное управление точностью, поддержка смешанной точности на уровне отдельных тензоров.
  • Масштабирование: B200 объединяет два кристалла (die) через высокоскоростной мост, что удваивает количество Tensor Cores по сравнению с H100.

B200 ориентирован на обучение и инференс моделей с триллионами параметров, где каждый процент ускорения даёт огромную экономию.


6. Сравнение H100 и B200 Tensor Cores

ПараметрH100 (Hopper)B200 (Blackwell)
Поколение4-е5-е
Пиковая FP81979 TFLOPS>2000 TFLOPS
Пиковая FP16989 TFLOPS>1000 TFLOPS
Поддержка FP6/FP4НетДа
Transformer Engine1-е поколение2-е поколение
Количество Tensor Cores на SM44 (но больше SM)
Связь между кристалламиНет (один кристалл)NVLink 5.0 между двумя кристаллами
Энергопотребление (TDP)700 Вт1000 Вт

7. Для чего нужны Tensor Cores?

7.1 Ускорение GEMM — основы нейросетей

Любая операция в нейросети — это, по сути, матричное умножение:

  • Полносвязный слой: y = xW + b
  • Свёртка: разворачивается в GEMM через im2col
  • Механизм внимания: QK^T, softmax, PV
  • Эмбеддинги: умножение на матрицу весов

Tensor Cores ускоряют эти операции в 10–20 раз по сравнению с CUDA Cores, что напрямую сокращает время обучения и инференса.

7.2 Обучение LLM (mixed precision training)

При обучении больших моделей используется смешанная точность: веса хранятся в FP32, а прямые и обратные проходы выполняются в FP16/BF16/FP8. Tensor Cores позволяют выполнять эти вычисления максимально быстро. Например, обучение GPT-3 на H100 занимает недели вместо месяцев на V100.

7.3 Инференс LLM и RAG

В RAG-системах Tensor Cores ускоряют:

  • Вычисление эмбеддингов для запросов и документов (обычно через BERT или подобные модели).
  • Механизм внимания в генеративной модели (LLM) при формировании ответа.
  • Генерацию токенов — каждый шаг авторегрессии требует матричного умножения.

Благодаря FP8 и FP4 инференс может выполняться на одном GPU даже для моделей с сотнями миллиардов параметров (с квантизацией).

7.4 Энергоэффективность

Tensor Cores выполняют больше операций на ватт, чем CUDA Cores. Для дата-центров это означает снижение затрат на электроэнергию и охлаждение.


8. Программная поддержка и использование

Чтобы задействовать Tensor Cores, разработчику достаточно:

  1. Использовать типы данных с плавающей точкой половинной точности (FP16, BF16) или ниже (FP8, INT8).
  2. Вызывать стандартные операции линейной алгебры через библиотеки (cuBLAS, cuDNN, TensorRT).
  3. В PyTorch — включить автоматическую смешанную точность (AMP) через torch.cuda.amp:
import torch
from torch.cuda.amp import autocast, GradScaler

model = MyModel().cuda()
scaler = GradScaler()

for data, target in dataloader:
    with autocast():
        output = model(data)
        loss = loss_fn(output, target)
    scaler.scale(loss).backward()
    scaler.step(optimizer)
    scaler.update()

При этом torch.matmul и torch.nn.Linear автоматически используют Tensor Cores, если размерности кратны 8 (для FP16) или 16 (для FP8).


9. Ограничения и подводные камни

  • Точность: FP8 и FP4 могут приводить к потере качества, если не использовать техники квантизации (калибровка, clipping). Transformer Engine в H100/B200 частично решает эту проблему.
  • Размер матриц: Tensor Cores эффективны только для матриц, размерности которых кратны определённым значениям (например, 8 для FP16, 16 для FP8). Для маленьких матриц (например, в батч-нормализации) выгода минимальна.
  • Программная сложность: хотя библиотеки скрывают детали, для максимальной производительности нужно выравнивать размерности и избегать узких мест (например, операций, не поддерживающих Tensor Cores).
  • Энергопотребление: B200 потребляет 1000 Вт, что требует мощного охлаждения и источников питания.

Пет-проект для закрепления

Задача: Написать микро-бенчмарк на PyTorch, сравнивающий скорость матричного умножения с Tensor Cores (FP16) и без них (FP32 на CUDA Cores).

Инструменты: Python, PyTorch, CUDA, Jupyter Notebook.

Шаги:

  1. Создать две случайные матрицы размером 4096×4096.
  2. Выполнить умножение в FP32 (обычные CUDA Cores) — замерить время.
  3. Выполнить умножение в FP16 с использованием torch.matmul и autocast — замерить время.
  4. Убедиться, что размерности кратны 8 (для FP16).
  5. Повторить для разных размеров (1024, 2048, 4096) и построить график ускорения.
  6. Дополнительно: сравнить с умножением на CPU.

Ожидаемый результат: Ускорение в 5–15 раз для FP16 по сравнению с FP32, особенно на больших матрицах. График зависимости ускорения от размера матрицы.


Связь с другими вопросами

ВопросТема
101Архитектура Transformer
102Механизм внимания (self-attention)
201Квантизация моделей
202Дистилляция знаний
301Архитектура Agentic RAG
302Инструменты AI-агентов

Tensor Cores — фундаментальная технология, без которой невозможна современная работа с LLM. Понимание их работы помогает оптимизировать как обучение, так и инференс RAG-систем.


Навигация