FP8
Узнай, что такое FP8, как работают E4M3 и E5M2 и как масштабирование, поддержка оборудования и смешанная точность улучшают обучение и вывод ИИ.
FP8, или 8-битный формат с плавающей точкой, — это числовой формат низкой точности, в котором каждое значение хранится в восьми битах. Системы ИИ используют FP8 для сокращения передачи данных из памяти и ускорения умножения матриц, свёрток и других ресурсоёмких операций на совместимом оборудовании. По сравнению с FP16 или FP32 этот формат представляет меньше различных значений, поэтому успешные рабочие процессы с FP8 сочетают быстрые вычисления низкой точности с масштабированием и выборочными операциями более высокой точности для сохранения качества модели.
Как FP8 представляет числа#
Число с плавающей точкой содержит знак, экспоненту, управляющую диапазоном, и мантиссу, управляющую детализацией. FP8 обычно представлен в двух форматах, описанных в типах данных с плавающей точкой PyTorch:
- E4M3: Один бит знака, четыре бита экспоненты и три бита мантиссы. Обеспечивает большую числовую детализацию, но более узкий диапазон.
- E5M2: Один бит знака, пять битов экспоненты и два бита мантиссы. Охватывает более широкий диапазон, но сильнее округляет значения.
E4M3 часто подходит для весов и активаций, тогда как E5M2 лучше справляется с градиентами, имеющими широкий диапазон значений. Точные варианты различаются на разных платформах, как показано в документации AMD по числам с плавающей точкой низкой точности, поэтому модель FP8 не является автоматически переносимой между всеми ускорителями и средами выполнения.
Поскольку восемь битов не могут представить весь исходный диапазон и детализацию тензора, фреймворки обычно умножают значения на коэффициент масштабирования перед преобразованием. В вводном материале NVIDIA по масштабированию FP8 описаны такие стратегии, как отложенное масштабирование, при котором будущие коэффициенты масштабирования вычисляются на основе ранее наблюдавшихся максимальных значений. Масштабирование ограничивает переполнение, потерю значимости и насыщение, не требуя выполнять каждую операцию с более высокой точностью.
FP8 и родственные форматы#
FP8 занимает промежуточное положение среди распространённых типов данных для ИИ:
- FP16, или половинная точность: Использует вдвое больше битов, обеспечивая большую числовую детализацию и, как правило, более простое обучение. FP8 позволяет ещё сильнее сократить объём хранения и пропускную способность, но требует более тщательного масштабирования.
- BF16: Сохраняет широкий диапазон экспоненты, обеспечивая при этом меньшую детализацию дробной части, чем FP16. Его часто используют как формат более высокой точности в обучении с FP8.
- INT8: Представляет целые числа, а не значения с плавающей точкой. Квантизация модели INT8 обычно использует коэффициенты масштабирования для отображения действительных значений на фиксированные целочисленные уровни, тогда как FP8 сохраняет экспоненту для естественного неравномерного шага между значениями.
- FP4: Использует всего четыре бита и может обеспечивать более сильное сжатие, но крайне ограниченные диапазон и гранулярность обычно усложняют сохранение точности.
FP8 часто является частью рабочего процесса со смешанной точностью, а не типом данных для каждого тензора. Накопление, нормализация, состояние оптимизатора или чувствительные слои могут оставаться в BF16, FP16 или FP32. Кроме того, числовая точность отличается от метрики оценки точности, которая измеряет, какая доля положительных предсказаний модели является правильной.
Практические применения#
Два практических применения показывают, почему FP8 важен:
-
Обучение больших моделей: Обучение Transformer постоянно выполняет большие умножения матриц. Фреймворк с поддержкой FP8 может преобразовывать подходящие веса и активации в FP8, сохраняя более высокую точность там, где этого требует стабильность. Это снижает требования к пропускной способности и может повысить производительность обучения. В рабочем процессе обучения с квантизацией TorchAO доступны варианты масштабирования по тензорам и по строкам, позволяющие выбирать между максимальной скоростью и более эффективной обработкой выбросов.
-
Высокопроизводительный вывод в задачах компьютерного зрения: Центр обработки данных может выполнять обнаружение объектов в сотнях видеопотоков из розничной торговли, транспорта или производства. Ядра с поддержкой FP8 могут сократить время и объём памяти, используемые подходящими слоями модели, потенциально уменьшая задержку вывода и увеличивая количество одновременно обрабатываемых потоков. В руководстве TensorRT по типам с квантизацией объясняется, как явные операции квантизации и обратной квантизации описывают выполнение FP8.
Числовые риски и поддержка оборудования#
Неправильное масштабирование может привести к насыщению больших значений и округлению малых значений до нуля. Выбросы особенно проблематичны, когда один коэффициент масштабирования применяется ко всему тензору. Эти эффекты могут изменять оценки уверенности, дестабилизировать обучение или снижать точность обнаружения, поэтому тебе следует проверять преобразованную модель по сравнению с её эталонной версией более высокой точности.
Не менее важна нативная поддержка оборудования. Архитектура NVIDIA Hopper представила ускорение FP8 на Tensor Core, тогда как более старая GPU NVIDIA A100 поддерживает FP16, BF16 и INT8, но не нативные вычисления FP8. Поэтому перед выбором точности для развёртывания следует проверить матрицу поддержки оборудования TensorRT.
Работа с FP8 на практике#
В этом небольшом примере на PyTorch показано преобразование E4M3 и ошибка округления, возникающая при восстановлении значений FP8 в FP32:
import torch
values = torch.tensor([0.1, 1.0, 3.14, 100.0], dtype=torch.float32)
# Convert to E4M3 FP8, then restore the values for comparison.
fp8_values = values.to(torch.float8_e4m3fn)
restored = fp8_values.to(torch.float32)
absolute_error = (restored - values).abs()
print(torch.stack((values, restored, absolute_error), dim=1))В документированном рабочем процессе экспорта Ultralytics в TensorRT для Ultralytics YOLO предусмотрены варианты FP16 и калиброванного INT8, но не экспорт FP8 одним аргументом. Поэтому для развёртывания FP8 требуется совместимая последующая цепочка инструментов преобразования. Независимо от выбранной точности, используй режим бенчмаркинга Ultralytics на целевой GPU, чтобы сравнить задержку, пропускную способность, использование памяти и точность задачи перед развёртыванием в рабочей среде.






