FP16 vs BF16
В чем разница между FP16 и BF16 и почему BF16 часто устойчивее для обучения?
Короткий ответ
BF16 имеет 8 бит exponent как FP32 и меньше mantissa; FP16 имеет больше mantissa, но намного меньший dynamic range. Поэтому BF16 реже ловит overflow/underflow.
Полный разбор
FP16 и BF16 занимают 16 бит, но распределяют их по-разному. FP16 хранит больше precision в mantissa, но exponent меньше, поэтому dynamic range ограничен. BF16 сохраняет exponent как у FP32, поэтому лучше переносит большие и маленькие значения, но имеет меньше точности в mantissa.
Для обучения нейросетей dynamic range часто важнее небольшой дополнительной точности, потому что gradients/activations могут сильно различаться по масштабу. Поэтому BF16 часто позволяет обучать без loss scaling или с меньшим количеством numerical issues.
На inference выбор зависит от hardware support, качества, throughput и требований модели.
Теория
BF16 - компромисс: меньше точность, но шире диапазон. Для deep learning это часто удачный баланс.
Типичные ошибки
- Сказать, что BF16 всегда точнее FP16.
- Не различать mantissa и exponent.
- Не связать формат с overflow/underflow.
Как отвечать на собеседовании
- Сравни dynamic range и precision.
- Упомяни loss scaling для FP16.