中文翻译暂不可用,显示俄语原文。
Как работают 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) | FP16 | 125 TFLOPS |
| 2-е | Turing (T4) | FP16, INT8 | 65 TFLOPS (FP16) |
| 3-е | Ampere (A100) | FP16, BF16, INT8, INT4 | 312 TFLOPS (FP16) |
| 4-е | Hopper (H100) | FP16, BF16, FP8, INT8 | 989 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-е |
| Пиковая FP8 | 1979 TFLOPS | >2000 TFLOPS |
| Пиковая FP16 | 989 TFLOPS | >1000 TFLOPS |
| Поддержка FP6/FP4 | Нет | Да |
| Transformer Engine | 1-е поколение | 2-е поколение |
| Количество Tensor Cores на SM | 4 | 4 (но больше 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, разработчику достаточно:
- Использовать типы данных с плавающей точкой половинной точности (FP16, BF16) или ниже (FP8, INT8).
- Вызывать стандартные операции линейной алгебры через библиотеки (cuBLAS, cuDNN, TensorRT).
- В 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.
Шаги:
- Создать две случайные матрицы размером 4096×4096.
- Выполнить умножение в FP32 (обычные CUDA Cores) — замерить время.
- Выполнить умножение в FP16 с использованием
torch.matmulиautocast— замерить время. - Убедиться, что размерности кратны 8 (для FP16).
- Повторить для разных размеров (1024, 2048, 4096) и построить график ускорения.
- Дополнительно: сравнить с умножением на CPU.
Ожидаемый результат: Ускорение в 5–15 раз для FP16 по сравнению с FP32, особенно на больших матрицах. График зависимости ускорения от размера матрицы.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 101 | Архитектура Transformer |
| 102 | Механизм внимания (self-attention) |
| 201 | Квантизация моделей |
| 202 | Дистилляция знаний |
| 301 | Архитектура Agentic RAG |
| 302 | Инструменты AI-агентов |
Tensor Cores — фундаментальная технология, без которой невозможна современная работа с LLM. Понимание их работы помогает оптимизировать как обучение, так и инференс RAG-систем.
Навигация
- Предыдущий: 302
- Следующий: 304
- Индекс: 00. Индекс разборов