A. Smyntyna / Code
ENRU

BF16

Brain floating point — 16-битный числовой формат, придуманный Google Brain для машинного обучения. Он сохраняет ту же 8-битную экспоненту, что и полный 32-битный float, поэтому достаёт до тех же порядков величин, и расплачивается за это мантиссой, урезанной до 7 бит. Большинство открытых весов выходит в BF16 по 2 байта на параметр — поэтому модель на 27B и весит 54 ГБ.

Число с плавающей точкой хранится как знак, мантисса и экспонента: научная нотация в двоичном виде. Экспонента задаёт, насколько большим или маленьким число может стать. Мантисса задаёт, сколько значащих цифр выживет.

FP16 делит свои 16 бит так: 1 знак, 5 экспонента, 10 мантисса. BF16 делит их так: 1 знак, 8 экспонента, 7 мантисса. Тот же размер, другая ставка. Ставка Google Brain была в том, что нейросеть переживёт размытые цифры и умрёт на значениях, которые переполняются, — значит, надо сохранить диапазон и потратить мантиссу.

В терминах фотографии экспонента — это динамический диапазон, сколько ступеней вообще удаётся снять. Мантисса — это битность внутри ступени, насколько мелко каждая из них нарезана. BF16 сохраняет все ступени и режет их грубее.

Читать дальше