У наиболее распространенного на данный момент для обучения формата bfloat16 всего 7️⃣ бит на мантиссу. Обычно полагается, что такой формат lossless с точки зрения обучения и инференса (есть работы указывающие на сложность в воспроизводимости результатов в bf16).
Однако для некоторых слоев и тензоров, могут быть интересные последствия.
Некоторое время назад, обучая модельку, мы обнаружили, что веса при RMS нормах вообще не сдвинулись с места. При этом градиент тек по ним, и оптимизатор вполне себе их захватывал.
А дело в том, что в момент инициализации веса при RMS норме равны 1, и если обновление по величине не превышает
1e-3, то вес никогда не изменится. В bfloat16:
1 + 1e-3 = 1Собственно для таких ситуаций и нужна мастер копия в fp32.
