BF16, FP16 или FP8: в каком формате обучать модель?

Автоматический перевод

Эта статья была автоматически переведена с оригинальной английской версии.

Начните с BF16, если GPU и программный стек обучения его поддерживают. Используйте FP16 с масштабированием функции потерь, если BF16 недоступен или измерения на вашей нагрузке показывают преимущество FP16. Проверяйте FP8 с помощью поддерживаемой реализации смешанной точности, если throughput обучения оправдывает дополнительные численные проверки.

Смешанная точность использует разные форматы для разных операций и состояний. Выбор BF16 или FP8 не означает, что каждый тензор использует этот формат.

Диапазон и точность решают разные задачи

Экспонента определяет диапазон значений. Биты дробной части определяют, насколько близкими могут быть соседние представимые значения. BF16 сохраняет ту же разрядность экспоненты, что и FP32, но содержит меньше битов дробной части. FP16 обеспечивает более высокую точность, чем BF16, в пределах своего более узкого диапазона.

ФорматБиты экспоненты / дробной частиПрактическое значение
BF168 / 7Широкий диапазон; обычно позволяет обойтись без масштабирования функции потерь
FP165 / 10Малые градиенты могут быть слишком малы для представления; используйте масштабирование функции потерь
FP8 E4M34 / 3Выше точность, чем у E5M2, но уже диапазон
FP8 E5M25 / 2Более широкий диапазон для тензоров, например градиентов

В FP16 масштабирование функции потерь умножает её значение перед обратным проходом и отменяет масштабирование градиентов перед обновлением оптимизатора. Это помогает сохранять малые градиенты представимыми. Переполнение всё равно нужно обрабатывать.

Документация NVIDIA Transformer Engine описывает обычную гибридную схему FP8: E4M3 для тензоров прямого прохода и E5M2 для тензоров обратного прохода, с масштабированием, подобранным для тензоров. Форматы Blackwell с блочным масштабированием добавляют другие схемы; сама по себе поддержка оборудования не выбирает схему для вашей модели.

Подготовьте базовый вариант для численного сравнения

Выполните репрезентативный фрагмент обучения с тем же порядком данных и настройками оптимизатора. Сравните пиковое потребление памяти, время шага, поведение функции потерь, нечисловые и бесконечные значения и качество на данных, отложенных для оценки. Сохраняйте численно чувствительные операции и состояния оптимизатора в точности, которую требует реализация.

Более быстрый запуск, который расходится или не достигает требуемого качества, не снижает стоимость обучения. И наоборот, стабильного варианта на BF16 может быть достаточно без дополнительной работы над FP8.

Раздел LLM Engineering Guide об обучении со смешанной точностью содержит диапазоны форматов и опубликованные результаты обучения.