FP8
Узнай, что такое FP8, как работают E4M3 и E5M2, а также как масштабирование, аппаратная поддержка и смешанная точность улучшают обучение и инференс ИИ.
FP8, или 8-битная плавающая точка — это низкоточный числовой формат, который сохраняет каждое значение в восьми битах. Системы искусственного интеллекта используют FP8 для снижения нагрузки на память и ускорения матричных умножений, сверток и других ресурсоемких операций на совместимом оборудовании. По сравнению с FP16 или FP32, этот формат представляет меньше уникальных значений, поэтому успешные рабочие процессы FP8 сочетают быстрые вычисления низкой точности со скалированием и выборочными операциями более высокой точности для сохранения качества модели.
Link to this sectionКак FP8 представляет числа#
Значение с плавающей точкой содержит знак, показатель степени, который задает диапазон, и мантиссу, которая отвечает за детализацию. FP8 обычно встречается в двух форматах, описанных в документации по типам данных с плавающей точкой PyTorch:
- E4M3: Один знаковый бит, четыре бита порядка и три бита мантиссы. Он обеспечивает большую числовую детализацию, но более узкий диапазон.
- E5M2: Один знаковый бит, пять битов порядка и два бита мантиссы. Он охватывает более широкий диапазон, но более агрессивно округляет значения.
Формат E4M3 часто подходит для весов и активаций, в то время как E5M2 лучше справляется с градиентами, имеющими широкие диапазоны значений. Точные варианты различаются в зависимости от платформы, как показано в документации AMD по низкоточным типам с плавающей точкой, поэтому модель FP8 не является автоматически переносимой между любыми ускорителями и средами выполнения.
Поскольку восемь битов не могут передать полный исходный диапазон и детализацию тензора, фреймворки обычно умножают значения на коэффициент масштабирования перед конвертацией. В руководстве NVIDIA по масштабированию FP8 описываются такие стратегии, как отложенное масштабирование, при котором будущие масштабы вычисляются на основе ранее наблюдавшихся максимальных значений. Масштабирование ограничивает переполнение, антипереполнение и насыщение, не требуя выполнения каждой операции в более высокой точности.
Link to this sectionFP8 по сравнению со связанными форматами#
FP8 занимает промежуточное положение среди распространенных типов данных искусственного интеллекта:
- FP16 или половинная точность: Использует в два раза больше битов, предлагая большую числовую детализацию и обычно более простое обучение. FP8 может дополнительно уменьшить объем памяти и пропускную способность, но требует более аккуратного масштабирования.
- BF16: Сохраняет широкий диапазон порядков, обеспечивая при этом меньшую детализацию дробной части по сравнению с FP16. Он часто используется как компонент повышенной точности при обучении в формате FP8.
- INT8: Представляет целые числа, а не значения с плавающей точкой. Квантование модели INT8 обычно опирается на масштабы для сопоставления реальных значений с фиксированными целочисленными уровнями, в то время как FP8 сохраняет показатель степени для естественного неравномерного распределения.
- FP4: Использует всего четыре бита и может обеспечить большее сжатие, но его крайне ограниченный диапазон и детализация обычно затрудняют сохранение точности.
FP8 часто является частью рабочего процесса смешанной точности, а не типом данных для каждого тензора. Аккумуляция, нормализация, состояние оптимизатора или чувствительные слои могут оставаться в BF16, FP16 или FP32. Кроме того, числовая точность отличается от метрики оценки точности, которая измеряет, сколько положительных предсказаний модели являются правильными.
Link to this sectionРеальные приложения#
Два практических примера иллюстрируют, почему важен FP8:
-
Обучение больших моделей: Обучение Transformer многократно выполняет крупные матричные умножения. Фреймворк с поддержкой FP8 может преобразовывать подходящие веса и активации в FP8, сохраняя при этом более высокую точность там, где этого требует стабильность. Это снижает требования к пропускной способности и может увеличить скорость обучения. Рабочий процесс квантованного обучения TorchAO включает в себя варианты тензорного и построчного масштабирования, которые позволяют найти баланс между максимальной скоростью и лучшей обработкой выбросов.
-
Высокопроизводительный инференс компьютерного зрения: Центр обработки данных может запускать обнаружение объектов на сотнях видеопотоков из розничной торговли, дорожного движения или производства. Ядра с поддержкой FP8 могут сократить время и объем памяти, используемые подходящими слоями модели, потенциально снижая задержку инференса и увеличивая пропускную способность одновременных потоков. Руководство по квантованным типам TensorRT объясняет, как явные операции квантования и деквантования описывают выполнение FP8.
Link to this sectionЧисловые риски и аппаратная поддержка#
Неправильное масштабирование может привести к насыщению больших значений и округлению малых значений до нуля. Выбросы особенно опасны, когда один масштаб охватывает весь тензор. Эти эффекты могут сместить показатели уверенности, дестабилизировать обучение или снизить точность обнаружения, поэтому разработчикам следует проверять преобразованную модель по сравнению с ее базовым вариантом более высокой точности.
Встроенная аппаратная поддержка имеет не меньшее значение. Архитектура NVIDIA Hopper представила ускорение Tensor Core для FP8, в то время как более старый графический процессор NVIDIA A100 поддерживает FP16, BF16 и INT8, но не нативные вычисления в FP8. Поэтому перед выбором точности развертывания следует проверить матрицу аппаратной поддержки TensorRT.
Link to this sectionРабота с 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 предоставляет опции FP16 и откалиброванного INT8 для Ultralytics YOLO вместо одноаргументного экспорта FP8. Таким образом, развертывание FP8 требует совместимого нисходящего набора инструментов конвертации. Независимо от выбранной точности, используйте режим бенчмаркинга Ultralytics на целевом графическом процессоре (GPU), чтобы сравнить задержку, пропускную способность, использование памяти и точность решения задачи перед развертыванием в продакшене.






