# FP8, FP4 и BF16: как устроены числовые форматы для ИИ

> Разбор FP8, FP4 и BF16: раскладка битов, поблочное масштабирование NVFP4 и MXFP4, какие GPU поддерживают каждый формат, экономия памяти и потери качества.

Источник: https://fullgpu.com/ru/blog/fp8-fp4-precision-explained  
Обновлено: 2026-10-22  
Издатель: FullGPU (https://fullgpu.com/)

Выбор между FP8, FP4 и BF16 — это компромисс между памятью, скоростью и качеством. BF16 занимает два байта на значение и остаётся стандартом для обучения, а также для инференса, когда качество важнее всего. FP8 занимает один байт и широко используется для инференса на современных GPU. FP4 занимает полбайта, работает только с поблочным масштабированием и нативно поддерживается лишь новейшим оборудованием. В этом руководстве разобраны раскладка битов, форматы с поблочным масштабированием (NVFP4, MXFP4 и MXFP6), поддержка форматов разными GPU и то, как сделать выбор.

## FP8, FP4 и BF16: краткое сравнение

Число с плавающей запятой состоит из знакового бита, битов экспоненты и битов мантиссы. В таблице перечислены форматы, которые встречаются в работе с ИИ, — от самого широкого к самому узкому.

| Формат | Биты знака / экспоненты / мантиссы | Наибольшее конечное значение | Байт на значение | Типичное применение |
| --- | --- | --- | --- | --- |
| FP32 | 1 / 8 / 23 | ≈ 3,4 × 10³⁸ | 4 | Мастер-копия весов, состояние оптимизатора, накопление |
| TF32 | 1 / 8 / 10 | ≈ 3,4 × 10³⁸ | 4 в памяти | Матричные вычисления FP32 на тензорных ядрах NVIDIA |
| BF16 | 1 / 8 / 7 | ≈ 3,4 × 10³⁸ | 2 | Обучение, инференс с высоким качеством |
| FP16 | 1 / 5 / 10 | 65 504 | 2 | Инференс; для обучения нужно масштабирование функции потерь (loss scaling) |
| FP8 E4M3 | 1 / 4 / 3 | 448 | 1 | Веса и активации |
| FP8 E5M2 | 1 / 5 / 2 | 57 344 | 1 | Градиенты при обучении в FP8 |
| FP6 E2M3 / E3M2 | 1 / 2 / 3 и 1 / 3 / 2 | 7,5 и 28 | 0,75 | Веса с поблочным масштабированием (MXFP6) |
| FP4 E2M1 | 1 / 2 / 1 | 6 | 0,5 | Веса и активации с поблочным масштабированием (NVFP4, MXFP4) |

## Диапазон и точность: биты экспоненты и мантиссы

Биты экспоненты задают диапазон — насколько большим и насколько малым может быть значение. Биты мантиссы задают точность — насколько плотно значения расположены внутри этого диапазона. Все форматы по-разному делят один и тот же бюджет битов.

- **BF16** сохраняет 8 бит экспоненты от FP32 и поэтому охватывает тот же диапазон, а мантиссу сокращает до 7 бит — это примерно две-три значащие десятичные цифры. Поскольку диапазон совпадает с FP32, при обучении не нужно масштабирование функции потерь, и именно поэтому в обучении BF16 во многом вытеснил FP16.
- **FP16** точнее (10 бит мантиссы), но его максимум — 65 504, а малые градиенты обращаются в ноль (underflow), поэтому для обучения в FP16 нужно масштабирование функции потерь.
- **TF32** — не формат хранения. Это режим тензорных ядер, появившийся в поколении NVIDIA Ampere: он принимает входные данные в FP32, перемножает их с 10-битной мантиссой и накапливает результат в FP32. В PyTorch его разрешает `torch.set_float32_matmul_precision("high")`.

Матричные умножения на тензорных ядрах принимают входные данные низкой точности, но накапливают результат в более высокой точности — обычно в FP32. Низкая точность касается того, что вы храните и передаёте, а накопление защищает сумму.

## FP8: E4M3 и E5M2

FP8 существует в двух вариантах. У E4M3 выше точность, а максимум — 448, поэтому его используют для весов и активаций. E5M2 жертвует битом мантиссы ради диапазона — до 57 344, что подходит для градиентов при обучении в FP8. Например, Transformer Engine от NVIDIA в своём гибридном рецепте использует E4M3 в прямом проходе и E5M2 для градиентов.

Поскольку диапазон очень узкий, значения FP8 почти всегда сопровождаются масштабным коэффициентом: перед приведением к FP8 тензор масштабируется так, чтобы попасть в представимый диапазон, а масштаб сохраняется, чтобы значения можно было восстановить. Масштаб может задаваться на тензор, на канал, на токен или на блок. Гранулярность важна: при одном масштабе на тензор единственный выброс вынуждает выбрать крупный масштаб, и малые значения обращаются в ноль. Например, DeepSeek-V3 выпустили с весами в FP8 и отдельным масштабом для каждого блока 128 × 128; что это означает для памяти, показано в нашей статье [о системных требованиях DeepSeek R1](https://fullgpu.com/ru/blog/deepseek-hardware-requirements).

## FP6, FP4 и поблочное масштабирование: NVFP4 и MXFP4

FP4 в раскладке E2M1 может представить только 0; 0,5; 1; 1,5; 2; 3; 4 и 6, а также соответствующие отрицательные значения. При таком малом числе уровней один масштаб на тензор безнадёжен. Форматы с поблочным масштабированием дают каждому небольшому блоку значений собственный масштаб, который хранится рядом с данными.

| Формат | Элемент | Значений в блоке | Масштаб блока | Эффективных бит на значение |
| --- | --- | --- | --- | --- |
| NVFP4 (NVIDIA) | FP4 E2M1 | 16 | FP8 E4M3 плюс один масштаб FP32 на тензор | ≈ 4,5 |
| MXFP4 (OCP Microscaling) | FP4 E2M1 | 32 | 8-битная степень двойки (E8M0) | ≈ 4,25 |
| MXFP6 (OCP Microscaling) | FP6 E2M3 или E3M2 | 32 | 8-битная степень двойки (E8M0) | ≈ 6,25 |
| MXFP8 (OCP Microscaling) | FP8 E4M3 или E5M2 | 32 | 8-битная степень двойки (E8M0) | ≈ 8,25 |

Разницу между двумя форматами FP4 проще всего увидеть на одном блоке. Допустим, наибольшее по модулю значение в нём — 0,42. NVFP4 может выбрать масштаб, близкий к 0,42 / 6 = 0,07, и тогда 0,42 почти точно попадает на верхний код — 6. MXFP4 обязан использовать степень двойки: эталонное преобразование из спецификации OCP выбирает 2⁻⁴ = 0,0625, и 0,42 превращается в 6,72 — больше наибольшего кода, поэтому значение обрезается до 6 и декодируется как 0,375. Меньшие блоки и более гибкие масштабы позволяют NVFP4 точнее подстраиваться под каждый блок ценой лишней четверти бита на значение. Масштабы в виде степени двойки дешевле применять аппаратно, и они охватывают гораздо более широкий диапазон.

## Какие GPU поддерживают какие форматы

«Поддерживает» здесь означает, что тензорные ядра нативно выполняют вычисления в этом формате. Любой GPU может хранить 4-битные веса и разворачивать их до 16 бит перед умножением — на этом основаны методы квантования только весов, такие как GPTQ и AWQ, — но это экономит память и пропускную способность, а не вычисления.

| GPU | Архитектура | FP8 | FP6 | FP4 |
| --- | --- | --- | --- | --- |
| H100, H200 | Hopper | Да | Нет | Нет |
| L40S | Ada Lovelace | Да | Нет | Нет |
| RTX 4090 (для справки: в аренду мы его не сдаём) | Ada Lovelace | Да | Нет | Нет |
| B200, B300 | Blackwell, Blackwell Ultra | Да | Да | Да |
| RTX PRO 6000, RTX 5090 | Blackwell | Да | Да | Да |
| MI355X | AMD CDNA 4 | Да | Да (MXFP6) | Да (MXFP4) |

GPU NVIDIA Blackwell для дата-центров — B200 и B300 — поддерживают и NVFP4, и форматы OCP MX. На практике FP8 — самая низкая точность с плавающей запятой, которую нативно выполняют тензорные ядра Hopper и Ada, а Blackwell и MI355X добавляют FP6 и FP4. Конкретный пример — в нашем [сравнении H200 и B200](https://fullgpu.com/ru/compare/h200-vs-b200). Все GPU нашей [линейки серверов с одним GPU и 8-GPU-серверов](https://fullgpu.com/ru/gpus) поддерживают FP8 аппаратно.

## Экономия памяти: расчёт

Для модели с 70B параметров — только веса:

| Формат | Бит на вес с учётом масштабов | Веса | Где помещается |
| --- | --- | --- | --- |
| BF16 | 16 | ≈ 140 ГБ | Один B200 (180 ГБ) или B300 (288 ГБ) |
| FP8 | 8 | ≈ 70 ГБ | Один H100 впритык, один H200 с запасом |
| MXFP6 | ≈ 6,25 | ≈ 55 ГБ | Один RTX PRO 6000 (96 ГБ), с местом для KV-кэша |
| NVFP4 | ≈ 4,5 | ≈ 39 ГБ | Один RTX PRO 6000, с большим запасом для KV-кэша |
| MXFP4 | ≈ 4,25 | ≈ 37 ГБ | Один RTX PRO 6000; также нативно на MI355X |

Реальные чекпоинты получаются чуть больше, потому что эмбеддинги, выходной слой и веса нормализации часто остаются 16-битными. Ещё две вещи не уменьшаются вместе с весами: активации и KV-кэш, если только не квантовать и его. При декодировании, ограниченном пропускной способностью памяти, меньше байт на вес означает и меньше байт, которые нужно считать из памяти на каждый токен, поэтому пониженная точность не только экономит память, но и ускоряет генерацию. Полная методика расчёта — в статье о том, [сколько видеопамяти (VRAM) нужно для LLM (больших языковых моделей)](https://fullgpu.com/ru/blog/vram-for-llms).

## Качество: веса, активации и KV-кэш

Квантовать можно три разные вещи, и ведут они себя по-разному.

- **Веса** после обучения не меняются, поэтому их можно квантовать один раз, офлайн и аккуратно. 4-битное квантование только весов с 16-битными активациями (W4A16) — давно устоявшийся подход.
- **Активации** меняются с каждым входом и содержат выбросы — несколько каналов, значения в которых по модулю намного больше, чем в остальных. Им нужно динамическое масштабирование или калибровка. Квантование и весов, и активаций в FP8 (W8A8) позволяет выполнять матричные умножения на тензорных ядрах FP8; W4A4 с NVFP4 или MXFP4 — самая агрессивная из распространённых схем.
- **KV-кэш** можно хранить в FP8, чтобы вдвое сократить занимаемую им память, — это даёт больше одновременных запросов или более длинный контекст. В этом случае проверьте качество на длинных контекстах.

Калибровка — это прогон небольшого набора репрезентативных входных данных через модель, чтобы подобрать масштабы. Её автоматизируют такие инструменты, как NVIDIA TensorRT Model Optimizer, llm-compressor и AMD Quark. Оценивайте результат на важных для вас задачах, включая длинные контексты, математику и код, а не только по перплексии, и всегда сравнивайте с базовым вариантом в BF16. Чем меньше разрядность, тем сильнее результат зависит от конкретной модели и задачи.

В обучении подход консервативнее, чем в инференсе. Стандарт — смешанная точность с BF16; обучение в FP8 уже отработано на Hopper и Blackwell с помощью библиотек вроде Transformer Engine; обучение в 4 битах пока остаётся областью активных исследований.

## Почему производители приводят цифры без разреженности и с разреженностью

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

| GPU | BF16: без / с разреженностью | FP8: без / с разреженностью | FP4: без / с разреженностью |
| --- | --- | --- | --- |
| H100, H200 | 989 / 1 979 TFLOPS | 1 979 / 3 958 TFLOPS | Не поддерживается |
| B200 | 2,25 / 4,5 PFLOPS | 4,5 / 9 PFLOPS | 9 / 18 PFLOPS |
| B300 | 2,25 / 4,5 PFLOPS | 4,5 / 9 PFLOPS | 13,5 / 18 PFLOPS |
| MI355X | 2,5 / 5,0 PFLOPS | 5,0 / 10,1 PFLOPS | 10,1 PFLOPS (MXFP4) |

Значения с разреженностью предполагают структурированную разреженность. На GPU NVIDIA это схема 2:4: в каждой группе из четырёх последовательных весов два равны нулю, поэтому тензорные ядра могут пропускать половину умножений. Большинство LLM в инференсе работают без разреженности, поэтому планируйте, ориентируясь на значения без неё. Сравнивайте сопоставимое — одна громкая цифра может быть указана с разреженностью, а другая без неё — и проверяйте соотношение, а не принимайте его на веру: у B300 значения для FP4 (13,5 без разреженности и 18 с разреженностью) различаются не ровно в 2 раза. Пиковые значения — это потолок, которого реальные нагрузки достигают лишь частично. Обратите внимание и на закономерность в каждой строке: по этим данным производителей каждое снижение точности вдвое как минимум удваивает пиковую производительность без разреженности — это вторая половина аргументов в пользу FP8 и FP4.

## Практические советы: какую точность выбрать

- **Предобучение и полное дообучение (fine-tuning):** смешанная точность с BF16, при этом мастер-копия весов и состояние оптимизатора — в FP32. Для больших запусков на H100 и более новых GPU переходите на FP8, когда кривая функции потерь совпадёт с запуском в BF16.
- **Дообучение при ограниченном бюджете:** QLoRA — базовая модель хранится в 4-битном формате NF4, а обучаются 16-битные адаптеры.
- **Инференс на Hopper или Ada (H100, H200, L40S):** веса и активации в FP8, плюс KV-кэш в FP8, когда нужно больше одновременных запросов.
- **Инференс на Blackwell (B200, B300, RTX PRO 6000, RTX 5090):** начните с FP8, затем попробуйте NVFP4 там, где узким местом становятся память или пропускная способность, а ваши оценки качества это подтверждают.
- **Инференс на MI355X:** сначала FP8, затем MXFP4 или MXFP6 с той же проверкой.

В коде первые шаги совсем небольшие:

```
# PyTorch: allow TF32 tensor cores for FP32 matrix multiplications
torch.set_float32_matmul_precision("high")

# vLLM: quantize weights to FP8 at load time and keep the KV cache in FP8
vllm serve <model> --quantization fp8 --kv-cache-dtype fp8
```

Что бы вы ни выбрали, держите базовый вариант в BF16 и набор данных для оценки и проводите сравнение, прежде чем выпускать модель в продакшен. [Калькулятор видеопамяти](https://fullgpu.com/ru/tools/vram-calculator) покажет, как каждый формат меняет требования к GPU, а наше руководство [о лучшем GPU для инференса LLM](https://fullgpu.com/ru/blog/best-gpu-for-llm-inference) сопоставляет размеры моделей с оборудованием.

## Часто задаваемые вопросы

### FP8 лучше, чем BF16?

FP8 занимает вдвое меньше памяти и, по данным производителей, на GPU с тензорными ядрами FP8 даёт вдвое большую пиковую производительность, чем BF16. BF16 точнее, поэтому он остаётся стандартом для обучения, а инференс в FP8 стоит проверять относительно базового варианта в BF16.

### Поддерживает ли H100 формат FP4?

Нет. GPU поколения Hopper, такие как H100 и H200, поддерживают FP8, но тензорных ядер для FP4 и FP6 у них нет — они появились в Blackwell. При этом на H100 всё же можно хранить 4-битные веса с помощью квантования только весов: это экономит память, но вычисления идут в 16 битах.

### Чем NVFP4 отличается от MXFP4?

Оба формата хранят значения как 4-битные числа E2M1 с общим масштабом на блок. NVFP4 использует блоки по 16 значений с масштабом FP8 E4M3, а MXFP4 — блоки по 32 значения с масштабом в виде степени двойки, поэтому NVFP4 точнее подстраивается под каждый блок ценой чуть большего объёма хранения.

### Сколько памяти экономит FP4 по сравнению с BF16?

Для весов — почти в четыре раза: модель 70B уменьшается примерно со 140 ГБ в BF16 до 37–39 ГБ в MXFP4 или NVFP4 с учётом поблочных масштабов. KV-кэш и активации считаются отдельно и уменьшаются, только если квантовать и их.

### Стоит ли обучать модели в FP8?

Для больших запусков обучения на H100, H200 или GPU Blackwell формат FP8 может сократить трафик памяти и повысить производительность, а масштабирование берут на себя библиотеки вроде NVIDIA Transformer Engine. Сначала сверьте кривую функции потерь с запуском в BF16: BF16 остаётся надёжным вариантом по умолчанию.

## Связанные страницы

- [Сколько видеопамяти нужно для LLM?](https://fullgpu.com/ru/blog/vram-for-llms): Сколько видеопамяти (VRAM) нужно LLM? Короткие ответы для моделей 7B, 14B, 32B, 70B и 405B в BF16, FP8 и 4 битах, KV-кэш по длине контекста и подходящий GPU.
- [Лучший GPU для инференса LLM в 2026 году: подбор по размеру модели](https://fullgpu.com/ru/blog/best-gpu-for-llm-inference): Лучший GPU для инференса LLM зависит от размера модели, точности, KV-кэша и пропускной способности. Выбирайте по таблице 2026 года: от RTX 5090 до 8× B300.
- [H200 vs B200: Hopper или Blackwell для вашего следующего GPU-сервера?](https://fullgpu.com/ru/compare/h200-vs-b200): Сравнение H200 и B200: 141 против 180 ГБ, 4,8 против 8 ТБ/с, FP4 и NVLink 5. Что помещается, за что вы доплачиваете 1 500 $/мес. и когда выгоднее H200.
- [Калькулятор видеопамяти для LLM: поместится ли ваша модель на GPU?](https://fullgpu.com/ru/tools/vram-calculator): Бесплатный калькулятор видеопамяти для LLM: выберите Llama, Qwen, Mistral или gpt-oss, точность и длину контекста и посмотрите веса, KV-кэш и подходящие GPU.
