Назад к подготовке

Как устроены float и зачем нужен bfloat16

Как устроены числа с плавающей точкой? Чем bfloat16 отличается от float16 и почему его используют в нейросетях?

Ответить самому

Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.

Загрузка

Короткий ответ

Float хранит знак, экспоненту и мантиссу. bfloat16 экономит память как 16-битный формат, но сохраняет широкий диапазон FP32 за счет 8-битной экспоненты.

Полный разбор

Число с плавающей точкой представляется как sign, exponent и significand/mantissa. Экспонента задает масштаб, мантисса - значащие биты. FP32 имеет 1 бит знака, 8 бит экспоненты и 23 бита мантиссы.

bfloat16 использует 16 бит, но оставляет экспоненту шириной как у FP32: 1 бит знака, 8 бит экспоненты и 7 бит мантиссы. Он менее точен по мантиссе, зато лучше переносит широкий диапазон активаций и градиентов. В ML это удобно для обучения и инференса: меньше память и выше throughput, при этом меньше проблем с overflow/underflow, чем у FP16.